2011-06-22 11 views
5

Aby uprościć moją sytuację; Mam 3 strony PHP. Dwa z nich odpowiednio dodają i usuwają wiersze z bazy danych. Trzeci pobiera wszystkie wiersze, koduje je jako JSON i drukuje wynik.Dlaczego niektóre wywołania AJAX drastycznie się kończą niż inne, gdy adresy URL mają taki sam czas odpowiedzi?

Zleciłem wykonanie wszystkich stron, których zakres wynosi od 0,001 do 0,004 sekundy. Oto czasy z Ajax wzywa jednak:

Fetch całą tabelę jako JSON: 8-12ms
Dodaj wiersz: 990-1010ms
Usuń wiersz: 990-1010ms

Czas reakcji dodatku a czasy usuwania powodują niepotrzebne spowolnienie w mojej aplikacji, biorąc pod uwagę, że czasy wykonywania PHP to zaledwie ułamki sekund, a ich wynik to po prostu "1" za sukces i "0" za porażkę (w porównaniu z wywołaniem pobierania, które drukuje do 100 wierszy (~ 10 kolumn) danych jako JSON)

Wszystkie moje czasy zwrotu Ajax mierzy się w Firebug. Wszystkie połączenia Ajax są wykonywane za pośrednictwem jQuery ($.ajax()).

Zgaduję, że ma to coś wspólnego z Firefoksem, nie biorąc pod uwagę odpowiedzi na żądanie GET, chyba że otrzymał określoną liczbę bajtów lub znaków, a 1 sekundowy czas odpowiedzi jest pewnego rodzaju przekroczeniem czasu.

Czy są jakieś mądrości, którymi można się podzielić w tej kwestii?


ja timed czasy ładowania AJAX w Chrome i Opera, a także (średnie):

Opera:
* Wszystkie AJAX wzywa ~ 15 ms

Chrome:
* Usuń wiersza i pobierania wierszy: ~ 25ms
* Dodaj wiersz: ~ 350ms

Moja aplikacja jest szybka i responsywna w Operze, ale powolna dla w różnym stopniu we wszystkich innych przeglądarkach. Dokładnie dlaczego wciąż jest dla mnie niejasna.


Zmierzyłem również IE 9, który działa praktycznie identycznie jak Opera. Moja aplikacja działa teraz szybko w dwóch przeglądarkach.

+0

Czy umieścisz kod (PHP, HTML, JavaScript i MySQL)? Jak duża jest baza danych? (Liczba wierszy) –

+0

Ryan Doherty: Obawiam się, że nie mogę, bo to zastrzeżony projekt. Podsumowałem już czasy wykonania PHP w pytaniu, które zawiera kwerendy MySQL i wyklucza PHP jako przyczynę 1 sekundowego opóźnienia. Jakieś konkretne fragmenty kodu, które chciałbyś zobaczyć Jestem pewien, że mogę to zrobić. – Hubro

+0

Czy próbowałeś mierzyć czas ładowania każdej strony, gdy jest to wymagane bezpośrednio, a nie przez ajax? PHP ma trochę na głowie, zanim twój skrypt zostanie uruchomiony (bardziej, jeśli używasz jakiegoś rodzaju frameworku). –

Odpowiedz

1

Wygląda na to, że niektóre przeglądarki doświadczają tajemniczych efektów ubocznych związanych z używaniem localhost zamiast 127.0.0.1 w adresie URL. Dodatkowa pełna sekunda opóźnienia była jedną z nich. Użycie adresu 127.0.0.1 rozwiązało problem.

+0

brzmi jak problem z DNS –

+0

Czy nadal może to być problem z DNS, jeśli działa inaczej w większości każdej przeglądarki? – Hubro

+1

Jest mniej prawdopodobne, ale wciąż możliwe, ponieważ przeglądarki wykorzystują własną pamięć podręczną DNS i podobne rzeczy (mówię tylko, że przeglądarki * nie * używają po prostu 'gethostbyname()' systemu) –

0

będzie lepiej, jeśli użyjesz HTTPWatch. To powie Ci dokładny czas wszystkich plików js i css i renderowania strony itp. W ten sposób możesz zanalizować, które połączenie zabiera więcej czasu i dlaczego nie. na pewno odpowiedziałem na twoje pytanie, ale mam nadzieję, że możesz uzyskać pomoc od HTTPWatch.

Here Masz dobry artykuł, który powie Ci, jak poprawić wydajność witryny, minimalizując czas żądania.

-1

nie mam informacji, aby oprzeć, ale zgaduję teraz jest jednym z tych winowajców:

  • Powolne disk (s) - dodawanie i usuwanie wierszy może wymagać więcej dostępu do dysku niż czyta (plus MySQL może być robi buforowania zapytań)
  • indeksów - MySQL musi aktualizować to indeksy gdy kolumna jest zmienione lub dodane

Blokowanie że należy profil kodu. Użyj xdebug i/lub uruchom zapytania MySQL bezpośrednio przez MySQL, aby zobaczyć, ile czasu trwają.

+0

W moim pytaniu wykluczam MySQL lub PHP jako przyczynę opóźnienia. To musi być spowodowane przez Apache lub Firefox. – Hubro

+0

Jak je wykluczyć? Czy testowałeś swoje zapytania indywidualnie? Czy profilowałeś swój PHP? Czy uruchomiłeś wywołania AJAX bez sprawdzania bazy danych? –

+0

Po prostu wyliczyłem czas wykonania PHP dla każdej ze stron od początku do końca. – Hubro

Powiązane problemy