JavaScript 迭代優(yōu)化(Duff's Device)

眾所周知,過多的循環(huán)會(huì)帶來一定的性能開銷,增加總體運(yùn)行時(shí)間。而減少迭代次數(shù)能夠優(yōu)化性能。"Duff's Device" 作為廣為人知的一種限制循環(huán)迭代次數(shù)的模式,還是有必要了解的。

Duff's Device 原本是 C 語言中的實(shí)現(xiàn)方式,不過由 Jeff Greenberg 移植到 JavaScript 中,下面是一個(gè)典型的實(shí)現(xiàn):

var iterations = Math.floor(items.length / 8),
      startAt = items.length % 8,
      i = 0;

do {
  switch (startAt) {
    case 0: process(items[i++]);
    case 7: process(items[i++]);
    case 6: process(items[i++]);
    case 5: process(items[i++]);
    case 4: process(items[i++]);
    case 3: process(items[i++]);
    case 2: process(items[i++]);
    case 1: process(items[i++]);
  }
  startAt = 0;
} while (--iterations);

代碼的思路是非常的清晰的,那就是每次循環(huán)都執(zhí)行八次函數(shù),這樣很明顯會(huì)減少迭代的次數(shù)。不過,只有在迭代次數(shù)比較多時(shí),才能夠有明顯的效率提升。

此算法稍快的版本取消了 switch 語句,而且余數(shù)處理和主循環(huán)分開:

var i = items.length % 8;
while(i) {
  process(items[i--]);
}

i = Math.floor(items.length / 8);

while(i) {
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
  process(items[i--]);
}

其實(shí)整個(gè)實(shí)現(xiàn)的過程并不復(fù)雜,不過為什么 Duff's Device 每次迭代都是執(zhí)行 8 次函數(shù)?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近在閱讀這本Nicholas C.Zakas(javascript高級(jí)程序設(shè)計(jì)作者)寫的最佳實(shí)踐、性能優(yōu)化類的書...
    undefinedR閱讀 2,240評(píng)論 0 30
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,062評(píng)論 25 709
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,679評(píng)論 1 51
  • AJax 優(yōu)化 緩存 Ajax 請(qǐng)求盡量使用GET, 僅取決于cookie數(shù)量 Cookie 優(yōu)化 減少Cooki...
    KeKeMars閱讀 9,472評(píng)論 5 89
  • 如果你將要離去 怎不留下只言片語 或許那曾經(jīng)的笑容 才是你最想留給世人的印象 如果你將要離去 怎會(huì)一切毫無征兆 一...
    晨曦易夕閱讀 192評(píng)論 0 0

友情鏈接更多精彩內(nèi)容