2012-10-28 22 views
12

मैं एक बड़ी वेबसाइट पर काम कर रहा हूं, और हम क्लाइंट साइड (Requ.js, बैकबोन और हैंडलबार्स स्टैक) में बहुत सारी कार्यक्षमता ले जा रहे हैं। क्लाइंट साइड में सभी प्रतिपादन को संभवतः स्थानांतरित करने के बारे में भी चर्चाएं हैं।ग्राहक पक्ष की तुलना में सर्वर पक्ष HTML प्रतिपादन वास्तव में क्यों है?

लेकिन कुछ लेख पढ़ना, विशेष रूप से ट्विटर के बारे में क्लाइंट साइड प्रतिपादन से दूर जा रहे हैं, जो उल्लेख करते हैं कि सर्वर की ओर तेजी से/अधिक विश्वसनीय है, मुझे प्रश्न पूछना शुरू हो गया है। मुझे समझ में नहीं आ रहा है कि जेएसओएन और टेम्पलेट्स से जेएस में काफी सरल HTML विजेट्स को दोहरी कोर सीपीयू पर एक समकालीन ब्राउज़र है, जिसमें 4-8 जीबी रैम आपके सर्वर साइड एप में दर्जनों को शामिल करने से धीमा है। क्या इसके बारे में कोई वास्तविक वास्तविक जीवन बेंचमार्किंग आंकड़े हैं?

इसके अलावा, ऐसा लगता है कि सर्वर साइड टेम्पलेटिंग इंजन द्वारा एचटीएमएल टेम्पलेट्स को पार्स करना एक हैंडलबार टेम्पलेट से समान HTML कोड को प्रस्तुत करने से कहीं अधिक तेज़ नहीं हो सकता है, खासकर यदि यह एक प्रीकंप जेएस फ़ंक्शन है?

+0

मुझे लगता है कि होता है कि डोम संचालन स्ट्रिंग परिवर्तन की तुलना में धीमी है। क्या आप उन लेखों में से कुछ से लिंक कर सकते हैं? – Blender

+0

विशेष http://code-inside.de/blog-in/2012/07/06/client-side-vs-server-side-html-rendering/ –

उत्तर

8

कई कारण हैं:

  1. जावास्क्रिप्ट भाषा में व्याख्या की और सर्वर साइड (आमतौर पर संकलित भाषा में किया)
  2. डोम हेरफेर धीमी है की तुलना में धीमी है, और यदि आप इसे जे एस में यह जोड़ तोड़ कर रहे हैं खराब प्रदर्शन में परिणाम। जैसे टेक्स्ट में अपना प्रतिपादन तैयार करने के तरीके को दूर करने के तरीके हैं, इसका मूल्यांकन करते हुए, यह वास्तव में आपको सर्वर साइड प्रतिपादन के करीब ले जा सकता है।
  3. कुछ ब्राउज़र विशेष रूप से पुराने IE
+0

में यह एक मैं वास्तव में पुराने IE ब्राउज़र के बारे में चिंता नहीं करता। हम आईई 8 के तहत आईई का समर्थन नहीं करते हैं। और मैं धीमी मशीनों और कनेक्शन वाले उपयोगकर्ताओं की अल्पसंख्यकता के बारे में चिंता नहीं करता। मैं उत्सुक हूं कि एक ही मशीन, एक ही ब्राउजर पर कितना धीमा प्रदर्शन होता है, केवल एक लोड एचटीएमएल और दूसरा लोड JSON और क्लाइंट में प्रस्तुत करता है। मुझे लगता है मुझे बस कुछ परीक्षण स्थापित करने की जरूरत है। –

+1

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

3
  • व्याख्या जावास्क्रिप्ट बनाम संकलित भाषा
  • कैशिंग के प्रदर्शन अभी भी धीमी गति से कर रहे हैं, अर्थात - ठीक उसी पेज किसी अन्य उपयोगकर्ता को पहले से ही अनुरोध किया है दिखाना, इस को हटा प्रत्येक ग्राहक को इसे प्रस्तुत करने की आवश्यकता है। भारी यातायात वाली साइटों के लिए बढ़िया - यानी समाचार साइटें। माइक्रो-कैशिंग वास्तविक रीयल-टाइम अपडेट भी प्रदान कर सकता है, फिर भी कैश से महत्वपूर्ण ट्रैफिक प्रदान करता है। पुराने कंप्यूटर या धीमी गति से/अपंग ब्राउज़रों
  • के साथ उपयोगकर्ताओं पर
  • कम निर्भरता प्रतिपादन ग्राहक के लिए प्रतीक्षा करने के लिए कोई ज़रूरत नहीं केवल, कैसे विभिन्न ब्राउज़रों का प्रबंधन पर कम निर्भरता प्रतिपादन के बारे में चिंता करने की जरूरत डोम (विश्वसनीयता)

लेकिन एक जटिल यूआई के लिए, इंटरैक्शन के क्लाइंट साइड प्रतिपादन एक स्नैपियर उपयोगकर्ता अनुभव प्रदान करेगा।

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

+0

साइट बहुत बड़ी (सुनिश्चित न हो। प्रयोक्ताओं की गिनती है, लेकिन यह 60 + सर्वरों पर होस्ट कर रहा है) है। अधिकांश सामग्री वैयक्तिकृत है। यह एक बड़ा सहयोग और परियोजना प्रबंधन ऐप है। –

+0

सहयोग और परियोजना प्रबंधन को देखते हुए, मैं स्क्रिप्ट वैसे भी ग्राहक पर प्रतिपादन के लिए जाना चाहते हैं। अंतःक्रियाशीलता के लिए एक झटकेदार प्रतिक्रिया की आवश्यकता होती है, इसलिए आपको जेएस की आवश्यकता होगी। –

0

क्लाइंट पक्ष पर कोड चलाने के लिए इसे पहले लोड करना होगा। जब सर्वर प्रारंभ होता है तो सर्वर साइड कोड बस लोड होता है, जबकि क्लाइंट कोड संभावित रूप से पृष्ठ पर लोड होने पर लोड किया जाना चाहिए। किसी भी मामले में पृष्ठ को लोड करते समय कोड का व्याख्या किया जाना चाहिए, भले ही फ़ाइल पहले ही कैश हो। आपको ब्राउजर में जेएस पार्स पेड़ की कैशिंग भी हो सकती है, लेकिन मुझे लगता है कि वे लगातार नहीं बने हैं, इसलिए वे लंबे समय तक नहीं जीएंगे।

इसका मतलब है कि कोई फर्क नहीं पड़ता कि जावास्क्रिप्ट कितनी तेज़ है (और यह काफी तेज़ है) उपयोगकर्ता को इंतजार करते समय काम करना होगा। कई अध्ययनों से पता चला है कि पेज लोडिंग समय साइट की गुणवत्ता और प्रासंगिकता की उपयोगकर्ताओं की धारणा को बहुत प्रभावित करता है।

नीचे की रेखा यह है कि आपके पृष्ठ को आपके सामान्य डेवलपर वातावरण पर एक स्वच्छ कैश से प्रदान करने के लिए सबसे अधिक 500ms है।धीमे डिवाइस और नेटवर्क उस अंतराल को अधिकांश उपयोगकर्ताओं को केवल स्वीकार्य रूप से स्वीकार्य बना देंगे।

तो आप शायद पृष्ठ लोड के दौरान जावास्क्रिप्ट में काम करने के लिए 50-100ms, इसके बारे में सब, महायोग, एक जटिल पेज, आसान नहीं प्रतिपादन कि अच्छी तरह से है, जिसका अर्थ है।