vue源码之纯函数缓存

先欣赏一段大神解释

函数缓存的目的在于:将处理过的数据缓存,减少函数执行次数,提升前端程序性能。

最关键代码:return cache[str]; || (cache[str] = fn(str))

传统的数据处理,每次都需要经过函数。

function tradition(str){
  return str.charAt(0).toUpperCase() + str.slice(1)
}

var foo = tradition("Frank")
var bar = tradition("Kai")
var baz = tradition("Kai")

缓存的数据处理,只有当缓存中没有时才经过函数处理。

/**
 * Create a cached version of a pure function.
 */
function cached (fn) {
  var cache = Object.create(null);
  return (function cachedFn (str) {
    var hit = cache[str];
    return hit || (cache[str] = fn(str))
  })
}
var capitalize = cached(function (str) {
  return str.charAt(0).toUpperCase() + str.slice(1)
});
//未缓存
var lastName = capitalize("Frank")
var firstName = capitalize("Kai")
//已缓存
var secondName = capitalize("Kai")

建议采用Chrome控制台的开发面板进行测试,6个变量命名处打断点,采用setp into(F11)的形式,去查看每个变量命名时的完整调用过程,对比未缓存和已缓存处的call stack,就会立刻理解函数缓存的原理。

期待和大家交流,共同进步,欢迎大家加入我创建的与前端开发密切相关的技术讨论小组:

努力成为优秀前端工程师!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容