@JavaScript 性能之缓存

103 阅读1分钟

JavaScript 性能之缓存

我们尽量在一篇文章中仅仅处理一个问题。这里我们要解决一个问题就是缓存对象。

关于缓存的思考🤔

  1. 什么样的数据需要缓存?

一般在 JavaScript 中基本数据类型,缓存很容易。缓存的一般是数组和对象,最好是一个能够使用 JSON API 处理的数据(不包括函数)。

实现具有 JSON 数据结构的缓存

我们主要思考的是 JSON 数据结构的缓存:

  1. 处理基本数据类型:Number、String、Boolean、Null、Undefined
  2. 处理引用类型数据
  • 工具函数 isPrimitive
function isPrimitive (val) {
    const toString = Object.prototype.toString
    return (
        toString.apply(val) === '[object Number]' ||
        toString.apply(val) === '[object String]' ||
        toString.apply(val) === '[object Boolean]' ||
        toString.apply(val) === '[object Null]' ||
        toString.apply(val) === '[object Undefined]'
    )
}
  • jsonSerializer
function jsonSerializer(args) {
    // 基本类型直接返回
  if (args.length === 1 && isPrimitive(args[0])) {
    return args[0];
  }
    // 引用类型
  var _obj = {};
  for (var i = 0; i < args.length; i++) {
    _obj['key' + i] = args[i];
  }
  return JSON.stringify(_obj);
}
  • memoize
export function memoize(fn) {
  var cache = {};

  return function () {
    var key = jsonSerializer(arguments);

    return cache[key] && fn.apply(null, arguments);
  };
}