2009-10-27 13 views
19

Miałem nadzieję, że ktoś może odpowiedzieć na podstawowe pytanie dotyczące odświeżenia strony internetowej.Co stanie się, gdy odświeżymy stronę internetową?

Mam internetowy formularz dotnet, w którym użytkownik wypełnia pewne szczegóły i kliknięcia przesyła. Kod podany na stronie ma około 20 funkcji do wykonania.

Zakładając, że kiedy użytkownik kliknie przycisk "Wyślij", strona internetowa wykonuje piątą funkcję, a tymczasem użytkownik odświeża swoją przeglądarkę;

Co stanie się z już przetwarzaną stroną? Czy strona zostanie natychmiast zamknięta? , czy może będzie działać, dopóki nie spełni 20. funkcji? lub czy działająca strona zostanie zniszczona, a nowa strona zostanie utworzona i wysłana do klienta?

Dzięki za odpowiedzi.

Odpowiedz

15

Po otrzymaniu wniosku do serwera z przeglądarki strona jest przetwarzana. Nawet jeśli użytkownik anuluje lub zatrzyma żądanie, serwer kontynuuje przetwarzanie żądania. Jeśli użytkownik ponownie załaduje/odświeży stronę, jest to kolejne żądanie, które zostanie wykonane równolegle z pierwszym żądaniem.

Nawet w przypadku PHP serwer nie aktywnie sprawdza, czy połączenie jest user has aborted. Serwer wie tylko, że został przerwany, gdy próbuje zwrócić wyniki żądania.

Internet jest odłączonym środowiskiem. Serwer nie wie nic o przeglądarce. Jedyną rzeczą, o której wie serwer, jest żądanie i musi wypełnić żądanie.

0

Po prostu strona, którą użytkownik widzi, jest tracona, chyba że w sesji, nie może jej ponownie odebrać. Ale serwer nie wie, że użytkownik rozłączył się, więc aplikacja będzie nadal działać, chyba że w aplikacji zostanie użyta sesja/limit czasu, nawet wtedy byłoby nieparzyste, gdyby sesja nie została zakończona.

Mam nadzieję, że to pomoże.

RE

0

Wykonanie kodu będzie kontynuowane do końca.

+0

hmmm ... czy podać odniesienie do tego roszczenia? – jldupont

+0

@Dani - nieprawda. przynajmniej dla PHP wiem. – mauris

+1

dla asp.net robi to, przynajmniej gdy przypadkowo uderzyłem odświeżenie strony, gdy serwer utknął na długiej operacji, widzę, że kończy on cały kod, a dopiero potem ponownie ładuje stronę. – Dani

0

Wierzę, że strona internetowa (po stronie klienta oczywiście) jest wykonywana w jednym wątku pojedynczego wątku. Jeśli twój "onsubmit" wywoła szlak funkcji, to zależy od ciebie, ale w pewnym momencie będziesz (może) chciał (a) chcesz przesłać() formularz.

Innymi słowy (w konkretnym przypadku), wszystkie ścieżki funkcji będą kontynuowane do momentu wysłania formularza.

Z drugiej strony, jeśli naciśniesz przycisk "przeładuj", wykonanie zostanie zakończone zakończone.

2

Po odświeżeniu strony w przeglądarce przeglądarka wywołuje serwer dla nowej kopii strony i jej składników (CSS, JS itd., Jeśli nie jest buforowana).

Jeśli strona była połączeniem POST, przeglądarka ponownie prześle dane.

strona zakończyła załadowany:

Po załadowaniu całkowicie, wykonanie po stronie serwera powinny być zakończone (chyba że wykonanie dodatkowych procesów lub uruchomić kod tła, które nie wysyłają już danych do klienta).

strona się ładuje połowie:

podłączenie do bieżącej strony zostanie natychmiast odłączone - jeśli strona jest wciąż załadunku. Zależy od serwera, czy strona ma nadal działać, czy zakończyć. Na przykład w PHP możemy zignorować_użytkownik(), aby skrypt działał, nawet jeśli strona została zakończona w połowie ładowania.

Jeśli twój serwer to ASP i klikniesz na przycisk ASP, akcja (metoda) przycisku zostanie wykonana całkowicie po stronie serwera, nawet jeśli użytkownik odświeży do połowy. Tak tworzy się środowisko ASP.NET.

+1

Po wysłaniu strony do przeglądarki klienta, serwer nie ma nic wspólnego z ** dopóki ** klient nie chce zrobić czegoś innego. – jldupont

+0

Oczywiście serwer może powstrzymać klienta, opóźniając wysyłanie końca strumienia danych ... ale to już inna historia. – jldupont

+0

@jldupont - podczas ładowania strony (zawartość strony - nie zewnętrzne komponenty) serwer nadal ma połączenie z klientem. – mauris

0

wszystkie funkcje zostaną wykonane, nawet jeśli masz odświeżenie, możesz wykonać test. ale w .net zapewnia funkcję sprawdzania, czy klient jest nadal połączony z serwerem (przy pierwszym przesłaniu oznacza to, że serwer może sprawdzić, czy klient czeka na odpowiedź w dowolnym momencie po przesłaniu)

Powiązane problemy