2013-07-15 13 views
8

2 जी मोबाइल कनेक्शन (~ 0.1 एमबीपीएस) से कम से कम 500ms विलंबता वाले वातावरण में, सर्वर पर लगभग 5-10 फाइलों में, लगभग 10kb सीएसएस और जेएस भेजने का सबसे तेज़ और सबसे प्रभावी तरीका क्या है ? एक के बाद एक इनलाइन बनाम जेएस और सीएसएस शामिल थे?

  • इनलाइन सब कुछ
    1. एक फाइल करने के लिए सभी js और एक फाइल
    2. करने के लिए सभी सीएसएस सभी CSS और JS फ़ाइलों को जोड़ने के संयोजन:

      मैं तीन विकल्प के बारे में सोच सकते हैं

      मुझे पता है कि Google इनलाइन का उपयोग करता है, लेकिन शायद यह सर्वर सॉकेट को बचाने के लिए है। वे स्टेटलेस मोड में चलकर राम को भी बचा रहे हैं - वे ग्राहकों के लिए सत्र याद रखने पर भरोसा करते हैं। सर्वर पावर बिल्कुल कोई मुद्दा नहीं है।

      दूसरी ओर, फेसबुक अपने सीएसएस (उनके नाम बेस 64 एन्कोडेड हैं) को स्वत: उत्पन्न करने लगते हैं, लेकिन उपयोगकर्ता को भेजे गए 10 से अधिक विभिन्न फाइलों में, और वे इसे भी अनुकूलित करने के लिए प्रतीत नहीं होते हैं; केवल कुछ सफेद जगह हटाने।

      मैं पहले से ही सभी फ़ाइलों को एक फ़ंक्शन के माध्यम से पास कर रहा हूं जो सब कुछ संपीड़ित करता है, इसलिए इनमें से कोई भी व्यवहार्य है। मैं पहला विकल्प नहीं चुनना चाहता क्योंकि यह आसान है।

      पहले दो कैशिंग का लाभ लेते हैं (दूसरा एक पहले से थोड़ा कम होता है) लेकिन दूसरे को केवल सर्वर के लिए तीन अनुरोधों की आवश्यकता होती है, और तीसरे को केवल सर्वर से अनुरोध प्राप्त करने की आवश्यकता होती है (कुछ छवियों को अनदेखा करना हमारे पास कुछ पृष्ठों पर हो सकता है)।

      क्या एंड्रॉइड/आईओएस ब्राउज़र के पुनरारंभ के दौरान जेएस और सीएसएस कैश करता है? यदि नहीं, तो इनलाइन बेहतर लगता है।

      एकमात्र लक्ष्य उपयोगकर्ता के औसत लोड समय को कम करना है। प्रत्येक उपयोगकर्ता साइट पर लगभग 100 पेज लोड खर्च करेगा, प्रति दिन लगभग 40 सीएसएस और जेएस फाइलें देखेगा। सीएसएस और जेएस मूल रूप से स्थैतिक सामग्री है। यह 30 दिनों तक कैश करने के लिए सेट है, और यदि फ़ाइल /path/to/file.ext?md5-hash-of-file का उपयोग कर बदलती है तो हम यूआरएल बदलते हैं। इसके अलावा, जहां भी संभव हो सब कुछ gzipped है।

      संपादित करें:

      मुझे लगता है कि मैं दो विकल्प मैं दो नंबर के लिए मिला स्पष्ट करना चाहिए। क्या पूरी साइट पर सीएसएस और जेएस के लिए एक फ़ाइल का उपयोग करना एक अच्छा विचार है? यह केवल दो अनुरोधों का उपयोग करेगा और किसी भी डबल (या सेप्टपल) कैशिंग को हटा देगा क्योंकि एक एकल फ़ंक्शन दो या दो से अधिक अलग संयुक्त जेएस फ़ाइलों में होता है, लेकिन 1 एमबी तक का डाउनलोड अच्छा नहीं लगता है।

      आज यह मूल रूप से एक संयुक्त सीएसएस प्रति दृश्य है, इसलिए हर बार जब आप एक ही पृष्ठ को देखते हैं तो सामग्री को कैश किया जाता है। हालांकि, कुछ जेएस और सीएसएस का उपयोग एक से अधिक पृष्ठों पर किया जाता है।

    +1

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

    +0

    यदि आप AJAX नेविगेशन का उपयोग करते हैं, इनलाइन आसान है और हमेशा बैंडविड्थ बर्बाद करने की आवश्यकता नहीं है: पूर्व; सिर में इनलाइन जेएस/सीएसएस छोड़कर, शरीर को स्वैप करें। यदि आप अक्सर पृष्ठ को रीफ्रेश करते हैं, तो कुछ अच्छी तरह से कैश किए गए बाहरी यूआरएल आमतौर पर सर्वश्रेष्ठ प्रदर्शन करते हैं। ध्यान रखें कि 2 जी पर दो 50 केबी फाइल आमतौर पर पाइप-अस्तर के कारण 1 100kb फ़ाइल से अधिक तेज़ी से स्थानांतरित हो जाएंगी। यदि आपके पास बहुत सारी अंतराल है, तो यह दो से अधिक यूआरएल को देखने/एक्सफर करने के लिए तेज़ हो सकता है। – dandavis

    +0

    सभी पेज गतिशील रूप से जेनरेट किए गए हैं, php, तो कैशिंग तब भी काम नहीं करेगा। क्या आपको कोई जानकारी है कि फ़ाइल आकार कैश किए गए हैं? –

    उत्तर

    0

    # 2 के साथ समस्या, प्रत्येक फ़ाइल से जोड़ने, यह है कि छोटे तत्वों के लिए लोड समय में सबसे बड़ा कारक गोल यात्रा समय है, फ़ाइल आकार नहीं। प्रत्येक फ़ाइल प्राप्त करने के लिए कनेक्शन स्थापित करने में कई दौर यात्राएं होती हैं। इसका मतलब यह भी है कि आपको अपने सीएसएस और जेएस फाइलों को जोड़ना चाहिए। आपके उच्च विलंबता वातावरण में, दौर यात्रा विशेष रूप से दर्दनाक होगी। Here's google's advice on round trips

    जैसा कि अन्य ने इंगित किया है, # 3, इनलाइनिंग का मतलब है कि फ़ाइलों को कैश नहीं किया जा सकता है। एचटीएमएल के बढ़ते आकार की वजह से लोड लोड धीमा हो सकता है। हालांकि आप राउंडट्रिप दंड से बचते हैं।

    आपके पर्यावरण में, मैं सीएसएस और जेएस फ़ाइलों के लिए कैशिंग अनुकूलित करने के लिए looking at the HTML5 application cache भी अनुशंसा करता हूं। आपको HTML ऐप लोड करने की बजाय AJAX कॉल का उपयोग करने के लिए अपने ऐप को कन्वर्ट करने की आवश्यकता होगी, लेकिन ऐसा करने से आवश्यक डेटा स्थानांतरण भी कम हो जाता है।

    1

    इनलाइन सीएसएस और जावास्क्रिप्ट अपने पृष्ठ इसलिए एक बहुत अच्छा अभ्यास heavy.its अपने page.this में एक में अपने सभी स्टाइल शीट और सभी जावास्क्रिप्ट फ़ाइलें विलय और उन्हें शामिल करने के लिए अपने पृष्ठ बहुत तेजी से कर देगा कर देगा इनलाइन शैलियों की तुलना में ।

    1

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

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

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