-
SurveyJS
Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
This is generic enough and we can use it for all functions, no matter how many parameters they expect -- it would even work with functions with a variable number of parameters; can you see why? Our memoization function is quite efficient, also, but if you need memoization in your code, you'd do even better by using fast-memoize, which boasts of being the speediest available memoizer; you can read how it was written in How I wrote the world's fastest JavaScript memoization library by Caio Gondim.
You must be careful when reading about "caching" or "memoizing" in the documentation for frameworks such as Vue or React because it doesn't mean what you would think it does. For instance, in Vue you have computed properties and their documentation says that "computed properties are cached based on their reactive dependencies [and] will only re-evaluate when some of its reactive dependencies have changed." Similarly, the documentation for getters for computed values in Vuex mentions that "a getter's result is cached based on its dependencies, and will only re-evaluate when some of its dependencies have changed". These two references don't imply memoizing: only that Vue is smart enough not to redo the calculation for a computed value if none of its dependencies have changed: if a computed value depends on attributes X, Y, and Z, Vue won't recalculate the computed value unless X, Y, or Z changes; meanwhile, it will cache the previously computed value.
You must be careful when reading about "caching" or "memoizing" in the documentation for frameworks such as Vue or React because it doesn't mean what you would think it does. For instance, in Vue you have computed properties and their documentation says that "computed properties are cached based on their reactive dependencies [and] will only re-evaluate when some of its reactive dependencies have changed." Similarly, the documentation for getters for computed values in Vuex mentions that "a getter's result is cached based on its dependencies, and will only re-evaluate when some of its dependencies have changed". These two references don't imply memoizing: only that Vue is smart enough not to redo the calculation for a computed value if none of its dependencies have changed: if a computed value depends on attributes X, Y, and Z, Vue won't recalculate the computed value unless X, Y, or Z changes; meanwhile, it will cache the previously computed value.
You must be careful when reading about "caching" or "memoizing" in the documentation for frameworks such as Vue or React because it doesn't mean what you would think it does. For instance, in Vue you have computed properties and their documentation says that "computed properties are cached based on their reactive dependencies [and] will only re-evaluate when some of its reactive dependencies have changed." Similarly, the documentation for getters for computed values in Vuex mentions that "a getter's result is cached based on its dependencies, and will only re-evaluate when some of its dependencies have changed". These two references don't imply memoizing: only that Vue is smart enough not to redo the calculation for a computed value if none of its dependencies have changed: if a computed value depends on attributes X, Y, and Z, Vue won't recalculate the computed value unless X, Y, or Z changes; meanwhile, it will cache the previously computed value.
The fibo2(n) function performs perfectly well, because in JavaScript you may reassign a function. However, if you are using ESLint you'll get an objection, because reassigning functions is often a source of bugs, and the no-func-assign rule prohibits it.