2010-10-15 7 views
5

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

परीक्षण गति के लिए संभावना मैं IST निम्नलिखित

$kb = 512; 

    flush(); 
    // 
    echo "<!-"; 
    $time = explode(" ",microtime()); 
    for($x=0;$x<$kb;$x++){ 
     echo str_pad('', 512, '.'); 
     flush(); 
    } 
    $time_end = explode(" ",microtime()); 
    echo "->"; 

    $start = $time[0] + $time[1]; 
    $finish = $time_end[0] + $time_end[1]; 
    $deltat = $finish - $start; 

    return round($kb/$deltat, 3); 

हालांकि यह काम करता है इस समय है, मैं इसे अपने कोड में इतने सारे पात्रों डाल करने के लिए भी अगर मैं यह सब मैं नहीं कर सकता गूंज पसंद नहीं है परिणाम को कुकी में सहेजें क्योंकि पहले ही आउटपुट हो चुका है।

क्या कोई ऐसा कुछ अलग फ़ाइल में ऐसा कुछ कर सकता है? क्या आपके पास कोई समाधान है?

अग्रिम धन्यवाद।

+0

perect नहीं है मुझे लगता है कि कच्चे php साथ संभव नहीं है js शामिल कर सकते हैं। – fabrik

+0

str_pad() जो 512 जोड़ता है। के लिए इस्तेमाल होता है? –

+0

बुरा विचार; आप इसे सही तरीके से नहीं कर सकते हैं, और यहां तक ​​कि यदि आप नहीं कर सकते हैं। आप जो चाहते हैं वह आपकी साइट का एक मोबाइल संस्करण है जो कम बैंडविड्थ और छोटी स्क्रीन अनुकूल है, और उपयोगकर्ताओं को उस मोबाइल संस्करण का उपयोग करने के * विकल्प * प्रदान करता है। – meagar

उत्तर

6

क्या आपके पास कोई समाधान है?

मेरा समाधान गति परीक्षण से परेशान नहीं है। यहां बताया गया है:

आपने कहा कि परीक्षण का कारण यह निर्धारित करना है कि कौन सी जेएस/सीएसएस फाइलें भेजना है। आपको यह ध्यान रखना होगा कि ब्राउज़र पहले डाउनलोड के बाद इन फ़ाइलों को कैश करेगा (जब तक उन्हें संशोधित नहीं किया गया हो)। तो असल में, आप 256 के टेस्ट डेटा भेज रहे हैं यह निर्धारित करने के लिए कि क्या आपको अतिरिक्त 512 के लिए भेजना चाहिए या नहीं?

बस डेटा भेजें और इसे कैश किया जाएगा। जब तक आपके पास जेएस/सीएसएस का एमबी नहीं है (जिस स्थिति में आपको एक साइट रीडिज़ाइन की आवश्यकता है, गति परीक्षण नहीं) डाउनलोड समय करने योग्य होगा। स्ट्रीमिंग वीडियो और जैसे स्ट्रीमिंग जैसी चीजों के लिए स्पीड टेस्ट आरक्षित होना चाहिए।

+0

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

1

समस्या यह है कि आप वास्तव में यह अच्छी तरह से हल नहीं कर सकते हैं, और शायद शुद्ध PHP में नहीं। आपके द्वारा लिया गया दृष्टिकोण उपयोगकर्ता डाउनलोड (512x512) = 262 144 बेकार डेटा के बाइट करेगा, जो कि अधिकांश पूर्ण पृष्ठों की तुलना में बहुत बड़ा है। यदि उपयोगकर्ता धीमे कनेक्शन पर है, तो वे मान सकते हैं कि स्पीड टेस्ट खत्म हो जाने से पहले आपकी साइट डाउन हो गई है (10 केबी/सेकंड के साथ, स्क्रीन पर कुछ रोचक शो से पहले आधे मिनट लगेंगे!)।

आप एक ज्ञात आकार की फ़ाइल के लिए AJAX अनुरोध कर सकते हैं और कितनी देर तक लेता है। यहां समस्या यह है कि पृष्ठ को काम करने के लिए पहले ही लोड किया जाना चाहिए, इसलिए यह केवल बाद के पृष्ठों के लिए काम करेगा।

आप "लोडिंग" पृष्ठ बना सकते हैं (जैसा कि आप धीमे कनेक्शन से इसे एक्सेस करते समय जीमेल पर देखते हैं) जो डेटा को प्रीलोड करता है, कम बैंडविड्थ संस्करण के लिंक के साथ (या हो सकता है कि लोडिंग ले रहा हो तो रीडायरेक्ट हो बहुत लंबा)।

