精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

JavaScript 中最快的循環是什么?

liguoquan
2024年11月29日 10:26 本文熱度 923
:JavaScript 中最快的循環是什么?


無論使用哪種編程語言,循環都是一種內置功能。JavaScript 也不例外,它提供了多種實現循環的方法,偶爾會給開發人員帶來困惑:哪一種循環才是最快的?

以下是Javascript中可以實現循環的方法:

  • For Loop
  • While Loop
  • Do-While Loop
  • For-In Loop
  • For-Of Loop
  • ForEach Loop
  • Map Loop
  • Filter Loop
  • Reduce Loop
  • Some Loop
  • Every Loop
  • Find Loop

我們將對這些循環方法進行測試,以確定哪種方法最快。

為了比較每個循環的性能,我們將使用 console.time() 和 console.timeEnd() 方法來測量它們的執行時間。

javascript代碼解讀復制代碼console.time('My Description');  // Code to measure  console.timeEnd('My Description'); 

用于測試的任務是:將 5000 萬個項目從一個數組轉移到另一個數組。

javascript代碼解讀復制代碼console.time('Array Creation');   const numbersList = Array.from({ length: 50_000_000 }, () => Math.floor(Math.random() * 100));  console.timeEnd('Array Creation'); 

為確保公平比較,我們將異步運行每個循環。

雖然 For-In 的語法與 For-Of 類似,但它不是為數組設計的,因此不在測試之中。 For-In 更適合迭代具有多個屬性的對象,因為它迭代的是屬性名稱(或鍵)而不是值本身,而與數組一起使用會導致性能問題和意外行為。

scss代碼解讀復制代碼(async () => {   await usingForLoop(numbersList);   await usingWhile(numbersList);   await usingDoWhile(numbersList);   await usingForOf(numbersList);   await usingForEach(numbersList);   await usingMap(numbersList);   await usingFilter(numbersList);   await usingReduce(numbersList);   await usingSome(numbersList);   await usingEvery(numbersList);   await usingFind(numbersList); })() 

ForLoop

ini代碼解讀復制代碼const usingForLoop = async (array) => {   console.time('FOR LOOP');    const newNumbersList = [];   for (let i = 0; i < array.length; i++) {     newNumbersList.push(array[i]);   }    console.timeEnd('FOR LOOP'); } 

while

ini代碼解讀復制代碼const usingWhile = async (array) => {  console.time('WHILE');   let i = 0;  const newNumbersList = [];  while (i < array.length) {    newNumbersList.push(array[i]);    i++;  }   console.timeEnd('WHILE'); } 

doWhile

ini代碼解讀復制代碼const usingDoWhile = async (array) => {  console.time('DO WHILE');   let i = 0;  const newNumbersList = [];  do {    newNumbersList.push(array[i]);    i++;  } while (i < array.length);   console.timeEnd('DO WHILE'); } 

ForOf

javascript代碼解讀復制代碼const usingForOf = async (array) => {   console.time('FOR OF');    const newNumbersList = [];   for (const item of array) {     newNumbersList.push(item);   }    console.timeEnd('FOR OF'); } 

ForEach

javascript代碼解讀復制代碼const usingForEach = async (array) => {   console.time('FOR EACH');    const newNumbersList = [];   array.forEach((item) => newNumbersList.push(item));    console.timeEnd('FOR EACH'); } 

Map

typescript代碼解讀復制代碼const usingMap = async (array) => {  console.time('MAP');   const newNumbersList = array.map((number) => number);   console.timeEnd('MAP'); } 

Filer

javascript代碼解讀復制代碼const usingFilter = async (array) => {  console.time('FILTER');   const newNumbersList = array.filter((item) => true);   console.timeEnd('FILTER'); } 

Reduce

javascript代碼解讀復制代碼const usingReduce = async (array) => {  console.time('REDUCE');   const newNumbersList = array.reduce((acc, item) => {    acc.push(item);    return acc;  }, []);   console.timeEnd('REDUCE'); } 

