资讯专栏INFORMATION COLUMN

【每日一包0019】mem

yanbingyun1990 / 1242人阅读

摘要:地址用于通过缓存具有相同输入的调用结果来加速连续函数调用的优化普通用法支持基于的异步函数调用第二参数用法用法设置缓存时长,默认默认所有参数相同才启用缓存数据,但你也可以设置只缓存第一个参数也就是只要第一个参数相同,就采用缓存值设置缓存方式,

[github地址:https://github.com/ABCDdouyae...]

mem
用于通过缓存具有相同输入的调用结果来加速连续函数调用的优化
普通用法 (支持基于promise的异步函数调用)
const mem = require("mem");

let i = 0;
let a = () => i++;

let mem_a = mem(a);

mem_a();
console.log(i);//1
mem_a();
console.log(i);//1
mem_a(10);
console.log(i);//2
mem_a();
console.log(i);//2
mem_a(11);
console.log(i);//3
let b = async () => j++;
let mem_b = mem(b);

(async ()=> {
  await mem_b();
  console.log(j);//1
  await mem_b();
  console.log(j);//1
  await mem_b(10);
  console.log(j);//2
})();
第二参数用法

用法:mem(Function, options|object)

maxAge:设置缓存时长,默认infinity

const mem = require("mem");
const got = require("got");
const delay = require("delay");
 
const memGot = mem(got, {maxAge: 1000});
 
(async () => {
    await memGot("sindresorhus.com");
 
    // This call is cached
    await memGot("sindresorhus.com");
 
    await delay(2000);
 
    // This call is not cached as the cache has expired
    await memGot("sindresorhus.com");
})();

cacheKey:默认所有参数相同才启用缓存数据,但你也可以设置只缓存第一个参数(也就是只要第一个参数相同,就采用缓存值)

let c = (a, b) => k++;
let mem_c = mem(c);
mem_c(1, 2);
console.log(k);//1
mem_c(1, 3);
console.log(k);//2
mem_c(1, 3);
console.log(k);//2

let d = (a, b) => l++;
let mem_d = mem(d, {cacheKey: x => JSON.stringify(x)});
mem_d(1, 2);
console.log(l);//1
mem_d(1, 3);
console.log(l);//1
mem_d(2, 3);
console.log(l);//2

cache:设置缓存方式,默认new Map(),例如.has(key), .get(key), .set(key, value), .delete(key), and optionally .clear(). You could for example use a WeakMap instead or quick-lru for a LRU cache.

cachePromiseRejection:缓存promise的reject的返回,默认为false

mem.clear(fn):清除某个函数的缓存数据

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99518.html

相关文章

  • 每日一包0019mem

    摘要:地址用于通过缓存具有相同输入的调用结果来加速连续函数调用的优化普通用法支持基于的异步函数调用第二参数用法用法设置缓存时长,默认默认所有参数相同才启用缓存数据,但你也可以设置只缓存第一个参数也就是只要第一个参数相同,就采用缓存值设置缓存方式, [github地址:https://github.com/ABCDdouyae...] mem 用于通过缓存具有相同输入的调用结果来加速连续函数调...

    RiverLi 评论0 收藏0
  • 每日一包0019mem

    摘要:地址用于通过缓存具有相同输入的调用结果来加速连续函数调用的优化普通用法支持基于的异步函数调用第二参数用法用法设置缓存时长,默认默认所有参数相同才启用缓存数据,但你也可以设置只缓存第一个参数也就是只要第一个参数相同,就采用缓存值设置缓存方式, [github地址:https://github.com/ABCDdouyae...] mem 用于通过缓存具有相同输入的调用结果来加速连续函数调...

    Ku_Andrew 评论0 收藏0
  • Python每日一练0019

    摘要:问题中如何将在十进制和二八十六进制之间互相转换解决方案十进制向二八十六进制转换分别使用这样转换会有一个前缀,如果不想要前缀只想要数值的话,可以使用二八十六进制向十进制转换直接使用即可,因为的原型是,所以我们只需要指定就行了讨论如果只是需要在 问题 Python中如何将int在十进制和二、八、十六进制之间互相转换 解决方案 十进制向二、八、十六进制转换 分别使用bin、oct、hex >...

    robin 评论0 收藏0
  • 每日一包0029】merge-descriptors

    摘要:地址源码依赖一个对象的属性继承另一个对象的属性及其属性描述符用法继承者,被继承者是否继承者有该属性的时候继承默认不继承返回继承后的新的对象当第三个参数为时候,原对象又该属性则没有继承被继承者的属性和属性描述符 [github地址:https://github.com/ABCDdouyae...] merge-descriptors (express源码依赖) 一个对象的属性继承另一个对...

    kun_jian 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<