Si XHR est correctement mis en œuvre par spec, il ne sera pas de fuite:
Un objet XMLHttpRequest ne doit pas être nettoyée si son état est
OUVERT, et l'envoyer (le drapeau est réglé, son état est HEADERS_RECEIVED, ou
elle est à l'état de CHARGEMENT, et l'une des conditions suivantes est remplie:
Il a un ou plusieurs écouteurs d'événement enregistré dont le type est
readystatechange, du progrès, de l'avortement, de l'erreur, de la charge, délai d'attente, ou loadend.
Le téléchargement complet du pavillon est détruit et les associés
XMLHttpRequestUpload objet a un ou plusieurs écouteurs d'événement enregistré
dont le type est le progrès, abandon, d'erreur, de la charge, délai d'attente, ou loadend.
Si un objet XMLHttpRequest est des ordures recueillies lors de sa connexion
est toujours ouverte, l'agent utilisateur doit annuler toute instance de l'extraction
algorithme ouvert par cet objet, en supprimant toutes les tâches en file d'attente pour eux,
et le rejet de toutes les autres données reçues du réseau pour eux.
Donc, après vous frappez .send()
l'objet XHR (et tout ce à quoi il fait référence) devient l'abri du GC. Cependant, toute erreur ou de succès va mettre la XHR en FAIT état et il devient assujetti à la GC de nouveau. Il ne importe pas si le XHR objet de synchronisation ou asynchrone. Dans le cas d'une longue requête de synchronisation de nouveau, il n'a pas d'importance parce que vous être coincé sur l'instruction send jusqu'à ce que le serveur répond.
Toutefois, selon cette diapositive , il n'a pas été correctement mis en œuvre, au moins dans Chrome/Chromium en 2012. Par spec, il n'y aurait pas besoin de faire appel .abort()
depuis le FAIT de l'état signifie que l'objet XHR devrait déjà être normalement Pgcd.
Je ne trouve pas même la moindre preuve de la MDN déclaration, et je les ai contacté l'auteur par le biais de twitter.