Asynchroniczne wywołania - AJAX
-
- Posty: 181
- Rejestracja: 20 sty 2009, 10:40:52
- Strona na CBA.pl: www.webdis.cba.pl
- Płeć:
- User Agent:
- Kontakt:
Asynchroniczne wywołania - AJAX
Witam.
Mam pytanie głównie do administracji serwisu. Otóż AJAXuję swoją stronę tak, by możliwie zmniejszyć konieczność przeładowywania strony. W związku z tym mam pytanie: jaki jest dopuszczalny czas użycia funkcji timeout() wysyłającej asynchroniczne zapytanie do skryptu PHP wykonującego ok. 5 zapytań SQL i odsyłującego wynik w postaci XML?
Mam pytanie głównie do administracji serwisu. Otóż AJAXuję swoją stronę tak, by możliwie zmniejszyć konieczność przeładowywania strony. W związku z tym mam pytanie: jaki jest dopuszczalny czas użycia funkcji timeout() wysyłającej asynchroniczne zapytanie do skryptu PHP wykonującego ok. 5 zapytań SQL i odsyłującego wynik w postaci XML?
Re: Asynchroniczne wywołania - AJAX
1. Po co Ci XML, jeśli zamiast katować dane po stronie klienta i serwera z równym okrucieństwem, możesz po prostu od razu przygotować gotowy wynik HTML i go wysłać.
2. Dopuszczalny czas 'wiszenia' ajaxowego żądania jest nieokreślony, chyba że ktoś mądry ustali go z góry. Czas wykonywania skryptu PHP to 30 sekund, ale można go zwiększyć funkcją set_timeout(), o ile sam jej nie umieściłem w spisie zabronionych dyrektyw (poszukaj w FAQ w temacie w/w, bo nie pamiętam).
2. Dopuszczalny czas 'wiszenia' ajaxowego żądania jest nieokreślony, chyba że ktoś mądry ustali go z góry. Czas wykonywania skryptu PHP to 30 sekund, ale można go zwiększyć funkcją set_timeout(), o ile sam jej nie umieściłem w spisie zabronionych dyrektyw (poszukaj w FAQ w temacie w/w, bo nie pamiętam).
-
- Posty: 181
- Rejestracja: 20 sty 2009, 10:40:52
- Strona na CBA.pl: www.webdis.cba.pl
- Płeć:
- User Agent:
- Kontakt:
Re: Asynchroniczne wywołania - AJAX
1. XML jest tworzony w PHP za pomocą echo, a nie DOMDocument i jest tworzony głównie po to, by dane miały przejrzystą strukturę.
Poza tym XML jest elementem technologii AJAX.
2. Chyba mnie nie zrozumiałeś i nie za bardzo wiesz o co chodzi w AJAXowym wywoływaniu funkcji. Np. nasza-klasa korzysta z technologii AJAX, by pokazać kto ze znajomych aktualnie jest zalogowany w serwisie. Nie było by to możliwe, gdyby właśnie nie AJAX i asynchroniczne wywołanie zapytań. Jeśli chodzi o wywołanie skryptu PHP, to nie mieści się on nawet w połowie sekundy. Funkcja timeout w JavaScript służy do powtórzenia danej funkcji (w moim przypadku o ponowne załadowanie dynamicznych treści z serwera) bez przeładowywania strony.
Aby wyjaśnić sens mojego pytania opiszę cały proces, któego pytanie dotyczy:
1. Użytkownik wchodzi na stronę, w tym momencie skrypt ładuje dynamiczne dane do odpowiednich divów (JS).
2. Co jakiś czas (właśnie ów timeout()) JavaScript wykonuje następujące operacje:
- wysyła żądanie w tle (bez przeładowania strony) do skryptu PHP z prośbą o przesłanie aktualnych danych
- skrypt PHP generuje odpowiedni plik XML i odsyła odpowiedź do JS
- JS zamienia zawartości odpowiednich DIVów na aktualne dane
- i tak co pewien czas
3. Cały proces odbywa się bez wiedzy użytkownika i bez przeładowania strony
Pytanie moje dotyczy właśnie tego, jak często mogę wysyłać przez JS żądania nie ryzykując blokady konta.
Poza tym XML jest elementem technologii AJAX.
2. Chyba mnie nie zrozumiałeś i nie za bardzo wiesz o co chodzi w AJAXowym wywoływaniu funkcji. Np. nasza-klasa korzysta z technologii AJAX, by pokazać kto ze znajomych aktualnie jest zalogowany w serwisie. Nie było by to możliwe, gdyby właśnie nie AJAX i asynchroniczne wywołanie zapytań. Jeśli chodzi o wywołanie skryptu PHP, to nie mieści się on nawet w połowie sekundy. Funkcja timeout w JavaScript służy do powtórzenia danej funkcji (w moim przypadku o ponowne załadowanie dynamicznych treści z serwera) bez przeładowywania strony.
Aby wyjaśnić sens mojego pytania opiszę cały proces, któego pytanie dotyczy:
1. Użytkownik wchodzi na stronę, w tym momencie skrypt ładuje dynamiczne dane do odpowiednich divów (JS).
2. Co jakiś czas (właśnie ów timeout()) JavaScript wykonuje następujące operacje:
- wysyła żądanie w tle (bez przeładowania strony) do skryptu PHP z prośbą o przesłanie aktualnych danych
- skrypt PHP generuje odpowiedni plik XML i odsyła odpowiedź do JS
- JS zamienia zawartości odpowiednich DIVów na aktualne dane
- i tak co pewien czas
3. Cały proces odbywa się bez wiedzy użytkownika i bez przeładowania strony
Pytanie moje dotyczy właśnie tego, jak często mogę wysyłać przez JS żądania nie ryzykując blokady konta.
Akronim AJAX rozwija nazwę Asynchroniczny JavaScript i XML (Asynchronous JavaScript and XML).
Re: Asynchroniczne wywołania - AJAX
Na pewno nie 30 razy w ciągu sekundy Staraj się wprowadzać losowe wartości, czyli np:
http://wklejto.cba.pl/?ajax=1&uniq=123
Gdzie zamiast 123 można taką funkcją PHP wygenerować losowy ciąg:
Wtedy nie powinieneś zostać zbanowany za pytanie o TO SAMO. Łączenie z jednego IP co sekundę-dwie w celu pobrania dokumentu to jeszcze nie flooding. Zmyliło mnie trochę to, że ty zamiast setTimeout powiedziałeś timeout
Poza tym pobieranie danych przez AJAX nic nie różni się ze strony serwera od innych metod. To stuprocentowy client-side.
http://wklejto.cba.pl/?ajax=1&uniq=123
Gdzie zamiast 123 można taką funkcją PHP wygenerować losowy ciąg:
Kod: Zaznacz cały
$rand = SHA1(MD5(time() . rand(0,99999999)));
Poza tym pobieranie danych przez AJAX nic nie różni się ze strony serwera od innych metod. To stuprocentowy client-side.
-
- Posty: 181
- Rejestracja: 20 sty 2009, 10:40:52
- Strona na CBA.pl: www.webdis.cba.pl
- Płeć:
- User Agent:
- Kontakt:
Re: Asynchroniczne wywołania - AJAX
Dzięki za wyjaśnienia. Myślę jednak, że pozostanę przy 30 sekundach. To na pewno nie obciąży serwera tym bardziej, że mój skrypt generujący XML opiera się ściśle o zapytania SQL, a jak wiadomo ostatnio są zwisy bazy. Nie chcę jej nadmiernie przeciążać. Co do funkcji setTimeout, to nie korzystam z niej prawie wcale, stąd taki mały błąd w nazwie .
Re: Asynchroniczne wywołania - AJAX
Warto też zabezpieczyć się i rozpoznawać błędy MySQL żeby skrypt Ci jakiejś wiochy nie odwalił tylko wysłał do klienta np.:
Wtedy to wygląda profesjonalnie
Kod: Zaznacz cały
<xml><error>Przepraszamy, serwer jest przeciążony...<br>Błąd MySQL: (tu błąd; daje go funkcja mysql_error())</error></xml>
-
- Posty: 181
- Rejestracja: 20 sty 2009, 10:40:52
- Strona na CBA.pl: www.webdis.cba.pl
- Płeć:
- User Agent:
- Kontakt:
Re: Asynchroniczne wywołania - AJAX
Mam to na względzie. Jeśli nie będe miał zabezpieczenia przed takimi błędami, wtedy posypią się alert-y, a to źle .