Asynchroniczne wywołania - AJAX

Wszystko związane ze skryptami JS, DHTML itd.
webdis
Posty: 181
Rejestracja: 20 sty 2009, 10:40:52
Strona na CBA.pl: www.webdis.cba.pl
Płeć: Niewybrana
User Agent: Firefox Windows 1400x1050
Kontakt:

Asynchroniczne wywołania - AJAX

Post autor: webdis »

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?
monk
Posty: 556
Rejestracja: 11 sty 2009, 12:14:57
Płeć: Niewybrana
User Agent: Firefox Windows 1152x864

Re: Asynchroniczne wywołania - AJAX

Post autor: monk »

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).
webdis
Posty: 181
Rejestracja: 20 sty 2009, 10:40:52
Strona na CBA.pl: www.webdis.cba.pl
Płeć: Niewybrana
User Agent: Firefox Windows 1400x1050
Kontakt:

Re: Asynchroniczne wywołania - AJAX

Post autor: webdis »

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.
Akronim AJAX rozwija nazwę Asynchroniczny JavaScript i XML (Asynchronous JavaScript and XML).
monk
Posty: 556
Rejestracja: 11 sty 2009, 12:14:57
Płeć: Niewybrana
User Agent: Firefox Windows 1152x864

Re: Asynchroniczne wywołania - AJAX

Post autor: monk »

Na pewno nie 30 razy w ciągu sekundy :P 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:

Kod: Zaznacz cały

$rand = SHA1(MD5(time() . rand(0,99999999))); 
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 :P

Poza tym pobieranie danych przez AJAX nic nie różni się ze strony serwera od innych metod. To stuprocentowy client-side.
webdis
Posty: 181
Rejestracja: 20 sty 2009, 10:40:52
Strona na CBA.pl: www.webdis.cba.pl
Płeć: Niewybrana
User Agent: Firefox Windows 1400x1050
Kontakt:

Re: Asynchroniczne wywołania - AJAX

Post autor: webdis »

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 ;).
monk
Posty: 556
Rejestracja: 11 sty 2009, 12:14:57
Płeć: Niewybrana
User Agent: Firefox Windows 1152x864

Re: Asynchroniczne wywołania - AJAX

Post autor: monk »

Warto też zabezpieczyć się i rozpoznawać błędy MySQL żeby skrypt Ci jakiejś wiochy nie odwalił tylko wysłał do klienta np.:

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> 
Wtedy to wygląda profesjonalnie ;)
webdis
Posty: 181
Rejestracja: 20 sty 2009, 10:40:52
Strona na CBA.pl: www.webdis.cba.pl
Płeć: Niewybrana
User Agent: Firefox Windows 1400x1050
Kontakt:

Re: Asynchroniczne wywołania - AJAX

Post autor: webdis »

Mam to na względzie. Jeśli nie będe miał zabezpieczenia przed takimi błędami, wtedy posypią się alert-y, a to źle ;).
ODPOWIEDZ