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 |
|
|
|
![]() |
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...
|
|
|
|
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) |
|
|
|
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) |
|
|
|
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) |
|
|
|
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) ?
|
|
|
|
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. |
|
|
|
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 :-( |
|
|
|
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'); } |
|
|
|
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.
|
|
|
|
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") |
|
|
|
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
|
|
|
|
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...
|
|
|
|
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?
|
|
|
|
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
|
|
|
|
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? |
|
|
|
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 |
|
|
|
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. |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 10:11 |