Comments (5)
Wow, quite a subtle bug — thanks so much for sharing! I wonder if #89 would help in that case instead of using TextDecoder
(which is much slower last time I checked)?
from pbf.
Nope, push
+ join
also crashed with OOM on the repro above (with n = 27).
from pbf.
I did some benchmarking of TextDecoder
here: https://jsperf.com/textdecoder-vs-readutf8/7
Seems like readUtf8
is much faster for small payloads (i.e. no startup cost) which seems pretty important for Mapbox, but becomes radically slower for larger payloads (likely because of the V8 behavior). The crossover point is in the neighborhood of 32 for my machine.
I will probably do something like this:
function readUtf8(buf, pos, end) {
return end - pos < 32 ?
originalReadUtf8(buf, pos, end) :
textDecoder.decode(buf.subarray(pos, ed)
}
from pbf.
@dcervelli thanks a lot for your suggestion! It worked perfectly, although we found the sweet spot to be smaller (~12 characters), which fits with Benedikt's hint here.
In particular, this fixed a huge memory leak in both Chrome & Firefox in GL JS where in certain rare cases (with lots of long strings in tiles), worker memory footprint would grow to gigabytes within seconds, whereas with this patch it's stable and stays below 20MB.
from pbf.
@dcervelli One more note — the reason why the inflection point was 32 rather than 12 is that the benchmark used ASCII-only characters; once mix in some other letters (Cyrillic etc.), the perf characteristic is very different. I think we should go with 12 so that performance is stable for all languages, and I'm also good with accepting some decoding overhead for ASCII strings of length 12-32 if it helps avoid memory leaks like the one in mapbox/mapbox-gl-js#8471. cc @ahk
from pbf.
Related Issues (20)
- osm-file processing HOT 1
- Implementing the depreciated start and end groups types HOT 1
- Generate typescript declarations HOT 1
- ENOENT error for valid proto files HOT 2
- Empty string decoded as true as map value HOT 1
- Error using google.protobuf.Any HOT 9
- Performance question HOT 1
- strange coordinates after parser mapbox pbf HOT 1
- Converting pbf to typescript - Both the compiler and the output. HOT 2
- Handling of nulls in writePackedVarint HOT 2
- I use nodejs request module, can not create a Pbf object HOT 1
- pbf is rounding Long Integer values to nearest value why ?
- pbf is rounding the Long integer value to nearest value why? HOT 2
- ESM Support HOT 1
- Support BigInts for 64-bit numbers above 2 ** 53 HOT 2
- Package information is missing in the [imported] messages. HOT 1
- Is your library CSP friendly? (not using any unsafe eval expression)? HOT 3
- gtfs realtime pbf is empty? HOT 1
- Error: Unimplemented type: 6 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pbf.