Nodejs學習記錄: Chrome V8 基礎

Nodejs的Javascript運行時引擎是Chrome V8。node

Nodejs 與 v8 引擎

V8引擎

  • V8引擎是一個JavaScript引擎實現,最初由一些語言方面專家設計,後被谷歌收購,隨後谷歌對其進行了開源
  • V8使用C++開發,在運行JavaScript以前,相比其它的JavaScript的引擎轉換成字節碼或解釋執行,V8將其編譯成原生機器碼(IA-32, x86-64, ARM, or MIPS CPUs),而且使用瞭如內聯緩存(inline caching)等方法來提升性能
  • 有了這些功能,JavaScript程序在V8引擎下的運行速度媲美二進制程序。
  • V8支持衆多操做系統,如windowslinuxandroid等,也支持其餘硬件架構,如IA32,X64,ARM等,具備很好的可移植跨平臺特性

VAQFII.png

歷史

JavaScript引擎 V8 的前世此生linux

v8引擎出現的緣由

這裏先說一下什麼是編譯型語言和解釋性語言:android

編譯型語言: 在程序執行以前必須進行專門的編譯過程,有以下特色:windows

  • 只須編譯一次就能夠把源代碼編譯成機器語言,後面的執行無須從新編譯,直接使用以前的編譯結果就能夠;所以其執行的效率比較高
  • 編譯性語言表明:C、C++、Java、Pascal/Object Pascal(Delphi);
  • 程序執行效率比較高,但比較依賴編譯器,所以跨平臺性差一些;
  • 不一樣平臺對編譯器影響較大。緩存

    • 16位系統下int是2個字節(16位),而32位系統下int佔4個字節(32位);
    • 32位系統下long類型佔4字節,而64位系統下long類型佔8個字節;

解釋性語言- 解釋行語言,支持動態類型,弱類型,在程序運行的時候才進行編譯,而編譯前須要肯定變量的類型,效率比較低,對不一樣系統平臺有較大的兼容性.架構

  • 源代碼不能直接翻譯成機器語言,而是先翻譯成中間代碼,再由解釋器對中間代碼進行解釋運行性能

    • 源代碼—>中間代碼—>機器語言
  • 程序不須要編譯,程序在運行時才翻譯成機器語言,每執行一次都要翻譯一次
  • 解釋性語言表明:PythonJavaScript、Shell、Ruby、MATLAB等;
  • 運行效率通常相對比較依賴解釋器,跨平臺性好;

比較優化

  • 通常,編譯性語言的運行效率比解釋性語言更高;可是不能一律而論,部分解釋性語言的解釋器經過在運行時動態優化代碼,甚至能使解釋性語言的性能超過編譯性語言;
  • 編譯性語言的跨平臺特性比解釋性語言差一些;

進過以上說明,解釋性語言,運行效率低,隨着Web相關技術的發展,JavaScript所要承擔的工做也愈來愈多,早就超越了「表單驗證」的範疇,這就更須要快速的解析和執行JavaScript腳本。V8引擎就是爲解決這一問題而生,在node中也是採用該引擎來解析JavaScript。spa

基本概念

內存機制

Nodejs 實際上就是一個使用C++完成的程序,其能執行JavaScript代碼,它的底層主要由兩部分第三方庫組成 —— Chrome V8 和 libuv操作系統

參考

Documentation V8

相關文章
相關標籤/搜索