2012-03-10 12 views
9

मैं उपयोगकर्ताओं के लिए फ्रंटएंड पेज लोड की गति में सुधार करने की कोशिश कर रहा हूं, और मुझे लगता है कि jQuery DomContentLoaded ईवेंट को 100ms से अधिक तक धीमा कर रहा है।क्या jQuery 100p या उससे अधिक वेबपृष्ठों के प्रतिपादन को धीमा कर देता है?

मैं आई 7 2.5 गीगा, एसएसडी ड्राइव और 8 जीबी रैम वाले कंप्यूटर का उपयोग कर क्रोम 17 के साथ विंडोज 7 पर बेंचमार्किंग कर रहा हूं। परीक्षण मेरे स्थानीय कंप्यूटर पर चलाया जाता है। मुझे चिंता है कि मेरी मशीन पर धीमी गति से मैं पुराने कंप्यूटर और ब्राउज़र पर धीमा हो जाऊंगा।

क्या यह सिर्फ jQuery का उपयोग करने के लिए मानक जुर्माना है, या क्या मुझे लगता है कि प्रदर्शन को तेज करने का कोई तरीका है?

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript"> 
      console.time("DOMContentLoaded"); 
     </script> 
    </head> 
    <body> 
     <h1>Hello World</h1> 

     <script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script> 

     <script type="text/javascript"> 
      document.addEventListener("DOMContentLoaded", ready, false); 

      function ready() { 
       console.timeEnd("DOMContentLoaded"); 
      } 
     </script> 
    </body> 
</html> 

कंसोल पर, समय है कि मैं देख रहा हूँ मोटे तौर पर ~ 100ms है:

यहाँ कोड है कि मैं का उपयोग कर रहा है।

जब मैं jQuery को लोड करने वाली रेखा को हटा देता हूं, तो समय लगभग ~ 1ms होता है।

मैं भी गूगल CDN का उपयोग करके उपरोक्त कोड की कोशिश की:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

परिणाम काफी हद तक एक ही है।

क्या jQuery का उपयोग करने के लिए हमेशा 100ms जुर्माना होता है? क्या मुझे याद आ रही है कि वहाँ कुछ है? धन्यवाद!

+0

jQuery के साथ कोड को डीओएम के अंदर तैयार करने का प्रयास करें: '$ (तैयार);' – gdoron

+1

हाय gdoron - यह 100ms देरी वास्तव में अन्य जावास्क्रिप्ट चलाने के बिना, jQuery को लोड करने के लिए होती है। ऐसा प्रतीत होता है कि केवल अतिरिक्त जावास्क्रिप्ट के लिए मदद मिलेगी। – Chris

+2

