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 相关文章推荐
document对象execCommand的command参数介绍
Aug 01 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 Javascript
Javascript处理DOM元素事件实现代码
May 23 Javascript
JQuery切换显示的效果实例代码
Feb 27 Javascript
jQuery中offset()方法用法实例
Jan 16 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
vue项目打包之后背景样式丢失的解决方案
Jan 17 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 文件扩展名 获取函数
2009/06/03 PHP
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
php如何获取文件的扩展名
2015/10/28 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
js关闭当前页面(窗口)的几种方式总结
2013/03/05 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Python实现序列化及csv文件读取
2020/01/19 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
django 取消csrf限制的实例
2020/03/13 Python
python算的上脚本语言吗
2020/06/22 Python
python爬虫要用到的库总结
2020/07/28 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
聘任书模板
2014/03/29 职场文书
数控机床专业自荐信
2014/05/19 职场文书
企业年度评优方案
2014/06/02 职场文书
中国世界遗产导游词
2015/02/13 职场文书
学校工会工作总结2015
2015/05/19 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL