How to implement COMET with PHP
How to implement COMET with PHP
How to implement COMET with PHP
Comet is a programming technique that enables web servers to send data to the client without having any need for the client to request it. This technique will produce more responsive applications than classic AJAX. In classic AJAX applications, web browser (client) cannot be notified in real time that the server data model has changed. The user must create a request (for example by clicking on a link) or a periodic AJAX request must happen in order to get new data fro the server.
I will now explain how to implement Comet with PHP programming language. I will demonstrate it on two demos which uses two techniques: the first one is based on hidden "
Uso errato di timer in Javascript
Uso errato di timer in Javascript cause utilizzo della CPU per aumentare browser
da Viper 16. luglio 2009 05:08
Stavo studiando un problema su un sito. In determinate condizioni, la pagina web stava diventando insensibile e utilizzo della CPU sulla macchina è stato il montaggio a 100% e rendendo la macchina inutilizzabile. Non riuscivo a riprodurre il problema facilmente. Dopo aver chiesto alcune domande più all'utente, ho scoperto che stava accadendo quando l'utente è venuto alla pagina dopo aver cliccato sul link da una certa pagina. E c'era un altro problema essere visto alcuni utenti. Se lasciano la pagina aperta tutta la notte, dal tempo mattina l'uso della memoria nel browser era aumentato a più di 150 MB, l'utilizzo della CPU è stata vicina al 50% e la macchina era molto lento. Dopo aver ucciso l'istanza del browser, la macchina è diventato normale.
Dopo aver investigato realizzazione della pagina, ho visto che c'era molta asincrona (AJAX) tipo di implementazione. La pagina è stata sempre più parti della risposta data dal server a intervalli diversi di volte. Dopo aver esaminato i javascript nella pagina, ho visto ci sono stati molti di utilizzo di setTimeout e setInterval funzioni per fare cose come, zecche orologio, richiesta di dati dal server, ecc ho notato che in un flusso di lavoro c'era seguente pezzo di codice.
doTickTock funzione () {myTimer = setTimeout ("doTickTock ()", 1000);}
Questo codice è stata chiamata al metodo ogni secondo. Ci sono stati alcuni problemi con questo pezzo di codice. Discuterò quei po 'più tardi. Ho creato una piccola pagina con poche righe di javascript per simulare il codice. Ecco quel pezzo di codice.
Quando ho usato clockTick1 () metodo, l'utilizzo della CPU mia macchina è montato al 75% in circa 15 secondi e poi macchina è diventato così lento che ho dovuto ucciderlo. Ma quando ho usato clockTick2 () metodo, non ho visto alcun comportamento pigro. Per capire questo comportamento, si dovrebbe conoscere la differenza tra setInterval e setTimeout metodi. setInterval chiama la funzione passata come primo parametro dopo ogni intervallo di tempo che è passato come secondo parametro. Così è la creazione di un timer che spunta a intervalli fissi. Dove, come setTimeout chiama solo il metodo di una volta dopo l'intervallo di tempo. Così, quando ho usato clockTick1 , ogni secondo è stato chiamato il metodo. Ma c'era una cosa negativa che stava facendo. Ha generato un altro timer per chiamare lo stesso metodo ogni secondo. Così il numero dei timer attivi stavano aumentando in modo esponenziale. E hanno portato il browser di fermarsi. Ciò che questo pezzo di codice non ha fatto è stato quello di chiamare clearInterval di distruggere il timer precedente prima di crearne uno nuovo. Quindi, il codice dovrebbe avere sembrava come di seguito.
clockTick1 funzione () {document.getElementById ("clientClockSpan") innerHTML = new Date () toTimeString ();.. if (clockTimer = null) {clearInterval (clockTimer); clockTimer = null;} clockTimer = setInterval ("clockTick1 ( ) ", 1000);}
Noterete che ho seguito le migliori pratiche di impostazione del timer per nulla oggetto di smaltire fuori. Se non lo facciamo, il garbage collector riproponga questi timer inutilizzato, ma lo farà quando il suo corre la prossima volta. Ma per quel periodo di tempo, si può osservare una maggiore utilizzo della memoria da parte del browser insieme ad elevato utilizzo di maniglie dell'oggetto. L'utilizzo di ben maniglie è importante perché se non vengono recuperati rapidamente il vostro browser potrebbe iniziare a diventare pigro. Quindi, il trattamento di questi timer con molta attenzione.
Anche nella funzione in cui setTimeout viene utilizzato, lo rendono una pratica per oggetto timer chiaro prima di un nuovo alto.
da Viper 16. luglio 2009 05:08
Stavo studiando un problema su un sito. In determinate condizioni, la pagina web stava diventando insensibile e utilizzo della CPU sulla macchina è stato il montaggio a 100% e rendendo la macchina inutilizzabile. Non riuscivo a riprodurre il problema facilmente. Dopo aver chiesto alcune domande più all'utente, ho scoperto che stava accadendo quando l'utente è venuto alla pagina dopo aver cliccato sul link da una certa pagina. E c'era un altro problema essere visto alcuni utenti. Se lasciano la pagina aperta tutta la notte, dal tempo mattina l'uso della memoria nel browser era aumentato a più di 150 MB, l'utilizzo della CPU è stata vicina al 50% e la macchina era molto lento. Dopo aver ucciso l'istanza del browser, la macchina è diventato normale.
Dopo aver investigato realizzazione della pagina, ho visto che c'era molta asincrona (AJAX) tipo di implementazione. La pagina è stata sempre più parti della risposta data dal server a intervalli diversi di volte. Dopo aver esaminato i javascript nella pagina, ho visto ci sono stati molti di utilizzo di setTimeout e setInterval funzioni per fare cose come, zecche orologio, richiesta di dati dal server, ecc ho notato che in un flusso di lavoro c'era seguente pezzo di codice.
doTickTock funzione () {myTimer = setTimeout ("doTickTock ()", 1000);}
Questo codice è stata chiamata al metodo ogni secondo. Ci sono stati alcuni problemi con questo pezzo di codice. Discuterò quei po 'più tardi. Ho creato una piccola pagina con poche righe di javascript per simulare il codice. Ecco quel pezzo di codice.
Quando ho usato clockTick1 () metodo, l'utilizzo della CPU mia macchina è montato al 75% in circa 15 secondi e poi macchina è diventato così lento che ho dovuto ucciderlo. Ma quando ho usato clockTick2 () metodo, non ho visto alcun comportamento pigro. Per capire questo comportamento, si dovrebbe conoscere la differenza tra setInterval e setTimeout metodi. setInterval chiama la funzione passata come primo parametro dopo ogni intervallo di tempo che è passato come secondo parametro. Così è la creazione di un timer che spunta a intervalli fissi. Dove, come setTimeout chiama solo il metodo di una volta dopo l'intervallo di tempo. Così, quando ho usato clockTick1 , ogni secondo è stato chiamato il metodo. Ma c'era una cosa negativa che stava facendo. Ha generato un altro timer per chiamare lo stesso metodo ogni secondo. Così il numero dei timer attivi stavano aumentando in modo esponenziale. E hanno portato il browser di fermarsi. Ciò che questo pezzo di codice non ha fatto è stato quello di chiamare clearInterval di distruggere il timer precedente prima di crearne uno nuovo. Quindi, il codice dovrebbe avere sembrava come di seguito.
clockTick1 funzione () {document.getElementById ("clientClockSpan") innerHTML = new Date () toTimeString ();.. if (clockTimer = null) {clearInterval (clockTimer); clockTimer = null;} clockTimer = setInterval ("clockTick1 ( ) ", 1000);}
Noterete che ho seguito le migliori pratiche di impostazione del timer per nulla oggetto di smaltire fuori. Se non lo facciamo, il garbage collector riproponga questi timer inutilizzato, ma lo farà quando il suo corre la prossima volta. Ma per quel periodo di tempo, si può osservare una maggiore utilizzo della memoria da parte del browser insieme ad elevato utilizzo di maniglie dell'oggetto. L'utilizzo di ben maniglie è importante perché se non vengono recuperati rapidamente il vostro browser potrebbe iniziare a diventare pigro. Quindi, il trattamento di questi timer con molta attenzione.
Anche nella funzione in cui setTimeout viene utilizzato, lo rendono una pratica per oggetto timer chiaro prima di un nuovo alto.
Iscriviti a:
Commenti (Atom)