Javascript 性能測試 [每日前端夜話0xB1]

2021-03-02 前端先鋒

每日前端夜話,陪你聊前端。

每天晚上18:00準時推送。

正文共:916 字

預計閱讀時間:7 分鐘

作者:Deepak Gupta

翻譯:瘋狂的技術宅

來源:codeburst

我們都知道 for 循環比 each 或 javascript 函數更快,因為在javascript函數的引擎下可能會使用for循環或其他我不確定的東西。我使用一個對象數組進行了一個簡單的測試,並通過loop/for each/javascript 函數執行一些操作,並觀察執行所需的時間。

這些結果來自小例子,可能根據執行的操作和執行環境的選擇而有所不同。還與 VM 的選擇有關

1. Reduce vs for循環 vs foreach

1
2const posts = [ 
3  {id: 1, upVotes: 2},
4  {id: 2, upVotes: 18}, 
5  {id: 3, upVotes: 1}, 
6  {id: 4, upVotes: 30}, 
7  {id: 5, upVotes: 50} 
8];let sum = 0;
9console.time('reduce');
10sum = posts.reduce((s, p)=> s+=p.upVotes,0);
11console.timeEnd('reduce')sum = 0;
12console.time('for loop');
13for(let i=0; i<posts.length; i++) {
14    sum += posts[i].upVotes;
15}
16console.timeEnd('for loop');sum = 0;
17console.time('for each');
18posts.forEach(element => {
19    sum += element.upVotes;
20});console.timeEnd('for each');

注意:下面是結果列表,代碼可以在這裡【https://github.com/dg92/Performance-analysis-es6】找到。


所有結果清楚地表明 for 循環比 map/reduce/filter/find 更加高效。

Map/Reduce/Filter/Find 很慢的原因有許多,其中有

他們有一個回調,會產生開銷。

javascript 函數需要考慮很多極端情況,比如 getter、稀疏數組和檢查傳遞的參數是否是數組,這會增加開銷。

我找到了一個 庫。重新實現幾個常見的內置原生 JavaScript 函數。

但是使用的原則不僅僅取決於性能,還有更多因素需要考慮,其中一些是:

代碼可讀性和可維護性

輕鬆編碼

快速編碼

實施和優化

個人選擇

就個人而言,我喜歡 map、reduce、filter 和 find,並且我也使用過很長一段時間。他們幫助我寫出乾淨、精確、快速並符合我思路的點代碼。當我別無選擇時,會使用 for 循環。

就優化而言,map/reduce/filter/find 替換應該是最後的選擇,或者根本就不是一個選項,其具體取決於你所需的優化級別。

注意:如果你正在使用循環,請始終用慣用方式使用,因為編譯器現在能夠以正確的方式去優化慣用循環

更新:你可以在這裡【https://github.com/dg92/Performance-analysis-es6】找到大數據集和複雜計算的結果。

原文:https://codeburst.io/javascript-performance-test-for-vs-for-each-vs-map-reduce-filter-find-32c1113f19d7

下面夾雜一些私貨:也許你和高薪之間只差這一張圖

2019年京程一燈課程體系上新,這是我們第一次將全部課程列表對外開放。

願你有個好前程,願你月薪30K。我們是認真的 !

在公眾號內回復「體系」查看高清大圖

長按二維碼,加大鵬老師微信好友

拉你加入前端技術交流群

嘮一嘮怎樣才能拿高薪

小手一抖,資料全有。長按二維碼關注前端先鋒,閱讀更多技術文章和業界動態。

