身為前端工程師,對於javascript大家都不陌生,這篇文章從更深層的方向-JS引擎去理解javascript到底是怎麼運作的,從而進行最佳化。
JS Engine—— JS 引擎介紹
一、基本介紹
##js引擎是專門運行javascript的解釋器(interpreter)。目前比較主流的js 引擎和介紹,大家可以簡單了解一下:- V8 — 由Google使用C 開源的V8引擎,也是我們常聽到的一個引擎
- Rhino — 由Mozilla Foundation完全用Java管理的一個開源引擎
- SpiderMonkey — 第一代js引擎,曾經運行在Netscape Navigator 瀏覽器中,現在是Firefox
- JavaScriptCore — Safari的開源js引擎
- KJS — KDE 引擎,由Harri Porten開發
- Chakra (JScript9) — Internet Explorer 引擎
- #Chakra (JavaScript) — Microsoft Edge 引擎
- #JerryScript —輕量級的js引擎,主要用於IOT
JS Code—— Talk is cheap
#看到這,你一定會想,我知道這有啥用,Talk is cheap,有沒有程式碼可以分析的。那麼大家請看以下範例程式碼,透過分析程式碼後,我再詳細介紹其中的原理範例程式碼一:// first case var a = {} var b = {} console.time() for (let k = 0; k < 9999999; k++) { a[k] = 0 } for (let i = 0; i < 9999999; i++) { b[i] = 0 } console.timeEnd() // second case var a = {} var b = {} console.time() for (let k = 0; k < 9999999; k++) { a[k] = 0 } for (let i = 10000000; i < 19999999; i++) { b[i] = 0 } console.timeEnd() // third case var a = {} var b = {} console.time() for (let k = 0; k < 9999999; k++) { a[k] = 0 } for (let i = 9999999; i < 0; i--) { b[i] = 0 } console.timeEnd()看完以上程式碼,內容很簡單,就是定義object a和b 然後不斷添加屬性,唯一區別的是,first case是a和b重複添加相同的屬性,second case是a和b添加不同的屬性,third case是a和b重複添加相同的屬性,但處理b的時候是相反順序的。 那麼問題來了:三塊程式碼,運行速度有沒有快慢之分,分別又大不大呢? (不用去確認循環次數,都是一樣滴!)答案來了:用時時間大概是3 (500ms)
V8 Engine —— Hidden Class
我們知道,js是動態腳本語言,什麼意思呢,就是你可以很簡單的給object添加/刪除屬性,或改變其類型,大部分的js解釋器(interpreter)使用字典結構,在記憶體中儲存變數屬性值的位址,這種方式比起java和C#(非動態語言,當然了C#的dynamic類型另當別論,不在此贅述)要低效率的多,因為js的類型是可以隨時轉換的,本來使用字典結構結合固定的類型進行判斷,可以較容易的找到變數屬性值的位置,而在js中就難以實現了。 所以V8引擎就用了一個高效率的方法叫做Hidden Class。其他的引擎也有類似的方法,有叫Map的, Structures的,Hidden Class的等等,在這裡我們用Shape來定義它,這樣方便大家理解。 當我們定義一個object的時候,它會包含以下內容:那麼,當我們為object新增屬性的時候呢? V8引擎會根據類別過渡(class transition)原理創建新的shape來標記位置,如下圖
也就是說,我們創建了3個shape,透過過渡鏈(transition chain)來實作一個object的追溯。
看到這裡,大家肯定在想,每多一個shape肯定就會多佔用一塊內存,那麼我為了優化的話,盡量在初始化的時候把屬性都定義好就能優化了,Bingo~我們可以參考下圖來驗證:
#透過以上的原理解釋,相信大家肯定能夠推算解釋出,我們的範例程式碼的執行速度的區別了。
First Case:
1. Shape (empty) for a和b
2. Shape 1....9999999 for a
3. Shape 1 ....9999999 for b
a和b都共用了相同的shape,可以重複使用
Second Case:
1. Shape (empty) for a和b
2. Shape 1....9999999 for a
3. Shape 10000000....19999999 for b
#一共定義了1 到199999999的shape,那麼second case肯定##時間要比first case要花多一倍的時間了
Thrid Case:
#1. Shape (empty) for a和b
2. Shape 1... .9999999 for a
3. Shape 9999999 ....1 for b
源碼:https://github.com/likeconan/Alipay_Wechat_Integration
更多JavaScript知識請關注PHP中文網js特效大全欄位。
以上是理解並優化javascript程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中