Git Product home page Git Product logo

Comments (1)

rexfordessilfie avatar rexfordessilfie commented on June 15, 2024 1

Thanks for raising this @ryo-manba. I was just about to request similar as well! Being able to serialize non-primitives so they are cached will be very helpful, especially since fetch patch is being (temporarily) removed in #28896.

I gave this a little think to see what an API could look like, and I came up with the following:

Introduce a hash function that receives all function arguments and returns array of argument hashes.

function cache(fn, argsHashFn?){}

For example:

const x = cache((vec) => sum(vec), (vec) => [vec.join(',')])

// Example
x([1, 2]) // Cache miss
x([1, 2]) // Cache hit
x([1, 3]) // Cache miss

Interesting cases

  • Explicitly hashing some arguments but not others by passing empty element or undefined. In this case, default behavior of hashing by the arg itself will apply.
const x = cache((s, vec) => scale(s, vec), (_s, vec) => [,JSON.stringify(vec)])
  • Specifying constant hashes to cache all invocations to the same result
const x = cache((s, vec) => scale(s, vec),  () => [true, true])

Thoughts
This may introduce some overhead to the function invocation, but if building the hash array is cheaper than invoking the function, then caching in this way makes sense. Otherwise a different approach would be better suited.

Extra

Edit: could not figure this out. It looks like the best solution is from inside cache itself.
As I typed this, I thought of a more 'cursed' way of achieving memoized behavior without making changes to existing cache implementation. Potentially, you could introduce some Map managed in user-land that could be used to stabilize the references of non-primitive arguments to a function call. Not sure if I know enough to build this out, but I'll give it a go!

from react.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.