Comments (3)
Yes—but the test above is benchmarking a situation that should never happen.
It tests the pattern:
- 50,000,000 elements in
- 50,000,000 elements out
However, actual patterns will look like this:
- 2 elements in
- 1 element out
- 1 element in
- 2 elements out
- 4 elements in
- 1 element out
- …
So we'd need evidence that the performance gains translate to frequent additions/deletions.
Separately, it's good for V8 to have some warmup runs before measuring.
from asynciterator.
I created a quick example:
// 100 iterators, with 1,000,000 push/read sequences of 0–4 items
console.time('LinkedList');
for (let a = 0; a < 100; a++) {
const list = new LinkedList();
for (let i = 0; i < 1_000_000; i++) {
for (let j = randInt(0, 4); j > 0; j--)
list.push(i);
for (let j = randInt(0, 4); j > 0; j--)
list.shift();
}
}
console.timeEnd('LinkedList');
console.time('LinkedListNext');
for (let a = 0; a < 100; a++) {
const list = new LinkedListNext();
for (let i = 0; i < 1_000_000; i++) {
for (let j = randInt(0, 4); j > 0; j--)
list.push(i);
for (let j = randInt(0, 4); j > 0; j--)
list.shift();
}
}
console.timeEnd('LinkedListNext');
function randInt(min: number, max: number) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
which yields for me
LinkedList: 6.865s
LinkedListNext: 6.584s
And this includes the fact that LinkedListNext
keeps a lot of items in memory.
from asynciterator.
I'll close this for now until new evidence emerges.
from asynciterator.
Related Issues (20)
- Iterators 'blocking' each other HOT 2
- Feat: Performance Tests HOT 1
- AsyncIterator-ext Package HOT 7
- Performance: Improve performance of `append` and `prepend` HOT 1
- Possible memory leaks HOT 2
- Make @types/node a dependency (rather than devDependency) HOT 2
- Remove self
- WrappingIterator does not destroy sources HOT 2
- Discussion: Destroy propagation in callback-based TransformIterator HOT 5
- Move each iterator to its own source file
- potential bug: `wrap` now autostarting iterators that were previously not autostarted prior to optimisation work HOT 17
- Feat: Make asynciterator asynciterable HOT 2
- Migrate to use a different event emitter base HOT 2
- What happens to iterators after they error? HOT 4
- Investigate macroTasking HOT 5
- Emit destroyed event once upon destroy
- Intermediate async iterator does not correctly emit readable event, unpredictably HOT 2
- Debug mode
- How can a whole text stream be consumed into a string? HOT 1
- `AsyncIterator` type is not covariant 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 asynciterator.