javascript性能优化之分时函数的介绍


Posted in Javascript onMarch 28, 2018

分时函数和函数节流的问题不一样,函数节流针对的事件不是用户主动调用的,前面已经提过了。

函数节流的原理是:延迟当前函数的执行,如果该次延迟还没有完成,那么忽略接下来该函数的请求。也就是说会忽略掉很多函数请求。

在一些开发场景中,我们可能会一次性向文档中注入上千个节点,在短时间内向浏览器中大量添加DOM节点可能会让浏览器吃不消,结果往往会让浏览器卡顿或吃不消,解决方案之一便是使用分时函数(timeChunk)。

timeChunk分时函数让创建节点的工作分批进行,比如一秒钟创建1000个节点,改为每个200ms创建10个节点。具体timeChunk函数封装如下:

function timeChunk( arr, fn, count){//arr 数组 fn操作函数 count每次操作数量
  var obj,
    t;
  var start = function(){
    var len = Math.min(count||1,arr.length);
    for(var i=0; i < len; i++){
      obj = arr.shift();
      fn(obj)
    }
  };
  return function(interval){
    t = setInterval(function(){
      if(arr.length==0){
        return clearInterval(t)
      };
      start();
    },interval||200)
  }
}

应用:

加入我们要在文档中添加1000个节点,可以利用timeChunk分时函数每200ms连续添加20个节点。

var arr = [];
for(var i = 1; i <= 1000; i++){
  arr.push(i)
}
var renderLists = timeChunk(arr,function(i){
  var div = document.createElement('div');
  div.innerHTML = i;
  document.body.appendChild(div);
},20);
renderLists(200);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
权威JavaScript 中的内存泄露模式
Aug 13 Javascript
页面只有一个text的时候,回车自动submit的解决方法
Aug 12 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
Mar 25 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
javascript中去除数组重复元素的实现方法【实例】
Apr 12 Javascript
微信小程序中setInterval的使用方法
Sep 29 Javascript
微信小程序实现顶部下拉菜单栏
Nov 04 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
Apr 22 Javascript
JS利用prototype给类添加方法操作详解
Jun 21 Javascript
微信小程序swiper禁止用户手动滑动代码实例
Aug 23 Javascript
js判断两个数组相等的5种方法
May 06 Javascript
Vue数据监听方法watch的使用
Mar 28 #Javascript
Vue 自定义动态组件实例详解
Mar 28 #Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 #Javascript
微信小程序之分享页面如何返回首页的示例
Mar 28 #Javascript
js中el表达式的使用和非空判断方法
Mar 28 #Javascript
JS实现左边列表移到到右边列表功能
Mar 28 #Javascript
JS中用EL表达式获取上下文参数值的方法
Mar 28 #Javascript
You might like
PHP正确配置mysql(apache环境)
2011/08/28 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
php for 循环使用的简单实例
2016/06/02 PHP
php实现数据库的增删改查
2017/02/26 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
Angular ui.bootstrap.pagination分页
2017/01/20 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
原生js实现trigger方法示例代码
2019/05/22 Javascript
JS实现灯泡开关特效
2020/03/30 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
python生成随机mac地址的方法
2015/03/16 Python
python中zip和unzip数据的方法
2015/05/27 Python
简述Python中的进程、线程、协程
2016/03/18 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
通过Python实现一个简单的html页面
2020/05/16 Python
树莓派升级python的具体步骤
2020/07/05 Python
爱心活动计划书
2014/04/26 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
具结保证书
2015/01/17 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android