2010-08-17 14 views
10

मैं एक jquery प्लगइन पर काम कर रहा हूं जो एमपी 3 के पीछे खेलने के लिए एक HTML5 ऑडियो प्लेयर() का उपयोग करता है। मैंने देखा कि विभिन्न ब्राउज़रों में ऑडियो प्लेयर लोड होने पर एक ही एमपी 3 फ़ाइल के लिए कई जीईटी अनुरोध किए गए थे।एचटीएमएल 5 ऑडियो प्लेयर लोड होने पर कई जीईटी अनुरोध करता है। क्यूं कर?

मैं इस बाहर का परीक्षण करने के लिए एक सरल स्टैंडअलोन HTML फ़ाइल बनाया।

<html> 
<head></head> 

<body> 
    <audio controls src="http://localhost:5000/files/one.mp3" type="audio/mp3"></audio> 
<body> 
<html> 

जब सफारी 5.0.1 ओएस एक्स में पेज खोलने, मैं अपने वेब सर्वर से निम्नलिखित लॉग (3 प्राप्त अनुरोध) देखा:

>> Thin web server (v1.2.7 codename No Hup) 
>> Maximum connections set to 1024 
>> Listening on 0.0.0.0:5000, CTRL+C to stop 
127.0.0.1 - - [17/Aug/2010 11:09:32] "GET /one.mp3 HTTP/1.1" 200 4030432 
0.0022 
127.0.0.1 - - [17/Aug/2010 11:09:32] "GET /one.mp3 HTTP/1.1" 200 4030432 
0.0012 
127.0.0.1 - - [17/Aug/2010 11:09:32] "GET /one.mp3 HTTP/1.1" 200 4030432 
0.0010 

ध्यान दें, अनुरोधों के लिए कर रहे हैं "GET /one.mp3 "और" GET /files/one.mp3 "नहीं है क्योंकि मेरा पतला वेब सर्वर/फ़ाइलों का उपसर्ग चला रहा है।

जब ओएस एक्स क्रोम में एक ही HTML फ़ाइल खोलने, मैं /one.mp3 के लिए 2 प्राप्त अनुरोधों को देखा।

जब ओएस एक्स ओपेरा में एक ही HTML फ़ाइल खोलने, मैं /one.mp3 के लिए 1 GET अनुरोध को देखा।

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

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

उत्तर

7

क्या यह संभव है कि सफारी मेटाडाटा लाने के लिए अतिरिक्त अनुरोध कर रहा है? देखने के लिए अगर यह किसी भी फर्क नहीं पड़ता प्रीलोड विशेषता के विभिन्न मूल्यों का प्रयास करें: - कोई डेटा प्रीफ़ेच है (किसी भी हो जाता है नहीं देखना चाहिए)

  • प्रीलोड = "मेटाडेटा" -

    • प्रीलोड = "कोई नहीं" बुनियादी मेटाडाटा अवधि, बिट दर, नमूना दर, आदि प्रीफ़ेच है की तरह (एक मिल देखना चाहिए)
    • प्रीलोड = "ऑटो" - पूरी फ़ाइल प्रीफ़ेच है (कई देख सकते हो जाता है)

    एक पूर्ण के लिए http://dev.w3.org/html5/spec/Overview.html#attr-media-preload देखें इस विशेषता का विवरण।

  • 6

    फ़ायरफ़ॉक्स के मामले में, ऑडियो के लिए तीन अनुरोध किए जाते हैं। यह प्लेबैक क्षेत्रों का समर्थन करना और मीडिया फ़ाइलों की तलाश करना है जो अभी तक डाउनलोड नहीं किए गए हैं। यह अनिवार्य रूप से फ़ाइल डाउनलोड कर रहा है और इसकी अवधि को तीन हिस्सों में निर्धारित कर रहा है। जब इस व्यवहार reported to Mozilla as a bug था निम्नलिखित एक स्पष्टीकरण के रूप में दिया गया था:

    1. पहले प्राप्त ogg फ़ाइल का पहला हिस्सा पढ़ता है। इससे हम यह सुनिश्चित कर सकते हैं कि यह एक वैध ओग आदि है। डाउनलोड किए गए डेटा को फ़ायरफ़ॉक्स द्वारा कैश किया जाना चाहिए।
    2. दूसरा प्राप्त: दुर्भाग्य से ऑग फ़ाइलों उनकी अवधि शामिल नहीं है, तो हम प्रारंभिक डाउनलोड समाप्त, और हम ऑग फ़ाइल के अंत करना चाहते हैं और मीडिया के समय अवधि को निकालने के लिए डेटा का एक सा पढ़ें।
    3. तीसरा जीईटी: मीडिया की अवधि का पता लगाने के बाद, हम मीडिया के डाउनलोड को फिर से शुरू कर देंगे। हमें पहले से कैश किए गए डेटा को फिर से लोड करने की आवश्यकता नहीं है, इसलिए हम पिछली डाउनलोड बंद होने से फिर से शुरू करते हैं।

    हालांकि यह स्पष्टीकरण केवल फ़ायरफ़ॉक्स पर लागू होता है, लेकिन आप यह मान सकते हैं कि इसी तरह के तरीकों का उपयोग वेबकिट ब्राउज़र द्वारा भी किया जाता है।

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

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