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 ui插件的使用方法代码实例
May 08 Javascript
在表单提交前进行验证的几种方式整理
Jul 31 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
Jun 16 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
浅谈JavaScript 的执行顺序
Aug 07 Javascript
jQuery网页右侧广告跟随滚动代码分享
Apr 20 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
Feb 14 Javascript
在vue中添加Echarts图表的基本使用教程
Nov 22 Javascript
Vue中使用canvas方法总结
Feb 12 Javascript
微信小程序实现手势滑动效果
Aug 26 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
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
python验证码识别实例代码
2018/02/03 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
win10安装python3.6的常见问题
2020/07/01 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
艺术爱好者的自我评价分享
2013/10/08 职场文书
法律工作求职自荐信
2013/10/31 职场文书
加拿大留学自荐信
2014/01/28 职场文书
母婴店促销方案
2014/03/05 职场文书
刊首寄语大全
2014/04/11 职场文书
考研英语复习计划
2015/01/19 职场文书
2015年端午节活动总结
2015/02/11 职场文书
社区结对共建协议书
2016/03/23 职场文书
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题