या आप कुकी में "प्रारंभ" समय बचा सकते हैं और पेज लोड होने पर AJAX अनुरोध कर सकते हैं - जो आपको आपके पृष्ठ का वास्तविक लोडिंग समय देगा; यदि ऐसा है, तो 10 सेकंड से अधिक, आप निम्न बैंडविड्थ संस्करण पर स्विच करना चाह सकते हैं।

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

+0

और यह कितना सटीक है? – fabrik

+0

पृष्ठ को उत्पन्न करने से पहले उसे गति ** की आवश्यकता है ताकि वह कौन सी सीएसएस फ़ाइल को शामिल कर सके। –

+0

@ ऐलिन पुराकारू: बताएं, आप कुछ भी डाउनलोड करने से पहले * गति कैसे प्राप्त करते हैं? – Piskvor

3

एकमात्र विचार जो मैं आ सकता हूं वह एक रीडायरेक्ट है।

  • उपाय उपयोगकर्ताओं की गति
  • पुनर्निर्देशन सूचकांक

हालांकि यह एक अच्छा समाधान यह केवल उन को मापने के लिए की जरूरत नहीं है करने के लिए 'केवल एक बार तो मुझे लगता है कि यह क्षम्य है गति।

0

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

1

जावास्क्रिप्ट का उपयोग करने के बारे में समय पर पृष्ठ लोड करने में कितना समय लगता है। फिर कुकी सेट करने के लिए जावास्क्रिप्ट का उपयोग करें।

जावास्क्रिप्ट http://phpjs.org/functions/microtime:472

में

microtime jQuery

<head> 
<!-- include jquery & other html snipped --> 

<script> 

function microtime (get_as_float) { 
    // http://kevin.vanzonneveld.net 
    // + original by: Paulo Freitas 
    // *  example 1: timeStamp = microtime(true); 
    // *  results 1: timeStamp > 1000000000 && timeStamp < 2000000000 

    var now = new Date().getTime()/1000; 
    var s = parseInt(now, 10); 

    return (get_as_float) ? now : (Math.round((now - s) * 1000)/1000) + ' ' + s; 
} 

function setCookie(c_name, value, expiredays) { 
var exdate=new Date(); 
exdate.setDate(exdate.getDate()+expiredays); 
document.cookie=c_name+ "=" +escape(value)+ 
((expiredays==null) ? "" : ";expires="+exdate.toUTCString()); 
} 

start = microtime(true); 

$(window).load(function() { 
    // everything finished loading 
    end = microtime(true); 
    diff = end - start; 
    // save in a cookie for the next 30 days 

    setCookie('my_speed_test_cookie', diff, 30); 
}); 

</script> 
</head> 
<body> 
<p>some page to test how long it loads</p> 
<img src="some_image_file.png"> 
</body> 

कुछ नुकसान का उपयोग करना: - पेज पहले लोड हो रहा है शुरू करने के लिए की आवश्यकता होगी। JQuery (या आप उपरोक्त कोड jQuery से बचने के लिए फिर से काम कर सकते हैं) लोड किया जा करने की आवश्यकता होगी क्योंकि पात्रों संकुचित हो सकती है, ASCII/लैटिन डेटा सबसे अच्छा परिणाम दे नहीं हो सकता है पर

  • परीक्षण गति। उच्च स्तरीय gzip संपीड़न के अलावा, कुछ मोडेम/रेखाएं (यदि सभी नहीं हैं) में मूल संपीड़न होता है जो दोहराने वाले पात्रों का पता लगाने में सक्षम होता है और दूसरे छोर को बताता है कि अगले 500 को '' दोहराया जाता है। मुझे लगता है कि
0

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

Ip2Location.com ऐसे डेटाबेस प्रदान करता है, जो उनके डीबी 13 उत्पाद से शुरू होता है।

बेशक, यदि आपका लक्ष्य साइट का मोबाइल संस्करण है, तो उपयोगकर्ता एजेंट स्नीफिंग एक बेहतर समाधान है।

1

आप पहले पृष्ठ (शायद सभी बाहरी फाइलों के साथ 100 केबी) पर जाते हैं, एक सत्र को $ _SESSION ["start_time"] = time() के साथ शुरू किया गया है;

जब पेज लोड हो रहा है (jQuery खिड़की लोड या बराबर :) यू समय के साथ फिर से एक अनुरोध भेज, यू गति की गणना (jQueryRequestTime समाप्त हो गया - $ _SESSION [ "start_time"]/PageSize) और सेट एक और सत्र चर, अगले लिंक इसके बाद वह क्लिक कस्टम सीएसएस/कि

इस ऑप्टिकल फाइबर केबल के लिए मंजूरी दे दी है :)