Some

javascript代碼解讀復制代碼const usingSome = async (array) => {  console.time('SOME');   const newNumbersList = [];  array.some((item) => {    newNumbersList.push(item);    return false;  });   console.timeEnd('SOME') } 

Every

javascript代碼解讀復制代碼const usingEvery = async (array) => {   console.time('EVERY');    const newNumbersList = [];   array.every((item) => {     newNumbersList.push(item);     return true;   });    console.timeEnd('EVERY') } 

Find

javascript代碼解讀復制代碼const usingFind = async (array) => {   console.time('FIND');    const newNumbersList= [];   array.find((item) => {     newNumbersList.push(item);     return false;   });    console.timeEnd('FIND') } 

任務運行了五次,顯示的測量值是計算得出的平均值。

測試平均結果如下:

從結果可以看出,前5名分別是:

    1. Map
    1. For Loop
    1. While
    1. Do While
    1. For Each

有趣的是只有Map是一個函數調用,其余的都是循環體。

另外該測試僅針對一項特定任務進行的,不同測試用例可能會有不同的結果,不同的內存或者CPU也會有不一樣的表現。從本次測試的結果,我們可以看到Map 和 For Loop 的性能是最好的。令人失望的是For-Of,相對于For Loop,作為新出的一個API竟然效率這么拉跨。

Map每次循環都需要調用回調函數,理論上不應該比For Loop更快。但現代 JavaScript 引擎(如 V8)對高階函數(如 map、filter 等)進行了高度優化,尤其是對數組的處理。引擎內部可能會針對這些高階函數應用特定的優化策略,減少不必要的操作,進而提升性能。而且 map 是一個專門用于遍歷數組并返回新數組的高階函數,V8 等引擎能夠更好地預測和優化其內部的操作路徑。而 for loop 是更通用的控制結構,可能沒有這些特定的優化。

結論

從測試結果看Map和For Loop的循環效率相差不大,大家可以根據需要做選擇。map 無法中途退出,但可以返回一個新的數組。

?

該文章在 2024/11/29 10:26:58 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产av一区二区最新精品 | 亚洲精品欧美二区三区中文字幕 | 国产农村一国产农村无码毛片 | 亚洲剧情在线观看 | 国产av无码专区亚洲精品网站 | 无码电影在线观看国产 | 精品国内自产拍在线视频 | 国产人碰人摸人爱视频 | 色综合网站国产麻豆 | 人妻插b视频一区二区三区 人妻波多野结衣视频二区 人妻被强视频系列无码 | 国产成人91一区二区三区 | 国产午夜人成在线视频 | 国产成人午夜在线不卡视播放 | 国产做爱免费视频在线观看 | 国产一区日本二区欧美三区 | 国产乱子伦精品视频 | 在线观看黄色的网站 | 亚洲女同成av人片在线观看 | 18禁无遮挡羞羞污污污污网站 | 国产亚洲精品久久久999苍井空 | 日韩欧美一区二区久久黑人 | 日韩人妻少妇一区二区三区 | 欧美一区二区在线观看视频 | 国产精品亚洲专区无码不卡 | 日本少妇做爰免费视频网站 | 亚洲国产综合无码网站推荐 | 日韩高清免费视频观看 | 在线中文字幕亚洲日韩理论 | 国产91久久精品 | 国产区一区二区三电影hd高清完整版免费在线观看 | 国产成人精品亚洲日本在线 | 内射合集对白在线 | 最新91视频网站 | 精精国产xxxx视频在线 | 日本三级片在线观看 | 亚洲中文无码a∨在线观看 亚洲中文无码a | 亚洲一级aⅴ无码毛片小说 亚洲一级aⅴ片观看 | 中文字幕人妻av一区二区 | 国产亚洲精品久久久久久白晶晶 | 精品亚洲无码一二三区久久久久 | 偷拍精品视频一区二区三区 |