`
wanghuanqiu
  • 浏览: 109535 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

缓存调用方法结果(转)

 
阅读更多
 收藏代码
  1. // memoize: 使用memoization来缓存的通用方法   
  2. // func: 要被缓存的方法   
  3. // context: 方法执行上下文   
  4. // Note: 方法必须是外部可访问的,参数是可字符序列化的   
  5. function memoize (func, context) {   
  6.     function memoizeArg (argPos) { //参数表示原始方法中参数的位置   
  7.         var cache = {}; //这个缓存的key是参数,value是执行结果   
  8.         return function () { //返回一个函数闭包   
  9.             if (argPos == 0) { //第一个参数,如果参数在缓存的key中不存在,就执行原始函数并且存储执行结果   
  10.                 if (!(arguments[argPos] in cache)) {   
  11.                     cache[arguments[argPos]] = func.apply(context, arguments);   
  12.                 }   
  13.                 return cache[arguments[argPos]];   
  14.             }   
  15.             else { //不是第一个参数,如果参数在缓存的key中不存在,就递归执行memoizeArg方法,原始方法中参数的位置-1   
  16.                 if (!(arguments[argPos] in cache)) {   
  17.                     cache[arguments[argPos]] = memoizeArg(argPos - 1);   
  18.                 }   
  19.                 return cache[arguments[argPos]].apply(this, arguments);   
  20.             }   
  21.         }   
  22.     }   
  23.     var arity = func.arity || func.length; //func参数的长度,javascript中用length属性,其它的用arity属性   
  24.     return memoizeArg(arity - 1); //从最后一个参数开始递归   
  25. }   

 

var mem = memoize(func, this);  
alert(mem.call(this,"a",1,2));  
alert(mem.call(this,"y",0,2)); 

 

函数闭包中在递归调用时,每次都会保持着一个指向递归函数的引用

分享到:
评论

相关推荐

    websphere缓存java调用以及jar包

    这通常通过Java代码调用Cache Manager的相关方法来实现。 5. **Jar包**:与缓存操作相关的Java库,如`com.ibm.websphere.cache.jar`,包含了处理缓存操作所需的类和接口。这些库需要在项目的类路径中引用,以便进行...

    行业分类-设备装置-一种接口调用的缓存实现方法.zip

    首先,接口调用缓存的基本思想是将频繁访问且结果相对稳定的接口调用结果存储起来,当下次需要同样的调用时,可以直接从缓存中获取结果,而无需再次执行实际的接口调用。这种方法可以大大降低服务器的压力,提高服务...

    使用AI调用预测和缓存的方法和系统 .pdf

    使用AI调用预测和缓存的方法和系统 .pdf

    dwr 各种调用方法

    dwr (Direct Web Remoting) 是一种开源技术,它允许在Web应用程序中实现在客户端JavaScript与服务器端Java之间进行安全的远程方法调用。DWR简化了前后端交互,使得前端可以直接调用后端的Java方法,就像调用本地函数...

    ehcache缓存方法返回结果(一)-MethodCacheInterceptor

    MethodCacheInterceptor是基于AOP(面向切面编程)的一种缓存拦截器,它允许我们在方法调用前后插入特定的逻辑,例如在方法执行前检查缓存,如果存在结果则直接返回,否则执行方法并存储结果到缓存中。这种方式可以...

    Go-Go包用于在内存中缓存DNS查找结果

    这个包将DNS查找的结果存储在内存中,当需要进行相同查询时,可以直接从缓存中获取,避免了网络延迟和系统调用的开销。 2. **TTL管理**:DNS查询结果通常带有生存时间(Time To Live,TTL),表示记录的有效时间。...

    .net c# memcached缓存获取所有缓存键的方法步骤.docx

    使用 Memcached 客户端实例,调用 `GetStats` 方法获取所有缓存键,例如: ```csharp Hashtable stats = client.GetStats(); ``` 其中,`GetStats` 方法将返回一个包含所有缓存键的 Hashtable 对象。 4. 遍历缓存...

    spring简单的缓存

    当方法被调用时,其结果会被存储在指定的缓存中,下次调用时,如果缓存中有该结果,将直接返回,不再执行方法体。 - `@CacheEvict`:用于清除缓存中的数据。可以在方法执行前后,或者根据方法的返回值或异常情况...

    nginx缓存的使用: 缓存HTTP API接口的返回结果,下次再调用API时,直接从缓存中取出上次的结果

    nginx缓存教程: 缓存API接口的返回结果,下次再调用API时,直接从缓存中取出上次的结果

    dubbo+zookeeper缓存方案

    总的来说,Dubbo 和 Zookeeper 结合的缓存方案是分布式系统中实现数据一致性的一种有效方法,它利用服务发现和集群通信的能力,解决了多节点环境下缓存同步的难题。不过,任何技术都有其适用场景,实施时需综合考虑...

    方法级缓存方案

    本话题将聚焦于“方法级缓存方案”,这是一种将方法执行结果存储起来,下次调用时直接从缓存中获取,避免重复计算或数据库查询的技术。我们将探讨其原理、实现方式以及相关的工具。 方法级缓存通常应用于业务逻辑中...

    android和js相互调用

    在Android和JavaScript交互的过程中,开发者经常需要在两者之间进行数据传递和方法调用,以便实现更复杂的混合式应用开发。这种技术通常应用于Webview环境,其中Android原生代码与嵌入的网页内容进行互动。本篇文章...

    dwr实例,JavaScript调用java方法的小例子

    9. **Caching**:DWR支持缓存,可以提高性能,尤其是在反复调用同一方法时。 10. **实时更新(Remote Update)**:DWR的实时更新功能允许服务器主动推送数据到客户端,而无需客户端发起请求,这在实现实时应用时非常...

    让html页面不缓存js的实现方法

    很多朋友都会碰到这样的情况:如果我们页面加载了js的话下次打开时也会是调用这个js缓存文件,但对于我们调试时是非常的不方便了,本文就来谈论如何解决这一问题,下面一起来看看。 不缓存JS的方法其实挺简单,CSS在...

    spring缓存机制-入门实例

    - 缓存方法的调用者无须关心缓存的存在,只需调用方法即可。Spring会在幕后处理缓存的存取。 - 如果需要自定义缓存策略,可以通过实现`CacheResolver`、`KeyGenerator`和`CacheErrorHandler`接口来自定义缓存解析...

    springboot缓存一致性解决

    `@Cacheable`用于缓存方法的返回结果,`@CacheEvict`用于清除缓存,`@CachePut`则是在调用方法后更新缓存,无论方法是否已存在于缓存中。 3. **缓存更新策略**: - **事件驱动**:当数据库中的数据发生变化时,...

    Spring 与Ehcache实现基于方法的缓存

    在上面的代码中,`@Cacheable`注解使得每次调用`getUserById`时,如果结果已经在缓存中,则直接返回,不再执行方法体内的数据库查询逻辑。`@CacheEvict`注解会在`deleteUserById`执行后清除对应的缓存条目,避免...

    spring-cache(通过key值更新缓存)

    5. **条件式缓存更新**:在某些情况下,我们可能希望有条件地更新缓存,而不是每次调用方法都更新。这可以通过在`@CacheEvict`上设置`condition`属性实现。例如: ```java @CacheEvict(value = "myCache", key = ...

    springMVC+Ehcache的各级缓存(包括页面缓存)

    - 方法级缓存:使用`@Cacheable`注解标记方法,每次调用该方法时,会首先检查缓存中是否有结果,如果有则直接返回,否则执行方法并将结果存入缓存。 - 类级缓存:整个类的所有方法共享同一份缓存,适用于所有方法...

    webapi接口缓存组件

    这样,每次调用这些接口时,都会先检查缓存,若命中则返回缓存结果,否则执行业务逻辑并保存响应到缓存。 三、使用与扩展 这个自定义的WebAPI接口缓存组件应该具有易用性和可扩展性。用户可以简单地在API接口上添加...

Global site tag (gtag.js) - Google Analytics