我一直在研究v8源代碼,特別是'mksnapshot'工具如何在v8二進制文件中包含原生JavaScript文件(runtime.js,json.js ...)的編譯後圖像,並注意到它還包含一個(稍微)縮小版本的源代碼。例如,檢查D8可執行文件的內容時,我看到下面的代碼片斷:爲什麼v8會在生成的二進制文件中保存原生javascript的源代碼?
var $JSON=global.JSON;
function Revive(a,b,c){
var d=a[b];
if((%_IsObject(d))){
if((%_IsArray(d))){
var g=d.length;
和在「SRC/json.js」我看到的開始:
var $JSON = global.JSON;
function Revive(holder, name, reviver) {
var val = holder[name];
if (IS_OBJECT(val)) {
if (IS_ARRAY(val)) {
var length = val.length;
明確兩者片段是相當的,但第二個在編譯過程中轉化爲第一個。
我會理解,如果包含原始代碼用'toString'進行檢查,但是當我在d8中輸入'JSON.stringify'時,我所看到的只是'function stringify(){[native code]}'這是關鍵嗎?
您應該在Google IO 2012期間提出此問題:) –
以下是我對此主題的一些觀察結果。你可以如何保存這個http://nodejs.org/api/vm.html#vm_vm_createscript_code_filename的輸出並在後期運行它?當你編譯nodejs時,它似乎還沒有使用JavaScript文件,因爲我找不到它們,或者在源代碼中找不到它們。 – Prospero