相關焦點

  • 7個 Javascript 面試題及回答策略 [每日前端夜話0x30]
    每日前端夜話,陪你聊前端。每天晚上18:00準時推送。
  • JavaScript 測試教程 part 1:用 Jest 進行單元測試[每日前端夜話0xE7]
    本文是 JavaScript 測試教程 系列中的第1部分1. JavaScript測試教程-part 1:用 Jest 進行單元測試2. JavaScript測試教程–part 2:引入 Enzyme 並測試 React 組件3.
  • 前端性能測試平臺及應用
    目前人們對性能的關注還主要集中在服務端,大部分人在說到「性能測試」的時候,都會把重點放到服務端的性能測試和調優,也就是通過各種方法找到服務端的性能瓶頸並嘗試對其進行調優。實際上,對於web應用來說,除了考慮服務端在足夠短的時間內返回頁面數據之外,還可以從頁面前端的角度來考慮性能測試和性能調優。本文將圍繞前端性能測試目的、測試平臺搭建及應用進行介紹。
  • 網頁性能之html css javascript
    前言html css javascript可以算是前端必須掌握的東西了,但是我們的瀏覽器是怎樣解析這些東西的呢 我們如何處理html css javascript這些東西來讓我們的網頁更加合理,在我這裡做了一些實驗,總結起來給大家看看。
  • 開發者必備的Javascript單元測試工具
    【IT168專稿】當前,在軟體開發中單元測試越來越受到開發者的重視,它能提高軟體的開發效率,而且能保障開發的質量。以往,單元測試往往多見於服務端的開發中,但隨著Web編程領域的分工逐漸明細,在前端Javascript開發領域中,也可以進行相關的單元測試,以保障前端開發的質量。
  • 不容忽視:MongoDB的JavaScript性能
    【IT168 技術】mongodb使用javascript做shell, mongodb的db.eval可以提供給數據驅動與這種javascript shell類似的js接口。
  • JavaScript和TypeScript中的symbol[每日前端夜話0xC0]
    原文:https://fettblog.eu/symbols-in-javascript-and-typescript/下面夾雜一些私貨:也許你和高薪之間只差這一張圖2019年京程一燈課程體系上新,這是我們第一次將全部課程列表對外開放。願你有個好前程,願你月薪30K。
  • 必須要會的 50 個React 面試題(下)[每日前端夜話0x41]
    每日前端夜話,陪你聊前端。每天晚上18:00準時推送。
  • 酷工作丨安徳醫智科技招前端/後端/測試等崗位、堅果智能校招/社招、Sea Group 前端/後端/測試/數據
    點擊閱讀原文進入社區聯繫意向公司,還有更多工作機會可選哦~更多合作可發送郵件諮詢:bd@segmentfault.com安徳醫智科技有限公司丨高級前端、後端、測試、iOS、Android、架構師軟體測試工程師職位描述:1.對公司產品
  • 用原生 JavaScript 實現十大 jQuery 函數[每日前端夜話0x94]
    原文:https://devkisslist.com/2019/06/29/top-10-jquery-functions-to-plain-old-javascript/下面夾雜一些私貨:也許你和高薪之間只差這一張圖2019年京程一燈課程體系上新,這是我們第一次將全部課程列表對外開放。
  • 前端:用javascript實現一個轉盤小遊戲?
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫本文主要介紹如何使用原生javascript和Css3來實現一個在各大移動應用中經常出現的轉盤遊戲,由於改實現可以有不同方式,如果熟悉canvas的話也可以用canvas實現,本文採用js和css實現主要考慮到複雜度較小性能較好
  • 使用ESLint + Prettier簡化代碼 Review 過程[每日前端夜話0x4E]
    翻譯:瘋狂的技術宅原文:https://medium.com/javascript-scene/streamline-code-reviews-with-eslint-prettier-6fb817a6b51d在最近的一個項目中,我們通過設置 ESLint 和 Prettier 來進行自動化語法檢查,並對 JavaScript 項目的代碼風格管理
  • web前端怎麼樣才能入門
    初級前端工程師:首先要知道的就是如何處理各種瀏覽器的兼容處理(比如說在IE瀏覽器中的createElement有什麼不同等等內容),現在基本上每個公司在招聘的時候都會要求熟練html5, css3, javascript,這個熟練的意思就是信手拈來。
  • 七天學會javascript第一天javascript介紹
    前幾周寫了幾篇關於入門php的文章,反響還不錯,之前簡單的提到了JavaScript,這周小編重點介紹JavaScript讓大家可以在一周時間內掌握這門前端語言的基本用法。javascript介紹javascript數據類型javascript運算符javascript對象javascript
  • Javascript去除字符串中的點或其他符號
    今天在寫一個前端頁面的時候遇到了一個ip參數問題,我想把ip值中的點替換成 - 的形式。在前端上使用javascript進行操作的。測試了兩次沒有好用,程序直接把整個字符串都進行了替換,在考慮這個是為什麼呢?
  • 2020Web前端面試題匯總-開課吧
    Web前端面試題說說前端中的事件流?HTML中與javascript交互是通過事件驅動來實現的,例如滑鼠點擊事件onclick、頁面的滾動事件onscroll等等,可以向文檔或者文檔中的元素添加事件偵聽器來預訂事件。想要知道這些事件是在什麼時候進行調用的,就需要了解一下「事件流」的概念。
  • 12 個 GitHub 上超火的 JavaScript 奇技淫巧項目,找到寫 JavaScript 的靈感!
    公眾號:前端GitHub,專注於挖掘 GitHub 上優秀的前端開源項目,並以專題的形式推薦,每專題大概 10 個好項目,每周會有一到三篇精華文章推送。已經推薦了 面試項目、css奇技淫巧項目、代碼規範項目、數據結構與算法項目、管理後臺模板、前端必備在線工具 等專題的近 100 個優秀項目了。
  • 5種用於前端開發的JavaScript替代方案
    Google的Flutter UI工具包是一個可移植的前端框架,可用於桌面、行動裝置和Web,構建本機應用程式。  TypeScript  TypeScript是微軟向更好的JavaScript進軍的第一步。與Dart不同,TypeScript不是一種全新的語言,而是JavaScript的超集。
  • 如何使用JavaScript實現前端導入和導出excel文件
    使用JavaScript實現前端導入excel文件並自動生成可編輯的Table組件在開始實現之前, 我們先來看看實現效果.由於我們採用antd的table組件來渲染數據, 所以我們需要手動將解析出來的數據轉換成table支持的數據格式.大致流程如下: 所以我們需要做的就是將Upload得到的文件數據傳給xlsx, 由xlsx生成解析對象, 最後我們利用javascript算法將xlsx的對象處理成ant-table支持的數據格式即可.
  • JavaScript能應用在哪些方向?未來前景怎麼樣?
    JavaScript,一門全棧的語言,無論是前端,還是後臺,都能輕鬆的用它完成,隨處可見它的身影,那麼,它能做些什麼呢?下面和千鋒廣州小編一起來看看吧!網頁開發css,javascript,html。後端開發v8的誕生,node的出現,讓JavaScript的開發者們一下子翻身做了主人,原來只能做前端的,現在居然可以用來開發後端。而天生異步的處理,讓他在IO方面的性能似乎看起來一點不弱。