2012-07-05 18 views
13

पृष्ठभूमिक्या कदम NodeJS

जेड वाक्य रचना भयानक है का उपयोग करते हुए एक्सप्रेस में जेड टेम्पलेट प्रतिपादन के प्रदर्शन में सुधार करने के लिए लिया जा सकता है, लेकिन मैं यह देखने के लिए कि यह कैसे प्रदर्शन को प्रभावित किया गया था चाहता था।

इसलिए मैंने एक सिंगल पेज ऐप बनाया और मैप स्ट्रिंग में एक पेज बनाम पेज प्रस्तुत करने के लिए जेड का उपयोग करके अपने थ्रूपुट की तुलना करने के लिए अपाचे बैंच का उपयोग किया। कोई चर नहीं था इसलिए यह पूरी तरह अकादमिक तुलना थी।

मेमोरी स्ट्रिंग में पूरे ऐप को स्थानीय रूप से तेज़ी से दोगुना से अधिक बनाया गया है, जो कि लगता है कि उत्पादन मोड में जेड को स्मृति कैश में से एक से प्रस्तुत किया जाना चाहिए।

मैं नोड 0.8 और उत्पादन मोड में संस्करण 2.5.11 का उपयोग कर रहा हूं, दृश्य कैश विकल्प स्पष्ट रूप से true पर सेट है।

अपाचे बेंच परिणाम: https://dl.dropbox.com/u/3737990/jade/jade.png https://dl.dropbox.com/u/3737990/jade/memory.png

उत्तर

5

एक इन-स्मृति स्ट्रिंग इसलिए तुलना करने के खिलाफ यह बहुत सार्थक नहीं है, निरपेक्ष सबसे तेजी से बात आप कर सकते है। एक टेम्पलेट स्ट्रिंग कॉन्सट जितना तेज़ नहीं होगा। उत्पादन मोड में सेट करना सबसे महत्वपूर्ण बात है जिसे आप प्रदर्शन के अनुसार कर सकते हैं।

+4

मैं सोच रहा था कि यह जितनी जल्दी हो सके उतना जल्दी नहीं जा रहा था, और फिर मुझे एहसास हुआ कि मैंने अपने NODE_ENV को .bash_profile में संग्रहीत नहीं किया था। यह प्रदर्शन में वृद्धि पागल है जो जेड टेम्पलेट्स और कई अन्य अभिव्यक्तियों पर 'निर्यात NODE_ENV = उत्पादन'' सेट करने से कमाई है। –

9

हैरी द्वारा वर्णित अनुसार, एक स्ट्रिंग भेजने के प्रदर्शन के लिए टेम्पलेट इंजन के प्रदर्शन की तुलना करना अर्थहीन है, क्योंकि उन दो अलग-अलग आवश्यकताओं को संबोधित करते हैं। यह कुछ कारों के एमपीजी की तुलना करने की तरह कुछ हद तक है, एक कार को छोड़कर जिसे आप तटस्थ में डाल देते हैं और इसे पहाड़ी पर घुमाते हैं।

इसके बजाय, यह compare templating engines के लिए और अधिक सहायक है, क्योंकि वे एक ही सिरों (गतिशील रूप से प्रस्तुत एचटीएमएल) के सभी साधन हैं।

यहाँ हम देखते हैं कि जेड है सबसे धीमी templating भाषा। संभवतः ऐसे कई कारक हैं जो इस मामले में खेलते हैं, लेकिन मुख्य मुद्दा यह है कि जेड wasn't designed for speed। यदि आपको अत्यधिक उच्च प्रदर्शन की आवश्यकता है, तो doT को गति के लिए डिज़ाइन किया गया था।

+6

उस डेमो में जेड को 'उत्पादन मोड' पर सेट नहीं किया गया है। तुलना बेकार है। – Harry

+0

मुझे पूरी तरह से यकीन नहीं है क्योंकि मेरे पास अभी मेरे पास बेंचमार्क नहीं हैं, लेकिन जेड या तो उस सूची में दूसरा या तीसरा सबसे तेज है।बेशक कुछ भी नहीं करता है क्योंकि यह अनिवार्य रूप से केवल एक स्ट्रिंग concat है। – Harry

+0

उत्पादन मोड केवल जेड पर एक्सप्रेस में लागू नहीं होता है? डेमो कच्चे जेड कार्यान्वयन का उपयोग कर रहा है – alzclarke

4

(के बाद से इस जब "जेड प्रदर्शन व्यक्त" की तलाश में पहले खोज इंजन हिट में से एक हो रहा है जानकारी के इस अतिरिक्त बिट जोड़ना)

मैं एक NodeJS उत्पादन आवेदन के साथ एक ही मुद्दा था। समस्या यह है कि जेड डिफ़ॉल्ट रूप से विकास मोड पर चलाता है जो आप उत्पादन के लिए नहीं चाहते हैं, क्योंकि यह सीपीयू और मेमोरी को बर्बाद कर, सभी टेम्पलेट्स को बार-बार फिर से संकलित करेगा।

समाधान आपके ऐप को चलाने के लिए है: NODE_ENV=production node app.js, यह जेड रीकंपलिंग चक्र को रोक देगा, और शायद कुछ अन्य एक्सप्रेस परफ सुधारों को ट्रिगर करेगा।

ध्यान दें कि यह जेड तेजी नहीं है, यह सिर्फ यह अनावश्यक काम कर रही है और अपने CPU की हत्या से रोकता है।

+0

यह वास्तव में एक महत्वपूर्ण अंतर बनाता है। यह प्रोडक्शन मोड में तेजी से चलता है। – Marc

+0

"उत्पादन" मोड सेट करने का कोई तरीका है लेकिन मेरे स्टेजिंग वातावरण में NODE_ENV = परीक्षण है। क्या उत्पादन सेटिंग में ओवरराइड करने का अभी भी कोई तरीका है? –