函数性能优化——函数记忆

2019-01-03  本文已影响0人  jia林

使用场景

代码

  function memorize(func) {
        var cache = {};
        return function() {
          //让参数长度与参数拼接成字符串,例如1,2 -> 212,形成唯一的key值
          var key = arguments.length + Array.prototype.join.call(arguments); 
          if (cache[key]) {
            return cache[key];
          } else {
            console.log(arguments)
            cache[key] = func.apply(this, arguments);
            return cache[key];
          }
        };
      }

  function deepCopy(o) {
        let newObj = o instanceof Array ? [] : {};
        for (var prop in o) {
          if (typeof o[prop] == "object") {
            newObj[prop] = deepCopy(o[prop]);
          } else {
            newObj[prop] = o[prop];
          }
        }
        return newObj;
      }
  var list = [
        {
          id: "1",
          menu_name: "设置",
          menu_url: "setting",
          parent_id: 0
        },
        {
          id: "1-1",
          menu_name: "权限设置",
          menu_url: "setting.permission",
          parent_id: "1"
        },
        {
          id: "1-1-1",
          menu_name: "用户管理列表",
          menu_url: "setting.permission.user_list",
          parent_id: "1-1"
        },
        {
          id: "1-1-2",
          menu_name: "用户管理新增",
          menu_url: "setting.permission.user_add",
          parent_id: "1-1"
        },

        {
          id: "1-2",
          menu_name: "菜单设置",
          menu_url: "setting.menu",
          parent_id: "1"
        },
        {
          id: "1-2-1",
          menu_name: "菜单列表",
          menu_url: "setting.menu.menu_list",
          parent_id: "1-2"
        }
      ];


  var memorizeFunc = memorize(deepCopy);
      // console.log()
      console.time("pre");
      console.log(deepCopy(list));
      console.timeEnd("pre"); // 3.162841796875ms
      console.time("mem");
      console.log(memorizeFunc(list));
      console.timeEnd("mem");
上一篇 下一篇

猜你喜欢

热点阅读