在代碼的世界中,通常有兩種方式來翻譯機器語言:解釋器和編譯器。
如果是通過解釋器,翻譯是一行行地邊解釋邊執行
編譯器是把源代碼整個編譯成目標代碼,執行時不再需要編譯器,直接在支持目標代碼的平臺上運行。
解釋器的利弊
解釋器啓動和執行的更快。你不需要等待整個編譯過程完成就可以運行你的代碼。從第一行開始翻譯,就可以依次繼續執行了。
正是因爲這個原因,解釋器看起來更加適合 JavaScript。對於一個 Web 開發人員來講,能夠快速執行代碼並看到結果是非常重要的。
這就是爲什麼最開始的瀏覽器都是用 JavaScript 解釋器的原因。
可是當你運行同樣的代碼一次以上的時候,解釋器的弊處就顯現出來了。比如你執行一個循環,那解釋器就不得不一次又一次的進行翻譯,這是一種效率低下的表現。
編譯器的利弊
編譯器的問題則恰好相反。
它需要花一些時間對整個源代碼進行編譯,然後生成目標文件才能在機器上執行。對於有循環的代碼執行的很快,因爲它不需要重複的去翻譯每一次循環。
另外一個不同是,編譯器可以用更多的時間對代碼進行優化,以使的代碼執行的更快。而解釋器是在 runtime 即運行時進行這一步驟的,這就決定了它不可能在翻譯的時候用很多時間進行優化。