2013-04-26 11 views
69

प्रतिपादन आपको बता दें कि, Airbnb Rendr (http://nerds.airbnb.com/weve-open-sourced-rendr) जो सर्वर साइड की बैकबोन क्षुधा प्रतिपादन सक्षम होना चाहिए opensourced। यह अच्छा है, क्योंकि कोई सर्वर पर टेम्पलेट प्रतिपादन का पहला "पुनरावृत्ति" चला सकता है और क्लाइंट पूरी तरह से HTML दस्तावेज़ और पूरे जेएस ऐप को प्रस्तुत करता है। यह समय-प्रति-डिस्प्ले को बहुत कम करता है और हमें अन्य सर्वर-साइड टेम्पलेटिंग सिस्टम से छुटकारा पा सकता है।AngularJS - सर्वर साइड

तो, कोई व्यक्ति jusdom या ZombieJS के साथ AngularJS प्रस्तुत करने में कामयाब रहा है? नोड.जेएस पर ये डोम/ब्राउजर इम्यूलेशन सरल रूप से सरल सर्वर-साइड कोणीय टेम्पलेटिंग के लिए पर्याप्त होना चाहिए, लेकिन परिणाम मुझे गुगल मिला, यह बहुत निर्णायक नहीं था।

+7

यह AngularJS 2.0 में आ रहा है। [इस वीडियो] में (http://youtu.be/ZhfUv0spHCY?t=40m30s) वे सर्वर-साइड प्रतिपादन के बारे में बात करते हैं और इस समय एंगुलरजेएस के साथ ऐसा क्यों करना संभव नहीं है। –

उत्तर

2

@ दाई-शि ने कनेक्ट-प्रीरेंडर बनाया, here देखें। अभी भी कुछ मुद्दे हैं लेकिन उम्मीद है कि अच्छी शुरुआत

+0

यह एक अच्छा उपकरण प्रतीत होता है, क्या आप इसे उत्पादन में उपयोग करते हैं? – IamStalker

4

मैं भी एक समाधान खोज रहा हूं। लेकिन यह सर्वर पर एचटीएमएल प्रस्तुत करने के लिए ब्राउज़र का उपयोग करने और इसे फ्रंटेंड पर भेजने का विकल्प नहीं है। Airbnb पहले इसे आजमाएं लेकिन अस्वीकार कर दिया गया है क्योंकि धीमा और संसाधन भूखा है। यह एक उत्पादन समाधान नहीं है।

अद्यतन:; यह जल्द ही Object.observe की शुरूआत के साथ संभव हो सकता है)

+0

ज्यादातर मामलों में सर्वर-साइड प्रतिपादन रोबोट और कुछ विशेष मामलों के लिए उपयोग किया जाएगा, इसलिए सर्वर प्रदर्शन प्रभाव लापरवाह है। सर्वर पक्ष पर 'प्रतिपादन' भी एचटीएमएल प्रसंस्करण के लिए टेम्पलेट है, वास्तविक प्रतिपादन के बिना (जो सबसे सीपीयू भूखा है), जो क्लाइंट साइड पर होता है। – setec

+0

आमतौर पर आप प्रारंभिक लोड पर सर्वर पक्ष प्रतिपादन करना चाहते हैं। इसलिए उपयोगकर्ता एक्स पहली बार ऐप पर जाने के लिए एक सूची पृष्ठ पर जा रहा है। शायद उन्होंने ब्राउज़र बंद कर दिया और बाद में इसे फिर से खोल दिया। ऐप लोड करने के बजाय, डेटा के लिए एक और http अनुरोध करना, सर्वर प्रारंभिक लॉन्च में हमारे लिए बस इतना ही कर सकता है। ऐसा करने के लिए अन्य बहुत उपयोगी कारण खोज इंजन बॉट के लिए है। वे सभी Google बॉट्स के रूप में स्मार्ट नहीं हैं और उनके स्वयं के जावास्क्रिप्ट कंपाइलर नहीं हैं। – jemiloii

+0

प्रस्तुत करने का समय Google Adwords bots के लिए महत्वपूर्ण है जो [लैंडिंग पृष्ठ गुणवत्ता] में एक कारक के रूप में लोड समय का उपयोग करते हैं (https://support.google.com/adwords/answer/2404197?co=ADWORDS.IsAWNCustomer%3Dfalse&hl=hi)। मैंने फ़ैंटॉमजेएस जैसे हेडलेस ब्राउज़र भी महत्वपूर्ण CPU लोड उत्पन्न किए हैं। –

1

यह performant नहीं है के लिए wiki, लेकिन मैं है एक साधारण PhantomJS server for Heorku पर काम कर रहा है जो किसी भी क्लाइंट जेएस को पार्स करेगा। मैं बॉट अनुरोधों के लिए एचटीएमएल की सेवा के लिए विशेष रूप से कोणीय और रेल के साथ इसका उपयोग करता हूं।

4

कोणीय जेएस 2.0 सर्वर पर भी काम कर सकता है। वोजा जिना "जावास्क्रिप्ट जैबर" शो # 109 - http://javascriptjabber.com/109-jsj-dependency-injection-in-javascript-with-vojta-jina-misko-hevery/ (प्लेयर में 32:30) पर इसके बारे में बात करता है। नए AngularJS 'निर्भरता इंजेक्शन मॉड्यूल - https://github.com/angular/di.js के लिए एक लिंक है।

5

AngularJS किसी भी चाल के बिना jsdom संदर्भ के साथ काम करता है। Js src सूची और कोणीय ऐप के मुख्य पृष्ठ को angular.js को इसके प्रारंभिक पर jsdom में जोड़ें।

तो, प्रतिपादन बहुत आसान है: बस jsdom में कोणीय का उपयोग करें और यह काम करता है। इसे ब्राउज़र में रखना कुछ कठिन है।

एक तरीका बैच सिंकिंग डीओएम परिवर्तन है।

डायनेमिकल सर्वर-टू-क्लाइंट अपडेट प्राप्त करने के लिए आप MutationEvents का उपयोग कर सकते हैं (दुर्भाग्य से, jsdom MutationObservers का समर्थन नहीं करता है, लेकिन MutationEvents बहुत तेज़ काम करता है)। संचयक सरणी में डीओएम परिवर्तनों को ढेर करने के लिए उनका उपयोग करें और इसे समय-समय पर क्लाइंट ब्राउज़र पर दबाएं (कहें, प्रति 25 एमएस)।

उपयोगकर्ता घटनाओं को सक्षम करने के लिए, आपको उन्हें ब्राउज़र पर दस्तावेज़-वार ट्रैक करना चाहिए और समान रूप से जमा करना चाहिए और उन्हें सर्वर पर धक्का देना चाहिए। इस तरह के दृष्टिकोण के

एक कार्यान्वयन jsdom-सिंक (https://www.npmjs.org/package/jsdom-sync)

सर्वर साइड प्रतिपादन का एक नकारात्मक पक्ष यह है क्योंकि तत्व चौड़ाई/ऊंचाई यह वास्तव में रेंडर किया जाना चाहिए प्राप्त करने के लिए, डोम बॉक्स मॉडल आकार के अभाव है। इसका मतलब है कि यह समाधान मुश्किल से svg के लिए फिट बैठता है और इतने पर ..

इसके अलावा आप स्कोप मॉडल को देखने और ब्राउज़र-साइड स्कोप्स के साथ समन्वयित करने पर विचार कर सकते हैं, लेकिन यह पूरी तरह से अलग कहानी है।

https://www.npmjs.com/package/ng-node-compile

0

मुझे आशा है कि यह अभी भी somone मदद कर सकता है, लेकिन यहाँ एक NPM पैकेज मैं बनाया है है। मैंने फैंटोमज पर आधारित एक दृष्टिकोण का उपयोग किया। इसे देखें अगर यह

http://himangshu.io/blog/optimizing-single-page-application-using-prerender/

+0

क्या आप और बता सकते हैं कि यह कैसे पता चलता है कि कोणीय की पाइपलाइन काम करना बंद कर देती है? – IamStalker

2

एक दृष्टिकोण रूट करने के लिए सर्वर चल रहा phantomjs NodeJS करने के लिए HTML अनुरोध है:

5

हल करती है इस नए पैकेज https://github.com/a-lucas/angular.js-server आप एक कोणीय आवेदन पूर्व प्रस्तुत करना और ग्राहक के लिए HTML भेजने के लिए अनुमति देता है, कि तब जे एस कोड निष्पादित करेंगे।

यह प्रति यूआरएल कैशिंग का समर्थन करता है और आप यूआरएल प्री-रेंडरिंग को सक्रिय करने के लिए नियमों को परिभाषित कर सकते हैं।

पीएस: मैं इस पैकेज के लिए मुख्य योगदानकर्ता हूं।

2

मैं जानता हूँ कि यह एक बिट एक देर से जवाब है, Angular.js-सर्वर (https://github.com/a-lucas/angular.js-server) है कि पता लगाने के लिए जब सभी ajax अनुरोध और $ संकलन घटनाओं कार्रवाई की जाती है एक निष्क्रिय अवस्था आवश्यक चलाता है कोणीय का एक संशोधित संस्करण का उपयोग करता है।

मैं लगभग कोई संशोधन के साथ mean.js स्टैक को पूर्व-प्रस्तुत करने में कामयाब रहा।

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