Avatar billede rif1900 Nybegynder
09. september 2006 - 01:06 Der er 6 kommentarer og
1 løsning

Undersøg en besøgenes internethastighed

Jeg har været lidt på jagt på google men synes ikke jeg kan finde lige de script jeg har brug for, så håber der måske er nogle der kan hjælpe mig herinde.

Jeg har brug for at kunne foretage en meget hurtig og effektiv hastighedstest af mine besøgende.
Siderne får op imod 50.000 besøgende om dagen og det er derfor utroligt vigtigt at serverload og forsinkelsen for brugeren er så lille som overhovedet mulig.

Er der nogle der kan lave sådan et script eller fortælle mig hvor jeg kan købe det?

Jeg vil meget gerne give 200 point til den person der kan give den bedste løsning :)

Håber at der er nogle herinde der lige ved hvad der skal til
Avatar billede rif1900 Nybegynder
09. september 2006 - 01:12 #1
Jeg skal desuden kunne arbejde ud fra resultater naturligvis, loade en anden side hvis de kun er på dialup osv.
Avatar billede coderdk Praktikant
09. september 2006 - 03:36 #2
Denne har jeg lige testet på en af mine servere, den ser ud til at virke fint - Tallet du får er et rimelig godt estimat - Det kræver at serveren kan følge med dog ;)

<?php

    define( "KB_TO_SEND", 1024 );

    header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header("Last-Modified: " . gmdate("D,  d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store,  no-cache,  must-revalidate");
    header("Cache-Control: post-check=0,  pre-check=0",  false);
    header("Pragma: no-cache");
    if ( function_exists( "gzopen" ) && ini_get( "zlib.output_compression" ) == 1 )
    {
        ini_set( "zlib.output_compression", 0 );
    }

    class benchmark
    {
        var $startbenchmarktime = 0;
        function benchmark()
        {
            list($usec, $sec) = explode(' ',microtime());
            $this->startbenchmarktime = ((float)$usec + (float)$sec);
        }
        function get()
        {
            list($usec, $sec) = explode(' ',microtime());
            $time = ((float)$usec + (float)$sec);
            return (($time - $this->startbenchmarktime) * 1000);
        }
    }
   
    $rnd = md5( time() );
    $oneK = str_repeat( $rnd, 31 ) . "12345678901234567";
    $bm = new benchmark();
    echo "HER: " . KB_TO_SEND;
    for ( $i = 0; $i < KB_TO_SEND; $i++ )
    {
        header( sprintf( "X-Speed-Test: %s", $oneK ) );       
    }
    flush();
    $millisecs = $bm->get();
    $kbps = ( KB_TO_SEND * 1024 * 8 ) / $millisecs;

    echo 'Your internet connection was measured to be ' . number_format( $kbps, 2, ',', '.' ) . ' Kbps';
 
?>

Jeg synes resultatet er en anelse højt, jeg har en 4 Mbps forbindelse og den siger omkr 3,9 Mbps - Med TCP headere osv, burde det være lidt lavere... Men jeg synes det er en udemærket approximation!
Avatar billede coderdk Praktikant
09. september 2006 - 04:13 #3
Øøøh, denne er vist ikke så fyldt med fejl :P

<?php

    define( "KB_TO_SEND", 512 );

    header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header( "Last-Modified: " . gmdate( "D,  d M Y H:i:s" ) . " GMT" );
    header( "Cache-Control: no-store,  no-cache,  must-revalidate" );
    header( "Cache-Control: post-check=0,  pre-check=0",  false );
    header( "Pragma: no-cache" );
    if ( function_exists( "gzopen" ) && ini_get( "zlib.output_compression" ) == 1 )
    {
        ini_set( "zlib.output_compression", 0 );
    }

    class benchmark
    {
        var $startbenchmarktime = 0;
        function benchmark()
        {
            list( $usec, $sec ) = explode( ' ',microtime() );
            $this->startbenchmarktime = ( (float)$usec + (float)$sec );
        }
        function get()
        {
            list( $usec, $sec ) = explode( ' ', microtime() );
            $time = ( (float)$usec + (float)$sec );
            return ( $time - $this->startbenchmarktime );
        }
    }
 
    $rnd = md5( time() );
    $oneK = str_repeat( $rnd, 31 ) . "12345678901234567";
    $bm = new benchmark();
    for ( $i = 0; $i < KB_TO_SEND; $i++ )
    {
        header( "X-Speed-Test: " . $oneK, false);     
    }
    flush();
    $secs = $bm->get();
    $kbps = ( KB_TO_SEND * 1024 * 8 ) / $secs / 1024;

    echo 'Your internet connection was measured to be ' . number_format( $kbps, 2, ',', '.' ) . ' Kbps';

?>
Avatar billede rif1900 Nybegynder
09. september 2006 - 16:04 #4
Tak for det, meget præcist hvad jeg havde brug for... tænker nu stadig på hvad den hurtigste måde at gøre det på er... Har prøvet med helt ned til 16kb men den bliver jo noget upræcis så...

Jeg vil lege lidt med det og teste det yderligere, takker for scriptet.
Avatar billede coderdk Praktikant
09. september 2006 - 16:13 #5
Det optimale ville være at tilpasse mængden til hastigheden, altså hvis det tager under 1 sekund at teste, så øger vi datamængden så vi får et mere præcist tal... :)
Avatar billede coderdk Praktikant
09. september 2006 - 16:43 #6
Denne starter med 16 KB og går op til ca 16384:

