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 相关文章推荐
Jquery中获取iframe的代码
Jan 11 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
jQuery使用之处理页面元素用法实例
Jan 19 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
原生js实现放大镜
Feb 20 Javascript
基于AngularJs select绑定数字类型的问题
Oct 08 Javascript
基于layui的下拉列表的数据回显方法
Sep 24 Javascript
Vue Router的手写实现方法实现
Mar 02 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
Mar 06 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
Apr 16 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
May 11 Javascript
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
May 30 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
js模拟滚动条(横向竖向)
2013/02/22 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
Vue组件tree实现树形菜单
2017/04/13 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
安装Python的教程-Windows
2017/07/22 Python
Python程序运行原理图文解析
2018/02/10 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
什么是唯一索引
2015/07/05 面试题
师德个人剖析材料
2014/02/02 职场文书
中班中秋节活动反思
2014/02/18 职场文书
财务部总监岗位职责
2014/03/12 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
小学教育见习报告
2014/10/31 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
优秀班集体事迹材料
2014/12/25 职场文书