यह हालिया लेख आपकी रुचियों के लिए प्रासंगिक हो सकता है: "[jQuery कर का भुगतान करना बंद करें] (http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax)" द्वारा @ [ सैम केसर] (http://stackoverflow.com/users/17174/sam-saffron) – Piskvor

उत्तर

-3

जो मंदी आप देखते हैं वह है क्योंकि ब्राउजर को पहले jQuery लाइब्रेरी डाउनलोड करना है। जब आप कोई बाहरी जावास्क्रिप्ट शामिल करते हैं तो यह "जुर्माना" होता है। इसका jQuery के साथ कुछ लेना देना नहीं है।

आप एक स्क्रिप्ट लोडर जैसे require.js का उपयोग करके इसे कम कर सकते हैं।

+0

हालांकि यह jquery के साथ कुछ करने के लिए है। यहां तक ​​कि यदि आप पूरी चीज़ को स्थानीय फ़ाइल के रूप में लोड करते हैं, तो jquery के लिए पार्स टाइम है, जितना न्यूनतम हो सकता है। – jdi

+0

हाय ब्लॉकहेड - परीक्षणों में, मैं स्थानीय रूप से jQuery लोड कर रहा था। मैंने इसे Google सीडीएन से लोड करने और लाइब्रेरी पहले ही कैश किए जाने पर बाद के पेज लोड पर समय मापने का प्रयास किया। – Chris

4

जब भी आप jQuery जैसी बड़ी जेएस लाइब्रेरी लोड करते हैं तो आप एक छोटी सी हिट देखने जा रहे हैं। निजी तौर पर, मैं तर्क दूंगा कि 100 एमएमएस ज्यादा नहीं है, आपको इसे ध्यान में रखते हुए सभी कारकों को ध्यान में रखना होगा:

  1. आप समय का भार ले रहे हैं, जिसमें समय लगता है।
  2. आपका नेटवर्क कनेक्शन एक कारक निभाता है (वहां पार्स दस्तावेज़ है, अनुरोध करें, प्रतिक्रिया के लिए प्रतीक्षा करें)। आपके कनेक्शन की लेटेंसी में आपकी विलंबता का परीक्षण करने के लिए http://http://pingtest.net/ का उपयोग किया जाना चाहिए, और वास्तविक हिट का बेहतर विचार प्राप्त करने के लिए 100ms + से घटाएं)।
  3. आपके वेब सर्वर पर उचित कैश नियंत्रण सभी # 2 को खत्म कर सकता है, उस सर्वर को कॉन्फ़िगर करें ताकि फ़ाइल हर महीने या तो एक बार समाप्त हो जाए। यह हेडर तब फ़ाइल के साथ पास किया जाएगा ताकि उपयोगकर्ता का ब्राउज़र केवल महीने में इसे लोड कर सके। आपको अभी भी पहले पृष्ठ लोड पर छोटा अनुरोध होगा, लेकिन कम से कम उसके बाद के पृष्ठ अनुरोध स्थानीय समय में स्थानीय कैश से इसे खींचेंगे।
  4. निष्पादन समय पार्स है; संपूर्ण jQuery फ़ाइल को पार्स किया जाना चाहिए, और निष्पादित किया जाना चाहिए। माइनिंग केवल आकार को कम कर देता है, और इसलिए बैंडविड्थ को इसे स्थानांतरित करने की आवश्यकता होती है (जो कनेक्शन की गति के आधार पर समय के बराबर होती है) ... पार्स टाइम को कम करने के लिए खनन बहुत कम करता है (आधुनिक जेएस इंजन जैसे वी 8 फ्लाई टिप्पणियों और व्हाइटस्पेस जैसे वे वेरन वहां भी नहीं है)।

ध्यान रखें, कि सबसे अधिक पृष्ठों, वास्तविक पुस्तकालय खुद के रूप में लगभग उतना ही कस्टम जे एस (jQuery के आधार पर) के लिए नहीं होगा तो भी एक गहन इंटरैक्टिव पेज केवल कुछ [दर्जन] अतिरिक्त के मिलीसेकेंड देखेंगे लाइब्रेरी ने जो पहले ही लगाया है उस पर ओवरहेड।

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

+0

हाय ग्रेगरी - अंक 2 और 3 पर, मुझे ध्यान रखना चाहिए था कि मैं स्थानीय स्तर पर परीक्षण चला रहा था और एक एसएसडी हार्ड ड्राइव का उपयोग कर रहा था, इसलिए विलंबता न्यूनतम होनी चाहिए। – Chris

+0

स्थानीय रूप से एक एसएसडी से निश्चित रूप से कोई ओवरहेड के करीब नहीं मिलता है। मुझे लगता है कि Google के सीडीएन से इसी तरह के परिणाम प्राप्त करने से, यह साबित होता है कि पार्स/निष्पादन के कारण, शायद आपको कोई बेहतर नहीं मिलेगा ... मैं अभी भी अपने अंतिम अनुच्छेद से खड़ा हूं :) –

+0

मेरा अनुमान है देरी देय है jQuery की पार्सिंग के लिए। आप संभवतः वेबपैगेटेस्ट.org या HTTPWatch का उपयोग करके पेज के लोड को देखना चाहते हैं ताकि जावास्क्रिप्ट पर आपके लिए काम करने के लिए इस विलंब को देखने के बजाय (जो छोटी अवधि के साथ हम बात कर रहे हैं) के साथ अन्य मुद्दों को पेश कर सकते हैं –

1

jQuery एक 92 के फ़ाइल है। आपको इसे लोड करना होगा और इसे पार्स करना होगा।

मैं studio831.com/jquery_test/index.html, cdn.html, और dom_ready.html पर अपने उदाहरण की मेजबानी की है।

आप प्रत्येक बार डाउनलोड करने के लिए देख सकते हैं। आप डाउनलोड के कितने समय तक टूटने को देखने के लिए क्रोम के डेवलपर टूल का उपयोग भी कर सकते हैं।

+1

एक बार jquery कैश किया गया है, यह सब मेरे लिए बिल्कुल वही प्रदर्शन करते हैं। एकाधिक रीलोड्स jquery को पार्स करने में व्यतीत समय के बराबर समान प्रदर्शन करते हैं। – jdi

+0

हाँ, जैसा कि अपेक्षित है। –

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

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