美文网首页
函数性能优化——函数记忆

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

作者: jia林 | 来源:发表于2019-01-03 13:37 被阅读0次

使用场景

  • 当一些计算结果可以保留下来为以后的运算提供方便的时候, 就可以用到记忆话函数
  • 记忆化函数将计算结果存储起来,如果之后碰到相同的参数,就直接放回已经计算过的参数

代码

  • 记忆函数
  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");
  • 节省了2ms


    image.png

相关文章

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

    使用场景 当一些计算结果可以保留下来为以后的运算提供方便的时候, 就可以用到记忆话函数 记忆化函数将计算结果存储起...

  • PHP性能优化02

    PHP语言级性能优化 优化点:尽可能减少使用魔法函数 情况描述:PHP提供的魔法函数,性能不佳 为什么性能低? 为...

  • React生命周期函数

    生命周期函数 生命周期函数性能优化 生命周期函数发送Ajax请求

  • 函数节流(throttle)与函数去抖(debounce)

    JavaScript-性能优化,函数节流(throttle)与函数去抖(debounce)JS魔法堂:函数节流(t...

  • PHP性能优化

    1 PHP语言级性能优化:少些代码,多用PHP自身能力;(多用PHP内置变量,常量,函数) PHP内置函数的性能不...

  • 第十九章 公私有变量及特权方法

    一,函数回调 回调函数 (优化性能 ) callback is function什么时候去使用回调函数呢? DO...

  • 前端性能优化之:函数防抖与函数节流

    前言 函数防抖和函数节流是在前端性能优化中老生常谈的话题,也是各位前端的童鞋必须要掌握的性能优化手段。今天胡哥为大...

  • react性能优化 不要再component的props中使用箭头函数或者bind,因为每次使用箭头函数和bind...

  • 性能优化惰性函数

    例子 可以看出方式是, 在功能内部重写一次函数. 函数内部不用var 可以重写 父级和全局变量,其次,也可以用这...

  • Callback Hook

    Callback Hook 函数名:useCallback 用于得到一个固定引用值的函数,通常用它进行性能优化 u...

网友评论

      本文标题:函数性能优化——函数记忆

      本文链接:https://www.haomeiwen.com/subject/vbefrqtx.html