2009-10-15 6 views
25

सर्वर पर हार्ड फ़ाइल को जोड़ने के विरोध में छवियों को प्रदर्शित करने के लिए बेस 64/लाइन का उपयोग करना कितना तेज़ है?हार्ड फ़ाइल से लिंक करने की तुलना में किसी वेब साइट के लिए इनलाइन/बेस 64 छवियों का उपयोग करना कितना तेज़ है?

url(data:image/png;base64,.......) 

मैं इस पर किसी भी प्रकार की प्रदर्शन मीट्रिक नहीं ढूंढ पा रहा हूं।

  • अब आप कैशिंग का लाभ प्राप्त करता
  • एक बेस 64 बहुत क्या एक PNG/जेपीईजी फ़ाइल आकार से आकार में बड़ा नहीं है:

    मैं कुछ चिंता है?

के परिभाषित के रूप में "तेजी" चलो: बार जब कोई उपयोगकर्ता एक पूर्ण प्रदान की गई HTML वेब पेज

उत्तर

3

को देखने के लिए अब आप कैशिंग का लाभ प्राप्त करता लेता

क्या यह मायने रखता है कि आप कैशिंग पर कितना निर्भर करते हैं।

क्या बेस 64 एक पीएनजी/जेपीईजी फ़ाइल आकार की तुलना में आकार में बहुत बड़ा नहीं है?

फ़ाइल प्रारूप/छवि संपीड़न एल्गोरिदम समान है, मैं इसे लेता हूं, यानी यह पीएनजी है।

बेस -64 का उपयोग करते हुए, प्रत्येक 8-बिट वर्ण 6-बिट्स का प्रतिनिधित्व करता है: इसलिए बाइनरी डेटा को 8-से-6 के अनुपात से डिकंप्रेस किया जा रहा है, यानी केवल 35%।

5

यह

परिभाषित करें 'तेजी' कितना तेज है। क्या आपका मतलब HTTP प्रदर्शन (नीचे देखें) या प्रदर्शन प्रस्तुत करना है?

अब आप कैशिंग

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

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

Base64 एन्कोडिंग, एक तिहाई छवि का विस्तार होगा जो बैंडविड्थ उपयोग में वृद्धि होगी:

+0

तुम भी, HTTP अनुरोध की कम संख्या से काफी लाभ होगा। बार जब कोई उपयोगकर्ता को देखने के लिए के लिए एक पूर्ण प्रदान की गई HTML वेब पेज –

+1

के परिभाषित के रूप में "तेजी" चलो/सर्वर अंत पर perf इतना समस्याग्रस्त नहीं हो सकता है। आप अभी भी अपने पृष्ठों को आंशिक रूप से फ़ाइलों में कैश कर सकते हैं, इसलिए बार-बार छवियों को बेस 64 में बदलने की आवश्यकता नहीं है। यदि आपका पृष्ठ अक्सर नहीं बदलता है, तो आप ब्राउज़र को HTML फ़ाइल को कैश करने के लिए भी बता सकते हैं। – Tim

36

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

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

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

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

+0

के परिभाषित के रूप में "तेजी" चलो यह लेता है:: समय यह एक पूर्ण प्रदान की गई HTML वेब पेज – Tim

+0

कैशिंग को देखने के लिए एक उपयोगकर्ता के लिए ले जाता है –

15

मैं 1800 एक-पिक्सेल छवियों वाले दो HTML पृष्ठों के बीच तुलना किया है।

पहले पृष्ठ वाणी छवियों इनलाइन:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"> 

दूसरा एक में, छवियों एक बाहरी फ़ाइल संदर्भ:

<img src="img/one-gray-px.png"> 

मैंने पाया कि, अगर यह जब कई बार लोड हो रहा है एक ही छवि इनलाइन घोषित किया गया है, ब्राउज़र प्रत्येक छवि के लिए एक अनुरोध करता है (मुझे लगता है कि यह प्रति 64 बार एक बार यह 6464 डीकोड करता है), जबकि अन्य परिदृश्य में, प्रति दस्तावेज़ एक बार छवि से अनुरोध किया जाता है (नीचे तुलना छवि देखें)।

250ms के बारे में में इनलाइन चित्र लोड के साथ दस्तावेज़ और लिंक की गई छवियों के साथ दस्तावेज़ 30ms में यह होता है।

(क्रोमियम 34 के साथ परीक्षण किया गया)

ही इनलाइन छवि के कई उदाहरण के साथ एक HTML दस्तावेज़ के परिदृश्य खास मतलब एक प्रायोरी नहीं है। हालांकि, मैंने पाया कि प्लगइन jquery lazyload सभी "सुस्त" छवियों, जिसका src विशेषता यह करने के लिए स्थापित किया जाएगा के लिए डिफ़ॉल्ट रूप से एक इनलाइन प्लेसहोल्डर परिभाषित करता है। फिर, यदि दस्तावेज़ में बहुत आलसी छवियां हैं, तो ऊपर वर्णित एक जैसी स्थिति हो सकती है।

Timeline comparison

+2

क्या आप कैशिंग सक्षम हैं? –

+0

यदि आप अपनी बेस 64 छवि को आईएमजी टैग की बजाय सीएसएस कक्षा में डालते हैं, तो यह बिजली तेज हो जाएगा, और आप कैश और जीवन चक्र को नियंत्रित करेंगे। –

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

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