2017-03-29 32 views
3

Node.js使用V8,它將JavaScript編譯爲優化策略。node.js是否編譯JavaScript?

那麼,通過node.js/V8在服務器端運行的JavaScript是編譯還是解釋?

+1

V8有一個JIT編譯器。看到http://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/ –

+0

看來問題的答案是......但JavaScript本質上是一種腳本語言,術語_compiled_更常用於較低級別的語言。由JavaScript引擎來最好地解釋它。請參閱:http://softwareengineering.stackexchange.com/a/138541 – TGrif

+0

我不確定你在問什麼。您已經通過說明「*編譯JavaScript *」來回答自己的問題,是嗎? – Bergi

回答

2

V8引擎將javascript編譯爲一系列機器代碼指令,每次只能執行一個函數(usually, functions are not compiled until the first call)。

V8解析代碼並提取AST(抽象語法樹), 執行範圍分析以便了解符號引用哪個上下文,並將其轉換爲機器代碼指令。

至於你提到的V8高度集中表現爲:除了充分編譯器編譯每個功能,V8包括額外的編譯器負責優化該標識爲經常使用的塊(被稱爲Crankshaft

的所以不,沒有JavaScript代碼的解釋,但翻譯和執行機器代碼。

1

解釋器:語言運行時/虛擬機的一個(核心)模塊部分,它對模塊所在虛擬機的語言表達的一組表達式採取特定的「動作」。

編譯器:語言運行庫的一個(核心)模塊部分,它將用模塊編譯器編寫的語言表達的一組表達式轉換爲表達式運行所針對的體系結構的原生指令集。

標準Node.js是針對V8構建的,V8將每個Javascript代碼片段編譯爲本機指令。您可以在命令行中使用--print_code標誌來查看哪些腳本正在編譯,並編譯爲哪些腳本。

希望這會有所幫助。

+0

解除投票答覆的人,請說明你爲什麼這樣做,是嗎? –

相關問題