javascript設計模式第三章分時函式
舉一個例子是建立WebQQ 的QQ 好友列表。列表中通常會有成百上千個好友,如果一個好友用一個節點來表示,當我們在頁面中渲染這個列表的時候,可能要一次性往頁面中建立成百上千個節點。在短時間內往頁面中大量新增DOM節點顯然也會讓瀏覽器吃不消,我們看到的結果往往就是瀏覽器的卡頓甚至假死。程式碼如下:
var ary = [];
for (var i = 1; i <= 1000; i++) {
ary.push(i); // 假設ary 裝載了1000 個好友的資料
};
var renderFriendList = function (data) {
for (var i = 0, l = data.length; i < l; i++) {
var div = document.createElement('div');
div.innerHTML = i;
document.body.appendChild(div);
}
};
renderFriendList(ary);
這個問題的解決方案之一是下面的timeChunk 函式,timeChunk 函式讓建立節點的工作分批進行,比如把1 秒鐘建立1000 個節點,改為每隔200 毫秒建立8 個節點。timeChunk 函式接受3 個引數,第1 個引數是建立節點時需要用到的資料,第2 個引數是封裝了建立節點邏輯的函式,第3 個參數列示每一批建立的節點數量。程式碼如下:
var timeChunk = function (ary, fn, count) {
var obj,
t;
var len = ary.length;
var start = function () {
for (var i = 0; i < Math.min(count || 1, ary.length); i++) {
var obj = ary.shift();
fn(obj);
}
};
return function () {
t = setInterval(function () {
if (ary.length === 0) { // 如果全部節點都已經被建立好
return clearInterval(t);
}
start();
}, 200); // 分批執行的時間間隔,也可以用引數的形式傳入
};
};
最後我們進行一些小測試,假設我們有1000 個好友的資料,我們利用timeChunk 函式,每一批只往頁面中建立8 個節點:
var ary = [];
for (var i = 1; i <= 1000; i++) {
ary.push(i);
};
var renderFriendList = timeChunk(ary, function (n) {
var div = document.createElement('div');
div.innerHTML = n;
document.body.appendChild(div);
}, 8);
renderFriendList();
相關文章
- JavaScript 設計模式系列 – 自定義函式(惰性函式)JavaScript設計模式函式
- 瞭解 JavaScript 函數語言程式設計 - 宣告式函式JavaScript函數程式設計函式
- 2.設計模式的分類—精讀《JavaScript 設計模式》Addy Osmani著設計模式JavaScript
- 前端-JavaScript非同步程式設計async函式前端JavaScript非同步程式設計函式
- JavaScript設計模式初探--單例設計模式JavaScript設計模式單例
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- 極簡設計模式-函式組合和集合管道模式設計模式函式
- JavaScript非同步程式設計–Generator函式、async、awaitJavaScript非同步程式設計函式AI
- JavaScript建構函式,物件導向程式設計JavaScript函式物件程式設計
- JavaScript函數語言程式設計(純函式、柯里化以及組合函式)JavaScript函數程式設計函式
- javascript 與 設計模式JavaScript設計模式
- JavaScript常用設計模式JavaScript設計模式
- Javascript設計模式(四)策略模式JavaScript設計模式
- Javascript設計模式之代理模式JavaScript設計模式
- Javascript設計模式(五)代理模式JavaScript設計模式
- JavaScript設計模式(七):命令模式JavaScript設計模式
- JavaScript 設計模式之策略模式JavaScript設計模式
- Javascript設計模式之命令模式JavaScript設計模式
- Javascript設計模式之策略模式JavaScript設計模式
- 設計模式基礎 之 4 高階函式設計模式函式
- 函式設計函式
- JavaScript函數語言程式設計,真香之組合函式(二)JavaScript函數程式設計函式
- JavaScript函數語言程式設計之深入理解純函式JavaScript函數程式設計函式
- JavaScript函數語言程式設計之pointfree與宣告式程式設計JavaScript函數程式設計
- [思] 當需要傳遞多個不定引數時,該如何設計 JavaScript 函式?JavaScript函式
- Javascript設計模式之單例模式JavaScript設計模式單例
- Javascript設計模式(二)工廠模式JavaScript設計模式
- Javascript設計模式(三)單例模式JavaScript設計模式單例
- JavaScript 設計模式(六) 迭代器模式JavaScript設計模式
- Javascript設計模式之迭代器模式JavaScript設計模式
- javascript設計模式 之 6 命令模式JavaScript設計模式
- javascript設計模式 之 2 策略模式JavaScript設計模式
- Javascript 設計模式之單例模式JavaScript設計模式單例
- JavaScript 設計模式 —— 介面卡模式JavaScript設計模式
- Javascript 設計模式之工廠模式JavaScript設計模式
- javascript設計模式一: 單例模式JavaScript設計模式單例
- 細品 javascript 設計模式(策略模式)JavaScript設計模式
- javascript忍者祕籍-第三章 函式定義與引數JavaScript函式