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中void(0)的具体含义解释
Feb 27 Javascript
jQuery 注意事项 与原因分析
Apr 24 Javascript
js 页面传参数时 参数值含特殊字符的问题
Dec 13 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
Jquery操作cookie记住用户名
Mar 29 Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
javascript使用btoa和atob来进行Base64转码和解码
Mar 20 Javascript
vue中axios处理http发送请求的示例(Post和get)
Oct 13 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
JavaScript数组排序功能简单实现
May 14 Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 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基础知识:类与对象(5) static
2006/12/13 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
js简单抽奖代码
2015/01/16 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
javascript实现留言板功能
2020/02/08 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
django框架中间件原理与用法详解
2019/12/10 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
《胖乎乎的小手》教学反思
2014/02/26 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
清洁工个人总结
2015/03/04 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python