2009-10-27 4 views
19

Speravo che qualcuno potesse rispondere a una domanda fondamentale riguardante l'aggiornamento di una pagina web.Cosa succede quando aggiorniamo una pagina web?

Ho un webform dotnet in cui un utente inserisce alcuni dettagli e fa clic su Invia. Il codice dietro la pagina web ha circa 20 funzioni da eseguire.

Ora assumendo che quando l'utente fa clic sul pulsante di invio, la pagina Web esegua la quinta funzione e nel frattempo l'utente aggiorna il proprio browser;

Cosa accadrà alla pagina già in elaborazione? La pagina verrà terminata immediatamente? o sarà permesso di funzionare fino a quando non viene eseguita la 20a funzione? o la pagina in esecuzione verrà distrutta e una nuova pagina creata e inviata al client?

Grazie per le vostre risposte.

risposta

15

Una volta che una richiesta viene effettuata al server dal browser la pagina viene elaborata. Anche se l'utente annulla o interrompe la richiesta, il server continua a elaborare la richiesta. Se l'utente ricarica/aggiorna la pagina, è un'altra richiesta che verrà eseguita in parallelo con la prima richiesta.

Anche nel caso di PHP, il server non sta controllando attivamente se la connessione è user has aborted. Il server sa solo che è stato interrotto quando tenta di restituire i risultati della richiesta.

Internet è un ambiente disconnesso. Il server non sa nulla del browser. L'unica cosa che il server sa è che è stata fatta una richiesta e che deve riempire la richiesta.

0

Semplicemente, la pagina che l'utente sta vedendo è persa a meno che durante la sessione non possano riprenderla. Ma il server non sa che l'utente si è disconnesso, quindi l'applicazione continuerà a funzionare, a meno che non ci sia una sessione/timeout sull'applicazione, anche allora sarebbe strano se la sessione non fosse stata completata.

Spero che questo aiuti.

RE esecuzione

0

Il codice continuerà fino alla fine.

+0

hmmm ... cura di fornire un riferimento a questo reclamo? – jldupont

+0

@Dani - non vero. almeno per PHP lo so. – mauris

+1

per asp.net lo fa, almeno quando accidentalmente colpisco l'aggiornamento sulla pagina mentre il server era bloccato su una lunga operazione, vedo che completa tutto il codice e solo poi ricarica la pagina. – Dani

0

Credo che una pagina Web (sul lato client ovviamente) sia eseguita in un thread singolo. Se il tuo "onsubmit" chiama una scia di funzioni, dipende da te, ma ad un certo punto ti verrà (forse) voglia di submit() il modulo.

In altre parole (nel caso specifico), , il percorso della funzione continuerà fino a quando il modulo non viene inviato.

D'altra parte, se si preme il pulsante "ricarica", l'esecuzione è terminata.

2

Quando una pagina viene aggiornata nel browser, il browser chiama il server per una nuova copia della pagina e dei suoi componenti (CSS, JS e così via ... se non viene memorizzato nella cache).

Se la pagina era una chiamata POST, il browser POSTerà nuovamente i dati.

pagina ha completato caricato:

volta caricato completamente, l'esecuzione sul lato server dovrebbe essere completato (a meno che non si esegue processi aggiuntivi, o codici sfondo familiare che non invierà più dati al client).

La pagina viene caricata a metà:

Il collegamento per la pagina corrente sarà immediatamente scollegato - se la pagina è ancora carico. Dipende dal server se la pagina può continuare a funzionare o terminare. Ad esempio in PHP possiamo ignorare_user_abort() per mantenere lo script in esecuzione anche se la pagina è stata terminata a metà del caricamento.

Se il server è ASP e si fa clic su un pulsante ASP, l'azione (metodo) del pulsante verrà eseguita completamente sul lato server anche se l'utente si aggiorna a metà. Ecco come viene fatto il framework ASP.NET.

+1

Una volta che una pagina viene inviata al browser client, il server non ha nulla a che fare con ** fino a ** il cliente desidera fare qualcos'altro. – jldupont

+0

Ovviamente il server può trattenere il lato client ritardando l'invio della fine del flusso di dati ... ma questa è un'altra storia. – jldupont

+0

@jldupont - mentre la pagina si sta caricando (il contenuto della pagina - non i componenti esterni), il server ha ancora la connessione con il client. – mauris

0

tutte le funzioni verranno eseguite, anche se si è aggiornato, è possibile eseguire un test. ma in .net fornisce una funzione per verificare se il client è ancora connesso al server (per il tuo primo invio, significa che il server può controllare se il client è in attesa della risposta in qualsiasi momento dopo l'invio)