2011-03-06 11 views
18

मैं एक ऐप्स जहाँ मैं कैशिंग बातें शुरू करने की आवश्यकता पर बात करने के लिए हो रही है, और यह मेरे सोच कर ली ...मैं जावास्क्रिप्ट और जावास्क्रिप्ट HTML टेम्पलेट्स में बस पूरे वेब ऐप का निर्माण क्यों नहीं करता?

  1. एप्लिकेशन के कुछ भागों में, मैं तालिका पंक्तियों (jqGrid, slickgrid प्रस्तुत करना, इत्यादि) या फैंसी डिव पंक्तियां (जैसे कि नए ट्विटर में) शुद्ध JSON को पकड़कर और मूंछ, jquery.tmpl, आदि जैसे कुछ के माध्यम से इसे चलाकर
  2. ऐप के अन्य हिस्सों में, मैं केवल शुद्ध HTML में जानकारी प्रस्तुत करता हूं (सर्वर-साइड एचएएमएल टेम्पलेट्स), और यदि खोज/पेजिंग हो रहा है, तो मैं बस एक नए यूआरएल पर जाता हूं और एक नया HTML पेज लोड करता हूं।

अब समस्या कैशिंग और रखरखाव में है।

एक तरफ मैं सोच रहा हूं, अगर सब कुछ जावास्क्रिप्ट HTML टेम्पलेट्स का उपयोग करके बनाया गया था, तो मेरा ऐप सिर्फ एक HTML लेआउट/खोल, और JSON का एक गुच्छा प्रदान करेगा। यदि आप फेसबुक और ट्विटर एचटीएमएल स्रोत देखते हैं, तो मूल रूप से वे क्या कर रहे हैं (95% जेसन/जावास्क्रिप्ट, 5% एचटीएमएल)। यह ऐसा करेगा जिससे मेरा ऐप केवल JSON (पृष्ठों, कार्यों, और/या अभिलेख) को कैश करने की आवश्यकता हो। जिसका मतलब है कि आप कैश को दबाएंगे, इससे कोई फर्क नहीं पड़ता कि आप किसी जेएसओएन एपीआई या स्ट्रेट वेब ऐप तक पहुंचने वाले कुछ रिमोट एपीआई डेवलपर थे। यही है, मुझे जेएसओएन के लिए 2 कैश की आवश्यकता नहीं है, एक HTML के लिए। ऐसा लगता है जैसे यह मेरे कैश स्टोर को आधा में कटौती करेगा, और चीजों को थोड़ा सा व्यवस्थित करेगा।

दूसरी ओर, मैं सोच रहा हूं कि मैंने जो देखा/अनुभव किया है, स्थिर एचटीएमएल सर्वर-साइड उत्पन्न कर रहा है, और कैशिंग, यह बेहतर प्रदर्शन के रूप में क्रॉस-ब्राउज़र लगता है; आपको ग्राफिक्स तुरंत मिलते हैं और इसे प्रस्तुत करने के लिए जावास्क्रिप्ट के लिए उस स्प्लिट-सेकंड का इंतजार नहीं करना पड़ता है। StackOverflow सादा HTML में सब कुछ करने लगता है, तो Google करता है, और आप बता सकते हैं ... सबकुछ एक बार में दिखाई देता है। ध्यान दें कि twitter.com पर, पृष्ठ 5-1 सेकंड के लिए खाली है, और पृष्ठ में भाग आता है: जावास्क्रिप्ट को जेसन प्रस्तुत करना होगा। इसके साथ नकारात्मकता यह है कि, गतिशील (जैसे अंतहीन स्क्रॉलिंग, या ग्रिड) के लिए, मुझे जावास्क्रिप्ट टेम्पलेट्स को वैसे भी बनाना होगा ... इसलिए अब मेरे पास सर्वर-साइड एचएएमएल टेम्पलेट्स, क्लाइंट-साइड जावास्क्रिप्ट टेम्पलेट्स और बहुत कुछ है कैश करने के लिए और अधिक।

मेरा सवाल यह है कि इस दृष्टिकोण के बारे में कोई सहमति है? दो बनाम एक दूसरे के साथ 100% के साथ मिश्रण करने के अपने अनुभव से लाभ और कमी क्या हैं?

अद्यतन:

