में तेजी लाने के लिए अपना स्वयं का स्नैपशॉट कैसे बनाएं मेरे पास एक node.js (v0.6.12) एप्लिकेशन है जो जावास्क्रिप्ट फ़ाइल, startup.js का मूल्यांकन करके शुरू होता है। स्टार्टअप.जेएस का मूल्यांकन करने में काफी समय लगता है, और यदि संभव हो तो मैं नोड के कस्टम निर्माण में 'इसे सेंकना' चाहता हूं।नोड.जेएस/वी 8: स्टार्टअप
नोड, नोड/डीपीएस/वी 8/src के साथ वितरित v8 स्रोत निर्देशिका में स्कैनस्क्रिप्ट होता है जिसे लगभग ऐसा करने के लिए उपयोग किया जा सकता है। लाइन 302 पर, हमारे पास
LIBRARY_FILES = '''
runtime.js
v8natives.js
array.js
string.js
uri.js
math.js
messages.js
apinatives.js
date.js
regexp.js
json.js
liveedit-debugger.js
mirror-debugger.js
debug-debugger.js
'''.split()
वे जावास्क्रिप्ट फ़ाइलें एक ही निर्देशिका में मौजूद हैं। बिल्ड प्रक्रिया में कुछ स्पष्ट रूप से उनका मूल्यांकन करता है, राज्य का एक स्नैपशॉट लेता है, और इसे नोड/आउट/रिलीज/ओबीजे/रिलीज/स्नैपशॉट.सीसी (मैक ओएस पर) में बाइट स्ट्रिंग के रूप में सहेजता है। यह फ़ाइल नोड में बेक्ड लगती है।
स्कैनस्क्रिप्ट को बदलकर स्टार्टअप स्नैपशॉट का कुछ अनुकूलन संभव है। उदाहरण के लिए, मैं date.js. को बदलकर बिल्टिन Date.toString की परिभाषा को बदल सकता हूं। मैं लाइब्रेरी फ़ाइलों की सूची में startup.js जोड़कर, global.test = 1
सामग्री के साथ नए वैश्विक चर भी जोड़ सकता हूं।
हालांकि, मैं startup.js
में बस कोई जावास्क्रिप्ट कोड नहीं डाल सकता। यदि यह Date.toString = 1;
होता है, एक त्रुटि परिणाम भले ही कोड नोड repl पर मान्य है:
Build failed: -> task failed (err #2):
{task: libv8.a SConstruct -> libv8.a}
make: *** [program] Error 1
और यह स्पष्ट रूप से कोड है कि पुस्तकालयों नोड वी 8 में जोड़ता है पर निर्भर करता है का उपयोग नहीं कर सकते हैं। global.underscore = require('underscore');
एक ही त्रुटि का कारण बनता है।
मुझे आदर्श रूप से एक उपकरण, कस्टम स्नैपशॉट पसंद है, जहां customSnapshot startup.js
नोड के साथ startup.js का मूल्यांकन करता है और फिर एक फ़ाइल में स्नैपशॉट डंप करता है, snapshot.cc, जिसे मैं नोड स्रोत निर्देशिका में डाल सकता हूं। मैं फिर नोड का निर्माण कर सकता हूं और स्नैपशॉट को पुनर्निर्माण न करने के लिए कह सकता हूं।
वास्तव में यह विधि मेरे लिए ठीक काम करती है और मैंने node.js v0.8.11 का उपयोग किया जो v8 v3.11.10 के साथ आता है। अंतर यह है कि मैंने नए जीईपी-आधारित निर्माण का उपयोग किया। [यहां] (https://github.com/tarruda/node/commit/2f58630e66e2de4cbadae09ac37da55721de7bd3) आप आवश्यक परिवर्तन देख सकते हैं। जैसा कि आपने कहा था, आप कोड को नहीं बुला सकते हैं जो बिल्टिन ऑब्जेक्ट्स या नोडजेज़ फ़ंक्शंस (कंसोल, आवश्यकता ...) पर निर्भर करता है। आप एनएन प्रारंभिक समारोह का उपयोग कर इसके आसपास काम कर सकते हैं: var वैश्विक = यह; global.initialize = function() { global.console.log ('हैलो नोड'); }; –