javascript性能優(yōu)化之分時(shí)函數(shù)的介紹
分時(shí)函數(shù)和函數(shù)節(jié)流的問(wèn)題不一樣,函數(shù)節(jié)流針對(duì)的事件不是用戶主動(dòng)調(diào)用的,前面已經(jīng)提過(guò)了。
函數(shù)節(jié)流的原理是:延遲當(dāng)前函數(shù)的執(zhí)行,如果該次延遲還沒(méi)有完成,那么忽略接下來(lái)該函數(shù)的請(qǐng)求。也就是說(shuō)會(huì)忽略掉很多函數(shù)請(qǐng)求。
在一些開(kāi)發(fā)場(chǎng)景中,我們可能會(huì)一次性向文檔中注入上千個(gè)節(jié)點(diǎn),在短時(shí)間內(nèi)向?yàn)g覽器中大量添加DOM節(jié)點(diǎn)可能會(huì)讓瀏覽器吃不消,結(jié)果往往會(huì)讓瀏覽器卡頓或吃不消,解決方案之一便是使用分時(shí)函數(shù)(timeChunk)。
timeChunk分時(shí)函數(shù)讓創(chuàng)建節(jié)點(diǎn)的工作分批進(jìn)行,比如一秒鐘創(chuàng)建1000個(gè)節(jié)點(diǎn),改為每個(gè)200ms創(chuàng)建10個(gè)節(jié)點(diǎn)。具體timeChunk函數(shù)封裝如下:
function timeChunk( arr, fn, count){//arr 數(shù)組 fn操作函數(shù) count每次操作數(shù)量
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)
}
}
應(yīng)用:
加入我們要在文檔中添加1000個(gè)節(jié)點(diǎn),可以利用timeChunk分時(shí)函數(shù)每200ms連續(xù)添加20個(gè)節(jié)點(diǎn)。
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);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于JavaScript實(shí)現(xiàn)的快速排序算法分析
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)的快速排序算法,分析了快速排序的原理并結(jié)合實(shí)例形式給出了javascript快速排序的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-04-04
javascript實(shí)現(xiàn)字符串反轉(zhuǎn)的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)字符串反轉(zhuǎn)的方法,實(shí)例分析了javascript實(shí)現(xiàn)字符串反轉(zhuǎn)的技巧,需要的朋友可以參考下2015-02-02
JavaScript本地存儲(chǔ)實(shí)現(xiàn)用戶名存儲(chǔ)案例
本文主要介紹了JavaScript本地存儲(chǔ)實(shí)現(xiàn)用戶名存儲(chǔ)案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
談?wù)別ncodeURI和encodeURIComponent以及escape的區(qū)別與應(yīng)用
encodeURI和encodeURIComponent以及escape,這三個(gè)都是用來(lái)編碼的,本篇文章給大家介紹encodeURI和encodeURIComponent以及escape的區(qū)別與應(yīng)用,感興趣的朋友一起學(xué)習(xí)吧2015-11-11
layui實(shí)現(xiàn)把數(shù)據(jù)表格時(shí)間戳轉(zhuǎn)換為時(shí)間格式的例子
今天小編就為大家分享一篇layui實(shí)現(xiàn)把數(shù)據(jù)表格時(shí)間戳轉(zhuǎn)換為時(shí)間格式的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
js怎么覆蓋原有方法實(shí)現(xiàn)重寫(xiě)
這篇文章主要介紹了js怎么覆蓋原有方法實(shí)現(xiàn)重寫(xiě),需要的朋友可以參考下2014-09-09