कुछ कारण है कि कारण है कि मैं अभी तक 100% जावास्क्रिप्ट templating साथ जाने के लिए निर्णय नहीं किया है में कारक हैं:

  • प्रदर्शन। औपचारिक रूप से परीक्षण नहीं किया है, लेकिन मैंने जो देखा है, कच्चे एचटीएमएल जावास्क्रिप्ट से उत्पन्न एचटीएमएल क्रॉस-ब्राउजर की तुलना में तेजी से और अधिक तरलता प्रदान करता है। इसके अलावा, मुझे यकीन नहीं है कि मोबाइल डिवाइस डायनामिक एचटीएमएल प्रदर्शन-वार कैसे संभालते हैं।
  • परीक्षण। मेरे पास बहुत से एकीकरण परीक्षण हैं जो स्थैतिक एचटीएमएल के साथ अच्छी तरह से काम करते हैं, इसलिए जावास्क्रिप्ट पर स्विच करने के लिए केवल 1) अधिक केंद्रित शुद्ध जावास्क्रिप्ट परीक्षण (jasmine), और 2) कैप्बारा एकीकरण परीक्षण में जावास्क्रिप्ट को एकीकृत करना होगा। यह सिर्फ समय और काम का मामला है, लेकिन यह शायद महत्वपूर्ण है।
  • रखरखाव। HAML से छुटकारा पा रहा है। मुझे HAML पसंद है, यह लिखना इतना आसान है, यह सुंदर HTML प्रिंट करता है ... यह कोड को साफ करता है, यह रखरखाव को आसान बनाता है। जावास्क्रिप्ट के साथ जाकर, संक्षेप में कुछ भी नहीं है।
  • एसईओ।मुझे पता है कि Google AJAX /#!/path को संभालता है, लेकिन यह नहीं समझता है कि यह अन्य खोज इंजनों को कैसे प्रभावित करेगा और पुराने ब्राउज़र इसे कैसे संभालते हैं। ऐसा लगता है कि इसे एक महत्वपूर्ण सेटअप की आवश्यकता होगी।
+0

के लिए जानकारी देने के लिए आपको लगता है कि चहचहाना देखा हो सोच रहा था पेज लोड करने के लिए तुरंत 0.5-1 लेते हैं। क्या लोडिंग ब्राउज़र के लिए प्रतीक्षा कर रही है या जावास्क्रिप्ट के लिए थोड़ा अंतर बनाता है। – Raynos

+0

अच्छा सवाल। यह जवाब पढ़ने के लिए दिलचस्प होगा। यदि प्रदर्शन महत्वपूर्ण था तो मैं स्थैतिक HTML और टेम्पलेट्स के साथ मिश्रित दृष्टिकोण के लिए जाऊंगा। – jimmystormig

+0

अपडेट करें। बनाया http://towerjs.org। अब मैं जावास्क्रिप्ट और जावास्क्रिप्ट टेम्पलेट्स में पूरा ऐप बना रहा हूं। –

उत्तर

8

निरंतर निजी डेटा संग्रहण।

आपको सार्वजनिक/निजी पहुंच के विभिन्न स्तरों के साथ डेटा स्टोर करने के लिए एक सर्वर की आवश्यकता है। आपको सुरक्षित बंद स्रोत जानकारी के लिए सर्वर की भी आवश्यकता है। आपको भारी उठाने के लिए एक सर्वर की आवश्यकता है जिसे आप क्लाइंट पर नहीं करना चाहते हैं। जटिल डेटा क्वेरीिंग आपके डेटाबेस इंजन तक सबसे अच्छी तरह से छोड़ी गई है। अनुक्रमण और खोज जावास्क्रिप्ट के लिए अभी तक अनुकूलित नहीं है।

इसके अलावा आपके पास पुराने ब्राउज़र के मुद्दे धीमे होने के मुद्दे हैं। यदि आप एफएफ 4/क्रोम या आईई 9 नहीं चला रहे हैं तो क्लाइंट और सर्वर पर डेटा मैनिपुलेशन और पेज निर्माण के बीच एक बड़ा अंतर है।

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

लेकिन सामान्य रूप से एप्लिकेशन वास्तव में जावास्क्रिप्ट में और टेम्पलेट का उपयोग करके पूरी तरह से बनाया जा सकता है। विभिन्न संरचनाओं और जावास्क्रिप्ट इंजनों ने ऐसा करने के लिए पर्याप्त उन्नत किया है। ऐसा करने के लिए वहां पर्याप्त लोकप्रिय ढांचे हैं। शुद्ध जावास्क्रिप्ट वेब अनुप्रयोग अब प्रयोग और प्रोटोटाइप नहीं हैं।