<?php

    define( "KB_TO_SEND", 16 );

    header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header( "Last-Modified: " . gmdate( "D,  d M Y H:i:s" ) . " GMT" );
    header( "Cache-Control: no-store,  no-cache,  must-revalidate" );
    header( "Cache-Control: post-check=0,  pre-check=0",  false );
    header( "Pragma: no-cache" );
    if ( function_exists( "gzopen" ) && ini_get( "zlib.output_compression" ) == 1 )
    {
        ini_set( "zlib.output_compression", 0 );
    }

    class benchmark
    {
        var $startbenchmarktime = 0;
        function benchmark()
        {
            list( $usec, $sec ) = explode( ' ',microtime() );
            $this->startbenchmarktime = ( (float)$usec + (float)$sec );
        }
        function get()
        {
            list( $usec, $sec ) = explode( ' ', microtime() );
            $time = ( (float)$usec + (float)$sec );
            return ( $time - $this->startbenchmarktime );
        }
    }
   
    $KB = ( !empty( $_GET['init'] ) ? $_GET['init'] : KB_TO_SEND );
    if ( $KB > 64000 ) $KB = 64000;

    $rnd = md5( time() );
    $oneK = str_repeat( $rnd, 31 ) . "12345678901234567";
    $bm = new benchmark();
    for ( $i = 0; $i < $KB; $i++ )
    {
        header( "X-Speed-Test: " . $oneK, false );     
    }
    flush();
    $secs = $bm->get();

    if ( $secs < 2 && empty( $_GET['init'] ) )
    {
        $new = round( $KB * ( 2 / $secs ) );
        if ( $new - $KB > 16384 ) $new = $KB + 16384;
        echo '<script type="text/javascript">window.location.href="' . $_SERVER['PHP_SELF'] . '?init=' . $new . '";</script>';
        exit;
    }
    $kbps = ( $KB * 8 ) / $secs;

    echo 'Your internet connection was measured to be ' . number_format( $kbps, 2, ',', '.' ) . ' Kbps';

?>
Avatar billede rif1900 Nybegynder
09. september 2006 - 18:01 #7
virkelig god ide, det havde jeg ikke lige tænkt over, men naturligvis.

Tror min løsning begynder at være acceptabel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester