Comments (9)
Essentially those are the kind of logic we might want to consider.
Just run a flamegraph against https://github.com/mercurius-js/cache/tree/main/bench and you'll see the bottleneck.
from async-cache-dedupe.
another option would be to modify the serialize()
function so it constructs/returns a string instead of an object that's later stringified. Not sure if this is feasible though.
@mcollina does the following screenshot corroborate your findings?
from async-cache-dedupe.
Also, mercurius-js/cache is still using v0.5.0 of async-cache-dedupe. Perhaps we can revisit when it has the newer code?
It has been updated this week.
from async-cache-dedupe.
What about this one? https://github.com/epoberezkin/fast-json-stable-stringify
from async-cache-dedupe.
See the benchmarks at https://github.com/BridgeAR/safe-stable-stringify#performance--benchmarks
from async-cache-dedupe.
@mcollina any way you can share the analysis or provide instructions to repro?
safe-stable-stringify
seems pretty fast compared to other stringify options and v8 serialization. We could try a different approach, e.g. cache array lengths and lists of top-level object keys as well. This might help detect cache misses more quickly before stringifying giant nested objects. I'm not sure this addresses a cause of the bottleneck you mentioned though.
from async-cache-dedupe.
Yes, exactly. It gets worse as the parameters size grows.
from async-cache-dedupe.
I've tried using yieldable-json
and worker threads with pinscina
for stringification. Both approaches under-perform safe-stable-stringify
. Unless there are other benchmarks indicating that safe-stable-stringify
is a serious performance concern, perhaps it makes sense to optimize mercurius cache serialization instead?
Also, mercurius-js/cache
is still using v0.5.0 of async-cache-dedupe
. Perhaps we can revisit when it has the newer code?
from async-cache-dedupe.
I'll close this for now./
from async-cache-dedupe.
Related Issues (20)
- Get data from cache synchronously HOT 1
- Some non-browser runtimes do not provide setImmediate
- fix flaky test for node v18
- adopt borp as test reporter
- Is there a way to tell if the result comes from a cache hit or miss? HOT 1
- renew TTL onHit HOT 1
- Got data hits two times in a roll from cache but returned different results HOT 3
- Option to use superjson to keep furher types (eg. Dates) HOT 2
- Undefined method: `setTimeout(...).unref` HOT 5
- Browsers do not implement setImmediate HOT 1
- `transformer` not working properly when `reference` argument is set in `cache.define` HOT 1
- "require is not defined" HOT 5
- Shouldn't reference parameters be typed? HOT 1
- Removing the need of CachedFunctions in Typescript HOT 8
- Should `stale` configuration option support a function HOT 9
- ttl vs stale HOT 5
- Invalid string length at StorageRedis.clearReferences HOT 15
- update deps
- migrate test to node:test core lib HOT 6
- Using async cache dedupe for http request caching HOT 5
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 async-cache-dedupe.