Handlebars.js 4.0

Precompilation




handlebars

Precompilation

हैंडलबार्स प्री-कंपाइलर का उपयोग करते हुए, आप क्लाइंट पर समय बचाने और हैंडलबार लाइब्रेरी के आवश्यक रनटाइम आकार को कम करने के लिए अपने हैंडलबार्स टेम्पलेट्स को पहले से तैयार कर सकते हैं।

शुरू करना

सबसे पहले, आपको नोड और एनपीएम स्थापित करने की आवश्यकता होगी। OS X पर:
$ brew install node
यह मानता है कि आपके पास पहले से ही Homebrew स्थापित है। यदि नहीं, तो पहले इसे स्थापित करें
अगला, हैंडलबार्स npm पैकेज स्थापित करें।
$ npm install handlebars -g
-g फ्लैग का उपयोग विश्व स्तर पर पैकेज को स्थापित करता है, इसलिए इसे किसी भी प्रोजेक्ट में उपयोग किया जा सकता है।
अब, आप precompiler उपयोग करने के लिए तैयार हैं:
$ handlebars <input> -f <output>
संकलक Handlebars.templates में टेम्पलेट सम्मिलित करेगा। यदि आपकी इनपुट फ़ाइल person.handlebars , तो कंपाइलर इसे Handlebars.templates.person पर person.handlebars । यह टेम्प्लेट एक फ़ंक्शन होगा जिसे स्थानीय स्तर पर संकलित किए गए तरीकों से सीधे निष्पादित किया जा सकता है। अर्थात
Handlebars.templates.person(context, options);
यदि आप पहले से तैयार किए गए टेम्पलेट्स के साथ काम कर रहे हैं, तो आपको अपने तैनात एप्लिकेशन के साथ कंपाइलर को शिप करने की आवश्यकता नहीं है। इसके बजाय, आप छोटे "रनटाइम" बिल्ड का उपयोग कर सकते हैं।
<script src="/libs/handlebars.runtime.js"></script>
डाउनलोड के आकार को कम करने के अलावा, क्लाइंट-साइड संकलन को समाप्त करने से बूट समय में काफी तेजी आएगी, क्योंकि संकलन हैंडलबार का सबसे महंगा हिस्सा है।

अनुकूलन

चूँकि आप टेम्पलेट को precompiling कर रहे हैं, आप कंपाइलर के लिए कई अनुकूलन भी लागू कर सकते हैं। पहले आपको संकलक को ज्ञात सहायकों की एक सूची निर्दिष्ट करने की अनुमति देता है
handlebars <input> -f <output> -k each -k if -k unless
हैंडलबार कंपाइलर प्रदर्शन के लिए उन सहायकों तक पहुंच का अनुकूलन करेगा।
जब सभी सहायकों को संकलन समय पर जाना जाता है, तो --knownOnly विकल्प सबसे छोटा उत्पन्न कोड प्रदान करता है जो सबसे तेज़ निष्पादन भी प्रदान करता है।

प्रयोग

Usage: node ./bin/handlebars [template|directory]...

Options:
  -f, --output         Output File
  --map                Source Map File                                                    [string]  [default: undefined]
  -a, --amd            Exports amd style (require.js)
  -c, --commonjs       Exports CommonJS style, path to Handlebars module                                 [default: null]
  -h, --handlebarPath  Path to handlebar.js (only valid for amd-style)                                     [default: ""]
  -k, --known          Known helpers
  -o, --knownOnly      Known helpers only
  -m, --min            Minimize output
  -n, --namespace      Template namespace                                              [default: "Handlebars.templates"]
  -s, --simple         Output template function only.
  -N, --name           Name of passed string templates. Optional if running in a simple mode. Required when operating
                       on multiple templates.
  -i, --string         Generates a template from the passed CLI argument.
                       "-" is treated as a special value and causes stdin to be read for the template value.
  -r, --root           Template root. Base value that will be stripped from template names.
  -p, --partial        Compiling a partial template
  -d, --data           Include data when compiling
  -e, --extension      Template extension.                                                       [default: "handlebars"]
  -b, --bom            Removes the BOM (Byte Order Mark) from the beginning of the templates.
  -v, --version        Prints the current compiler version
  --help               Outputs this message
यदि precompiler के सामान्य मोड का उपयोग करते हैं, तो परिणामी टेम्पलेट्स को Handlebars.templates ऑब्जेक्ट पर संग्रहीत किया जाएगा, जो सापेक्ष टेम्पलेट नाम एक्सटेंशन का उपयोग कर रहा है। इन टेम्प्लेट्स को टेम्प्लेट की तरह ही निष्पादित किया जा सकता है।
यदि सरल मोड का उपयोग कर precompiler एक एकल जावास्क्रिप्ट विधि उत्पन्न करेगा। इस विधि को निष्पादित करने के लिए इसे Handlebars.template विधि को पास किया जाना चाहिए और परिणामी वस्तु को सामान्य रूप में उपयोग किया जा सकता है।

NodeJS के अंदर टेंप्रेचरिंग टेम्पलेट

यदि आप कमांड लाइन से "हैंडलबार्स" को शामिल किए बिना - नोडोड्स के अंदर से टेम्पलेट्स को प्राथमिकता देना चाहते हैं - जो कि हैंडलबार्स के साथ किया जा सकता है। इस फ़ंक्शन के स्ट्रिंग परिणाम को अपने ग्राहकों तक पहुंचाएं, और वे बदले में उस हैंडल को Handlebars.template के साथ कर सकते हैं।
var template = "<div>whatever {{ name }}</div>";
var Handlebars = require("handlebars");
var compiled = Handlebars.precompile(template);
क्लाइंट की तरफ आपके पास निम्नलिखित की तर्ज पर जावास्क्रिप्ट है।
var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};

Handlebars.partials["test1"] = template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) {
  var helper;

  return "<div>whatever "
  + container.escapeExpression(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"name","hash":{},"data":data}) : helper)))
  + "</div>";
},"useData":true});
अंत में, आप इन टेम्पलेट्स को अपनी जावास्क्रिप्ट में गतिशील रूप से संदर्भित कर सकते हैं।
var result = Handlebars.partials["test1"]({name : "yourname"});
//do whatever you want with the result