Obliczanie szybkości internetu w Ajax - zły czas

0

Napisałem skrypt obliczający szybkość pobierania 1024*1024 znaków, ale coś jest nie tak z róznicą czasu - zamiast około 9 sekund jest 0.014 sekundy. Gdzie się pomyliłem?

function predkosc() {
	var obiektAjax=false,element2=document.getElementById('szybkosc'),ilosc,czas1,czas2,czas3,tekst8;

	if (window.XMLHttpRequest){
	   obiektAjax = new XMLHttpRequest();
	}
	else if (window.ActiveXObject){
	   obiektAjax = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if(obiektAjax){
		obiektAjax.open("POST","dane.txt",false);
		obiektAjax.onreadystatechange=function()
		{
			if(obiektAjax.readyState==4&&obiektAjax.status==200) {
				czas1=new Date();
				element2.innerHTML=obiektAjax.responseText;
				czas2=new Date();
				czas1=czas1.getTime();
				czas2=czas2.getTime();
				czas3=czas2-czas1;
				ilosc=((1000*1024)/czas3)*8;
				ilosc=ilosc.toFixed(1);
				element2.innerHTML="";
				text8=document.createTextNode(ilosc+" kB/s");
				element2.appendChild(text8);
		   }
		}
		obiektAjax.send(null);
	}
}
0

Liczysz czas przypisywania wartości (element2.innerHTML=obiektAjax.responseText;), a nie pobierania jej.

0

Szybkości internatu na 100% jest zawsze zero, no chyba że - "... internat jest na pokładzie statku ...".

0

Już dałem radę sam - oto wynik www.ipmoje.za.pl

1

Co ty pingiem mierzysz maksymalny transfer? o.O

To są dwa różne pojęcia.

Serwer może mi zacząć odpowiadać po 2 sekundach, ale net może zasuwać 100Mbit/s
Równie dobrze, serwer może odpowiadać po 20ms, ale maksymalny transfer nie przekroczy dwóch megabitów.

Edit:
Zobrazuję Ci to:

To, że Maciek jest w stanie wsiąść na rower i ruszyć z miejsca w 2 sekundy, nie oznacza, że dojedzie do celu szybciej niż Rafał, który wprawdzie wsiada na rower 4 sekundy, ale lepiej pedałuje i potem jedzie 40km/h, podczas gdy Maciek jedynie 20km/h.

Edit, mniej na temat:

2 Errors, 5 warning(s) found while checking this document as HTML5!

0

Dlaczego readyState nigdy nie równa się 3?

function predkosc() {
	var obiektAjax=false,element2=document.getElementById('szybkosc'),element3=document.getElementById('aktualnyCzas'),ilosc,czas1,czas2,czas3,tekst8;

	if(window.XMLHttpRequest) {
	   obiektAjax=new XMLHttpRequest();
	}
	else if(window.ActiveXObject) {
	   obiektAjax=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if(obiektAjax){
		obiektAjax.open("POST","1.mp3",false);		
		obiektAjax.onreadystatechange=function()
		{
			if(obiektAjax.readyState==3) {
				czas1=new Date();
			}
			else if(obiektAjax.readyState==4) {
				czas2=new Date();	
				czas1=czas1.getTime();
				czas2=czas2.getTime();
				czas3=czas2-czas1;
				ilosc=((1983939*8*1000)/czas3)/(1000*1000);
				ilosc=ilosc.toFixed(4);
				element2.innerHTML="";
				text8=document.createTextNode("około "+ilosc+" megabitów na sekundę");
				element2.appendChild(text8);			
				aktualnaData();
		   }
		}
		obiektAjax.send(null);
	}
}
0

readyState jest 3, jeżeli serwer zwraca odpowiedź częściami i jedna z części przyjdzie od serwera.

0

To wiem, ale w tym kodzie zawsze jest readyState 1 lub 4 - nigdy 2 lub 3. Dlaczego?

0

Bo Twój kod nigdy nie zwraca częściowych odpowiedzi, tylko zawsze w całości?

0

Ale nawet tak nie działa

	if(obiektAjax){
		obiektAjax.open("POST","1.mp3",false);		
		obiektAjax.onreadystatechange=function()
		{
			if(obiektAjax.readyState!=4) {
				czas1=new Date();
			}
			else {
				czas2=new Date();	
				czas1=czas1.getTime();
				czas2=czas2.getTime();
				czas3=czas2-czas1;
				ilosc=((1983939*8*1000)/czas3)/(1000*1000);
				ilosc=ilosc.toFixed(4);
				element2.innerHTML="";
				text8=document.createTextNode("około "+ilosc+" megabitów na sekundę");
				element2.appendChild(text8);			
				aktualnaData();
		   }
		}
		obiektAjax.send(null);
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1