Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [js] Jak sprawdzic szybkosc i dostepnosc
Dagger
post
Post #1





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 4.02.2003
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


Witam!
Chcial bym umiescic maly skrypt javascript w pliku index.html ktory by sprawdzal dostepnosc 2 innych moich kont www a nastepnie aby wybieral np. szybszy... tak aby strona otwierala sie by szybko osobie ja odwiedzajacej.
Jak to zrobic?
Pozdrawiam
Dagger
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
Bakus
post
Post #2


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


W JS jest to niezbyt możliwe... jeżeli już, to w php wywołujesz polecenie PING i sprawdzasz jaki jest czas odpowiedzi poszczególnych maszyn, wybierasz tą dla której serwer odpowiedział szybciej i przekierowujesz...
Go to the top of the page
+Quote Post
Paul
post
Post #3





Grupa: Zarejestrowani
Postów: 636
Pomógł: 0
Dołączył: 22.10.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Moim zdaniem nie ma tu JS sensu, poniewaz JS jest wykonywany po stronie przegladarki, a wiec jesli chcesz testowac dwa adresy to ta przegladarka i tak musi to pobrac...

Jesli jednak chcesz takie cos robic to ja widze to tak.. Poniewaz JS, z tego co wiem nie posiada funkcji do obslugi plikow (jedynie img da sie) mozna kombinowac pewne polrozwiazania... Np. ladowac do niewidocznych ramek podstrony poszczegolne i mierzyc czas, a nastepnie porownywac.. Prosza metoda moze za to byc ladowanie jakiegos obrazka, kilka razy dla usrednienia wynikow i porownywanie jego czasu ladowania z drugim obrazkiem...

Jednak wtedy wychodzi na to, ze i tak przegladarka ciagnie.... Dlatego lepszym rozwiazniem jest php (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Dagger
post
Post #4





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 4.02.2003
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


po 1. jak bede sprawdzal szybkosc pozostalych kont za pomoca php to czy ta predkosc nie bedzie sprawdzana pomiedzy serwerem z php a pozostalymi? Nie bedzie sprawdzana predkosc miedzy klientem a pozostalymi serwerami.
po 2. a czy za pomoca js da sie jedynie sprawdzic dostepnosc serwerow/plikow ? (bez sprawdzania szybkosci)
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


da sie i jedno i drugie zrobic z poziomu JS. Koledzy, ktorzy odpowiadali przede mna - czy testowalisice i probowaliscie to uzyskacz, czy twierdziecie ze sie nie da na "pale"?
Dagger ma oczywiscie racje, ze sprawdzajac dowolnym server-side sprawdzamy predkosc miedzy serwerem, a nie klientem.
W JS, mimo, ze nie ma natywnych mechanizmow do takich operacji (swoje specjalistyczne posiada Trident - silnik IE - w ActiveX, oraz Gecko - w postaci interfejsow sieciowych XPCOM) pozwala przy uzyciu sztuczek na takie manewry.

Rozwiazanie
1) Aby sprwdzic dostepnosc serwero nalezy umiescic na nich obrazek i z poziomu JS zazadac jego sciagania (x = new Image(), x.src="adres") nastepnie cyklicznie odpytywac czy obrazek juz zostal sciagniety - jesli nie zostanie np. przez 5 sekund uznajemy, ze serwer lezy. Jesli sciagna sie oba, ale jedenszybciej - masz prawdopodobna odpowiedz.

A teraz - co zrobic aby sprawdzic czy obrazek sie sciagnal? Kilka lat temu napisalem ATLoadera:

Kod
function AT_loader(o,O,t,h){

var p=[],A=0,S=0,i=[],r;

function d(i,W){p[p.length]=[i,W];A+=W;}

function y(){var g;

    S=0;for(g=0;g<p.length;g++)

  {

     if(!i[g]){i[g]=new Image();i[g].src=p[g][0]}

     else{(ie?i[g].complete:i[g].width>0)?S+=p[g][1]:0}

  }

eval(o);

if(S==A||(h-=t)<0){eval(O)}else{setTimeout(y,t)}

}

function s(){return [A,S]}

return {add:d,go:y,stat:s}

}


