2011-07-09 2 views

Répondre

2

Wipe balise script

PS: Lorsque vous souhaitez effacer les balises de script, il est probablement suivre Does comet server data in the iframe just accumulate?

Je crois que vous devriez close the connection after sometime (pas bon, voir Does comet server data in the iframe just accumulate? à la place) qui libère automatiquement la mémoire associée à cette requête. Vous devez ensuite vous reconnecter. This page dit autre chose même:

"page streaming" signifie que le navigateur découvre serveur change presque immédiatement. Cela ouvre la possibilité de mises à jour en temps réel dans le navigateur, et permet flux d'informations bidirectionnel. Cependant, il s'agit d'un départ de utilisation HTTP standard, ce qui conduit à plusieurs problèmes. Tout d'abord, il ya implications de mémoire malheureux, parce que le Javascript garder accumuler, et le navigateur doit conserver tout cela dans son modèle de page. Dans une application riche avec beaucoup de mises à jour, ce modèle va se développer rapidement , et à un moment donné une page rafraîchissement sera nécessaire pour éviter swapping disque dur, ou pire destin.

Cela vous conseille de recharger la page qui est également une option. Mais je pense que la fermeture de cette connexion (iframe) et la reconnexion pourraient également fonctionner.

Comet a beaucoup de problèmes dont vous avez besoin de pirater autour de:

Voilà pourquoi je recommande encore une fois que vous utilisez socket.io (voir ci-dessous) qui prend soin de tout ce non-sens.

Socket.io

conseils que je vous d'utiliser socket.io à la place, ce qui est très bon produit. C'est supported by all major browsers. Comme vous pouvez le voir, il prend en charge beaucoup de transport (XHR, Websockets, etc) et les choix les meilleurs disponibles sur votre navigateur pour les meilleures performances.

+0

Lorsque vous souhaitez effacer les balises de script, il est probablement nécessaire de suivre http://stackoverflow.com/questions/6637987/does-comet-server-data-in-the-iframe-just-accumulate/6646048#6646048 – Alfred

2

Wipe balise script sans reconneting

Vous pouvez supprimer balise script chaque fois qu'il est exécuté en ajoutant un code lorsque le serveur imprime morceau.

<script type="text/javascript"> 
// Calls your message handler 
app.handle("Hello World"); 

// Removes this script element 
var scripts = document.getElementsByTagName("script"), 
    elem = scripts[scripts.length - 1]; 

elem.parentNode.removeChild(elem); 
</script> 

Version comprimée

<script type="text/javascript"> 
app.handle("Hello World"); 
(function(){var a=document.getElementsByTagName("script"),a=a[a.length-1];a.parentNode.removeChild(a)})(); 
</script> 

Mais, iFrame cachés ou pour toujours Iframe est trop gênant pour l'utiliser comme Alfred mentionné. Personnellement, je pense que cette manière classique fait paraître Comet sans charme et sans charme.

jQuery flux

Ma recommandation est d'utiliser jQuery Stream, qui fournit l'interface de communication bidirectionnelle unifiée sur WebSocket et le protocole HTTP. C'est une bibliothèque JavaScript légère côté client, telle que jQuery. Le transport amélioré Iframe utilisé par jQuery Stream est différent de celui classique de plusieurs façons, requries text/plain réponse contenant uniquement des messages au lieu de la réponse text/html et vide la réponse chaque fois qu'il est géré. Selon le test de certains utilisateurs, Internet Explorer 8 utilisant le transport amélioré Iframe n'a aucun problème avec les messages de plusieurs mégaoctets (contrairement à Firefox en utilisant XMLHttpRequest comme transport, ce qui est vraiment difficile).

+0

est beaucoup mieux que de se reconnecter. Mais utiliser socket.io est encore mieux si vous me demandez. – Alfred

+0

merci beaucoup, jet de jquery ressemble à ça va vraiment aider – ForeverConfused

Questions connexes