ओह, और यदि इसके लिए ढांचे की सिफारिश कर रहे थे, तो backbone.js पर एक नज़र डालें।


सुरक्षा


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

+0

मैं वर्तमान में एक जावास्क्रिप्ट व्यू जनरेटर पर काम कर रहा हूं जो डीएस रीस्ट एपीआई परत से जेएसओएन प्रारूप में डेटा खींचता है। मजेदार चीजें। –

5

मैं इन दो दृष्टिकोणों को मिश्रण करता था लेकिन फिर क्लाइंट साइड प्रतिपादन में पूरी तरह से स्विच करता था क्योंकि अन्यथा भारी जावास्क्रिप्ट को सही ढंग से संभालना मुश्किल था। एक पूर्ण समाधान के रूप में JavaScriptMVC ढांचे के दृष्टिकोण की सिफारिश कर सकते हैं।

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

फिर आपके एपीआई के लिए, आरईएसटी सिद्धांतों के बाद, कैशिंग महत्वपूर्ण बाधाओं में से एक है। इसलिए यदि आपका एप्लिकेशन JSON डेटा के लिए HTTP कैशिंग का सही ढंग से समर्थन करता है और आपके संपीड़ित क्लाइंट साइड टेम्पलेट का उपयोग करके आप प्रदर्शन सुधार भी देख सकते हैं।

+0

अच्छा, मैं [coffeekup] (https://github.com/mauricemach/coffeekup) का उपयोग कर रहा हूं [coffeescript] (http://jashkenas.github.com/coffee-script/) रेल में, बहुत अधिक करता है वही बात है लेकिन यह erb की बजाय हैमल की तरह है। मैं ढांचे के अज्ञात रणनीतियों की तलाश में हूं, हालांकि इस प्रश्न में बी/सी मैं अभी भी मूल रूप से डुप्लिकेट सर्वर-साइड और क्लाइंट साइड टेम्पलेट्स बना रहा हूं। –

+0

मुझे सादे जावास्क्रिप्ट में टेम्पलेट को संकुचित/संकलित करने का दृष्टिकोण मिलता है और एक सतत रीस्ट एपीआई बल्कि फ्रेमवर्क अज्ञेयवादी प्रदान करता है। मैंने अभी एक सतत समाधान के लिए जावास्क्रिप्टएमवीसी का सबसे अच्छा उदाहरण पाया है जो आप जो पूछ रहे थे उसके साथ बिल्कुल संबंधित है (और बीटीडब्ल्यू भी एक कॉफ़ीस्क्रिप्ट दृश्य प्लगइन है;)। मैं अपने पूरे सर्वर साइड विचारों से छुटकारा पा सकता हूं और एक ही समय में फ्रंटेंड और बैकएंड का बेहतर अलगाव प्राप्त कर सकता हूं। – Daff

2

मैं यहाँ जिस तरह से बंद हो सकता है, लेकिन ...

क्या तुमने कभी CouchDB को देखा है? (मेरे पास कोई संबद्धता नहीं है/उन्हें बीटीडब्लू) मैं गलत तरीके से हो सकता हूं, लेकिन आपकी स्थिति लगता है कि यह Apache CouchDB के उपयोग के लिए एकदम सही फिट हो सकता है मैंने वास्तव में इसे अभी तक उपयोग नहीं किया है, लेकिन मैंने इसे अच्छी तरह से देखा थोड़ी देर पहले और यह एक बहुत ही रोचक डेटाबेस है।

यह एक दस्तावेज़ आधारित डेटाबेस है जो कनेक्शन के लिए एक आरईएसटी एपीआई का उपयोग करता है (बहुत बहुमुखी और उपयोग करने में आसान)।यह भी बहुत JSON केंद्रित है, बहुत तेज़ और एक छोटा पदचिह्न; वे कहते हैं कि यह फोन और अन्य एम्बेडेड उपयोगों पर भी रह सकता है लेकिन साथ ही साथ अत्यधिक स्केलेबल (ऊपर की ओर) माना जाता है। यदि आपका एक बड़ा जेएस उपयोगकर्ता (जो आप जैसे हैं) तो आप इसके साथ घर पर सही हो सकते हैं।

मैं सिर्फ यह है कि यह तरीके कि यहां प्रस्तावित किया गया है के किसी भी संख्या में काम में आते हैं और सोचा था कि मैं सिर्फ झंकार था आप भंडारण विकल्प :)

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