Zalatwia Ci wszystko co zwiazane ze sciaganiem obrazkow (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Dagger
post
Post #6





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 4.02.2003
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


A mogl bys opisac te zmienne wejsciowe (o,O,t,h) ?
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


mhm.

o - nazwa funkcji wywolywanej cyklicznie
O - nazwa funkcji wywolywanej na zakonczenie ladowania calej kolejki
t - co ile sprawdzac stan zaladowania
h- maksymalny czas oczekiwania

W Twoim wypadku tworzysz obiekt, dodajesz mu obrazek (metoda add ma dwa parametry - sciezka obrazka i jego ciezar)

Nastepnie odpalasz przez go() i sprawdzasz w pierwszej funkcji metode stat() - zwraca ona dwuelementowa tablice, ktorej pierwszy element okresla calkowity ciezar do sciagniecia, a S dotychczas sciagniety.

Zatem dla Ciebie jesli sciagnie sie jeden obrazek to S bedzie mialo wartosc ciezaru tego obrazka, jesli oba w jednym cyklu to S bedzie rowne ciezarowi obu obrazkow lacznie, a jesli zaden nie zostanie przez czas okreslony w h to wywolana zostanie funkcja O.

I na tej podstawie mozesz porownac szybkosc dzialania i sprawdzic czy stoja oba serwery.
Go to the top of the page
+Quote Post
Dagger
post
Post #8





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 4.02.2003
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


To chyba dla mnie za skomplikowane.
Osobiscie mam raczej dobre pomysly ale rozbijaja mi sie o sprawy techniczne :-(
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ehh... z palca:

Kod
var imgLoader;

var ready = false;



function start () {

  imgLoader = new AT_loader('step()','finish()',10,1000);

  imgLoader.add('http://www.onet.pl/obrazek.jpg',14326);

  imgLoader.add('http://www.wp.pl/obrazek2.jpg',14325); // wazna jest roznica

}



function step(){

  if (ready) return;

  var dwn = imgLoader.stat()[1];

  var sum = imgLoader.stat()[0];

  if (dwn == 14326) {

     alert('uwaga! szybciej sciagnal sie obrazek pierwszy');

     ready=true;

  } else if (dwn == 14325) {

     alert('uwaga! szybciej sciagnal sie obrazek drugi');

     ready=true;

  } else if (dwn == sum) {

     alert('uwaga! oba obrazki scaignely sie w tym samym takcie');

     ready=true;

  }

}

function finish() {

  var dwn = imgLoader.stat()[1];

  var sum = imgLoader.stat()[0];

  if (dwn !== sum) alert('oba serwery leza');

}
Go to the top of the page
+Quote Post
Dagger
post
Post #10





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 4.02.2003
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


Dzieki wieczorem bede to sprawdzal.
Go to the top of the page
+Quote Post
Paul
post
Post #11





Grupa: Zarejestrowani
Postów: 636
Pomógł: 0
Dołączył: 22.10.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat
da sie i jedno i drugie zrobic z poziomu JS. Koledzy, ktorzy odpowiadali przede mna - czy testowalisice i probowaliscie to uzyskacz, czy twierdziecie ze sie nie da na "pale"?

Czy ja powiedzialem, ze sie nie da (IMG:http://forum.php.pl/style_emoticons/default/angrysmiley.gif) ?
Cytat
Prostsza metoda moze za to byc ladowanie jakiegos obrazka, kilka razy dla usrednienia wynikow i porownywanie jego czasu ladowania z drugim obrazkiem...  

Czyli chodzilo mi dokladnie o to, co napisales...
Cytat
Rozwiazanie
1) Aby sprwdzic dostepnosc serwero nalezy umiescic na nich obrazek i z poziomu JS zazadac jego sciagania (x = new Image(), x.src="adres")
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


A kto sugerowal php? ;p
Go to the top of the page
+Quote Post
Paul
post
Post #13





Grupa: Zarejestrowani
Postów: 636
Pomógł: 0
Dołączył: 22.10.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


podalem poprostu kilka rozwiazan...
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


i nadal sie upierasz, ze uzycie php zwroci to czego potrzebuje autor pytania?
Go to the top of the page
+Quote Post
Paul
post
Post #15





Grupa: Zarejestrowani
Postów: 636
Pomógł: 0
Dołączył: 22.10.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Od poczatku sie nie upieralem, i sie nie upieram. EOT
Go to the top of the page
+Quote Post
Dagger
post
Post #16





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 4.02.2003
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


Wracajac do tematu...

W efekcie wyszedl mi taki skrypt:
Kod
<SCRIPT LANGUAGE="JavaScript">

var imgLoader;

var ready = false;





function AT_loader(o,O,t,h){

var p=[],A=0,S=0,i=[],r;

function d(i,W){p[p.length]=[i,W];A+=W;}

function y(){var g;

   S=0;for(g=0;g<p.length;g++)

      {

         if(!i[g]){i[g]=new Image();i[g].src=p[g][0]}

         else{(ie?i[g].complete:i[g].width>0)?S+=p[g][1]:0}

      }

eval(o);

if(S==A||(h-=t)<0){eval(O)}else{setTimeout(y,t)}

}

function s(){return [A,S]}

return {add:d,go:y,stat:s}

}

function finish() {

  var dwn = imgLoader.stat()[1];

  var sum = imgLoader.stat()[0];

  if (dwn !== sum) alert('oba serwery leza');

}

function step(){

  if (ready) return;

  var dwn = imgLoader.stat()[1];

  var sum = imgLoader.stat()[0];

  if (dwn == 14326) {

     alert('uwaga! szybciej sciagnal sie obrazek pierwszy');

     ready=true;

  } else if (dwn == 14325) {

     alert('uwaga! szybciej sciagnal sie obrazek drugi');

     ready=true;

  } else if (dwn == sum) {

     alert('uwaga! oba obrazki scaignely sie w tym samym takcie');

     ready=true;

  }

}

function start () {

  imgLoader = new AT_loader('step()','finish()',10,1000);

  imgLoader.add('http://www.coolpage.pl/1.jpg',14326);

  imgLoader.add('http://www.rip.boo.pl/1.jpg',14325); // wazna jest roznica

}





start()



</SCRIPT>


Jednak po uruchomieniu nic sie nie dzieje :-(
Gdzie popelnilem blad?
Go to the top of the page
+Quote Post
e-Gandalf
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 195
Pomógł: 0
Dołączył: 7.07.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Wszystko zrobiles OK, tylko na koncu funkcji start() nalezy jeszcze odpalic ladowanie...

Kod
imgLoader.go();


Dodatkowo, zauwazylem - jesli nie uzywasz nigdzie zmiennej |ie| okreslajacej document.all lub false, to w bibliotece zamien "ie" na "document.all" - i dziala.

Pamietaj tez, zeby obrazki mialy taki rozmiar jak podajesz
Go to the top of the page
+Quote Post
Dagger
post
Post #18





Grupa: Zarejestrowani
Postów: 156
Pomógł: 0
Dołączył: 4.02.2003
Skąd: Wejherowo

Ostrzeżenie: (0%)
-----


Fantastycznie ! Teraz dziala wszystko tak jak chcialem :-)
Dziekuje za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 10:11