|
|
|
|
|
JavaScript中的循環(huán)語(yǔ)句有for
、for...of
和forEach
等,在使用時(shí)你可能需要考慮它們的瀏覽器兼容性問(wèn)題,再就是考慮它們的速度問(wèn)題。并不是所有瀏覽器都支持這些循環(huán)語(yǔ)句,JS中不兼容IE瀏覽器的循環(huán)語(yǔ)句有哪些?for..of等,不過(guò)今天,我要討論的是,這幾個(gè)循環(huán)語(yǔ)句,它們的速度是怎樣的?哪個(gè)速度最快?
循環(huán)遍歷數(shù)組
要遍歷數(shù)組,讓我們創(chuàng)建一個(gè)包含 50000 個(gè)元素的數(shù)組來(lái)計(jì)算執(zhí)行時(shí)間。我們可以通過(guò)兩種方法創(chuàng)建一個(gè)包含 50000 個(gè)元素的數(shù)組。
JavaScript 中最基本的迭代方法是 for
循環(huán)。它需要三個(gè)表達(dá)式;變量聲明,每次迭代前要計(jì)算的表達(dá)式,以及每次迭代結(jié)束時(shí)要計(jì)算的表達(dá)式。
迭代JavaScript for
循環(huán)元素固定次數(shù)。如果迭代次數(shù)已知,則應(yīng)使用它。下面給出了循環(huán)的語(yǔ)法。
我們使用JavaScript中的console.time()
和console.timeEnd()
語(yǔ)句來(lái)計(jì)算執(zhí)行時(shí)間。我們看看如何使用這些語(yǔ)句。
for...of
語(yǔ)句創(chuàng)建了一個(gè)循環(huán)迭代可迭代對(duì)象,包括內(nèi)置的String
、Array類(lèi)似數(shù)組的對(duì)象(例如,arguments或NodeList)TypedArray
,Map
以及Set
。
for...of
對(duì)于小型數(shù)據(jù)集,循環(huán)是最快的,但對(duì)于大型數(shù)據(jù)集,它們的擴(kuò)展性很差,它是最慢的。
我們以同樣的方式檢查for...of
循環(huán)的執(zhí)行時(shí)間。
Javascript 中的forEach
方法迭代數(shù)組的元素并按順序?yàn)槊總€(gè)元素調(diào)用提供的函數(shù)。
forEach
的執(zhí)行時(shí)間受到每次迭代內(nèi)部發(fā)生的事情的顯著影響。它速度快,專(zhuān)為功能代碼而設(shè)計(jì)。
我們用 forEach
遍歷數(shù)組并檢查執(zhí)行時(shí)間。
現(xiàn)在我們檢查所有三種循環(huán)方法的執(zhí)行時(shí)間。
javascript 的執(zhí)行實(shí)際上取決于各種因素,例如 Windows 等操作系統(tǒng)的類(lèi)型以及 Chrome、IE、Firefox 等瀏覽器的類(lèi)型。
執(zhí)行結(jié)果如下圖所示:
傳統(tǒng)的 for
循環(huán)是最快的,所以你應(yīng)該總是使用它。
性能并不是唯一重要的事情,你很少需要在前端 JS 應(yīng)用程序中循環(huán)超過(guò) 100 萬(wàn)個(gè)項(xiàng)目。代碼可讀性通常更重要,因此你可以選用可讀性更強(qiáng)的代碼。
如果你更喜歡編寫(xiě)函數(shù)式代碼,那么forEach
是理想的,而for-of
則很好,更少的代碼行意味著更短的開(kāi)發(fā)時(shí)間和更少的維護(hù)開(kāi)銷(xiāo)。
本文通過(guò)實(shí)例代碼演示,給出了JavaScript多種循環(huán)語(yǔ)句的速度比較。在實(shí)際使用中,你應(yīng)該明白自己需要的是什么,需要速度更快的?需要維護(hù)性更強(qiáng)的?需要可讀性更好的?弄清楚各循環(huán)語(yǔ)句的特征后,使用起來(lái)便更加得心應(yīng)手了。
相關(guān)文章