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 14 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
May 07 Javascript
JS简单操作select和dropdownlist实例
Nov 26 Javascript
javascript实现仿IE顶部的可关闭警告条
May 05 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
详解AngularJS controller调用factory
May 19 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
Jan 22 Javascript
vue中rem的配置的方法示例
Aug 30 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
Sep 21 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 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学习之流程控制实现代码
2011/06/09 PHP
PHP的简易冒泡法代码分享
2012/08/28 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
js实现表格筛选功能
2017/01/18 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
用python登录Dr.com思路以及代码分享
2014/06/25 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
详解python读取image
2019/04/03 Python
django最快程序开发流程详解
2019/07/19 Python
Django 静态文件配置过程详解
2019/07/23 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
什么是继承
2013/12/07 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
高一地理教学反思
2014/01/18 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
vue递归实现树形组件
2022/07/15 Vue.js