2012-11-23 15 views
5

मैं जावास्क्रिप्ट में अपने काम के लिए सरल टेम्पलेटिंग पर काम कर रहा हूं .. इसे बहुत आसान होना चाहिए, इसलिए मैं हैंडलबार, मूंछ या किसी भी अन्य मजबूत टेम्पलेटिंग इंजन का उपयोग नहीं कर रहा हूं।जावास्क्रिप्ट टेम्पलेट प्रीकंपलिंग क्या है?

मैं शब्द 'precompile' या 'संकलन' खाका पढ़ने प्रदर्शन को बढ़ावा देने के रहते हैं। लेकिन मुझे यकीन नहीं है कि इसका मतलब क्या है। मेरे काम में मैं टेम्पलेट एचटीएमएल को हर बार टकराने से बचने के लिए अपने ऑब्जेक्ट में टेम्पलेट एचटीएमएल कैश करता हूं।

यह एक बहुत ही सरल समारोह जो मुख्य रूप से निम्नलिखित

_template = _template.replace(/\{(.+?)\}/g, function(token, match, number, txt) { 
        return item[match]; 
       }); 

आइटम वस्तु जो मूल्य को बदला जाएगा रखती है करता है।

क्या कोई मुझे बता सकता है कि इसका मतलब क्या है जब वे (हैंडलबार्स इत्यादि) टेम्पलेट संकलित करते हैं। ?

+0

मुझे यह पोस्ट http: // ejohn मिला।संगठन/ब्लॉग/जावास्क्रिप्ट-माइक्रो-टेम्पलेटिंग/@nrabinowitz से जवाब पढ़ने के बाद .. – Kamal

उत्तर

7

आमतौर पर टेम्पलेट्स regex का उपयोग कर पार्स कर रहे हैं और उसके बाद eval का उपयोग कर function में बदला। इसे प्रीकंपाइल टेम्पलेट कहा जाता है।

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

-1

अद्यतन: मैं यहां गलत हूं, नीचे टिप्पणी देखें।

खैर चलो कहते हैं कि मेरे टेम्पलेट रिक्त स्थान को भरने के साथ एक वाक्य है करते हैं:

एक दिन, _ ___ का फैसला किया वह _ ____ को _ ____ लाने के लिए उसके साथ जा रहा था।

टेम्पलेट संकलित रिक्त स्थान भरना होगा।

दिन में, जॉन ने फैसला किया कि वह बल्लेबाज प्रीमियर के साथ उनके साथ सैली लाने जा रहा था।

आशा रूपक इस मामले में उपयोगी है:)

+4

नहीं, ये पुस्तकालयों का मतलब यह नहीं है। आप जो वर्णन करते हैं वह टेम्पलेट को प्रस्तुत कर रहा है, इसे संकलित नहीं कर रहा है। – nrabinowitz

+0

शब्द! आप सही हे। – Costa

11

अंडरस्कोर, हैंडलबार, और अधिकांश अन्य जेएस टेम्पलेट टेम्पलेट स्ट्रिंग से एक फ़ंक्शन बनाते हैं। फिर आप विभिन्न तर्कों के साथ फ़ंक्शन को कई बार कॉल कर सकते हैं और HTML की उपयुक्त स्ट्रिंग प्राप्त कर सकते हैं। (मैं दोनों अंडरस्कोर और Handlebars जे एस कोड में टेम्पलेट स्ट्रिंग को पार्स और फिर संकलित टेम्पलेट समारोह बनाने के लिए Function निर्माता को फोन करके यह कर विश्वास करते हैं।)

जब इन पुस्तकालयों "precompiling" के बारे में बात करते हैं, वे के प्रारंभिक कदम मतलब टेम्पलेट स्ट्रिंग को पुन: प्रयोज्य फ़ंक्शन में बदलना। यह कुछ हद तक भारी कदम हो सकता है, लेकिन यह टेम्पलेट को बहुत तेजी से प्रस्तुत करता है (ज्यादातर मामलों में सरल रेगेक्स प्रतिस्थापन से तेज़) ताकि टेम्पलेट कोड से फ़ंक्शन बनाने के लिए और अधिक कुशल हो और फिर इसे पुन: संकलित करने और प्रतिपादन के बजाय कई बार उपयोग करें। हर बार टेम्पलेट कहा जाता है।

संबंधित मुद्दे