7

Il nostro sito Web utilizza la chiamata AJAX e utilizza XMLHTTPRequest per raggiungere tale scopo. Quando il client usa una singola istanza di IE per tutto il giorno e navigando e rifacendo in continuazione la pagina con quello IE, finiamo con un'eccezione di memoria insufficiente e siamo costretti a chiudere l'IE.Qual è lo scopo dell'opzione "Abilita supporto XMLHTTP nativo" in IE

Abilitando l'opzione Enable native XMLHTTP support nella scheda Avanzate di IE si risolve il problema. Poiché preferiamo l'oggetto XMLHTTP nativo su ActiveXObject, l'eccezione potrebbe essere dovuta all'utilizzo di ActiveXObject. Ma ancora non sono sicuro di quale potrebbe essere la causa principale o c'è un altro modo migliore per risolvere il problema. Usiamo IE8. Non abbiamo mai riscontrato problemi di questo tipo in altri browser (Firefox e Chrome). Grazie

+0

https://github.com/Pita/etherpad-lite/wiki/How-to-enable-native-XMLHTTP-support-in-IE –

+4

@Quoi, questa non è una risposta. È solo un altro caso. – Raptor

+0

Ho capito bene? IE ha un'implementazione XHR integrata e conforme agli standard, ma disabilitata per impostazione predefinita? – Bergi

risposta

5

Abilitare il supporto XMLHTTP nativo significa che il browser non fornirà MSXML.HttpRequest ma invece window.XMLHttpRequest che è conforme agli standard. Abbiamo comunque utilizzato con successo entrambe le versioni senza alcuna perdita, quindi suppongo che debba esserci qualche problema di implementazione nel codice. Sto solo supponendo, ma fissare le istanze MSXML.HttpRequest su DOMNodes (tramite un eventlistener) può portare a tali situazioni.

+0

@ Peter Aron Zentai: il blocco delle istanze MSXML.HttpRequest su DOMNode (tramite un eventlistener) può portare a tali situazioni. -> Puoi gentilmente farmi un esempio per questo –

+0

$ ('# myButton'). Click (function() {var xhr = createXHR(); xhr.onreadystatechange = function() {}}); <- questo potrebbe mantenere l'intera risposta XHR in memoria poichè l'oggetto xhr con il corpo reposnse è bloccato attraverso una var di chiusura che farà sì che gc-d non sparisca. –

+0

come farò a smaltire lo xhr allora e dove sarebbe il posto migliore per smaltire xhr. –

1

In sostanza si stanno perdendo oggetti XMLHTTPRequest, a causa di rifrazioni circolari tra il DOM HTML, il motore di esecuzione JavaScript e l'oggetto XMLHTTPRequest.

È necessario sganciare gli eventi e dereferenziare gli oggetti XMLHttp al termine della richiesta. (Per dereferenziali assicurati che nessun oggetto JavaScript o variabile li riferimenti, inclusi i piccoli bit di script nei gestori onClick ecc.

L'abilitazione di XMLHTTPRequest nativo significa che il componente esterno viene estratto dal ciclo, quindi il DOM è in grado per gestire la richiesta di tutta la vita stessa.

Vedi anche @ risposta di PeterAronZentai.

+0

un po 'di esempio di codice mi sarebbe di grande aiuto!Grazie mille –

+0

Immagino che tu abbia una pagina aperta, con tanto Ajax, ma non ricarichi mai l'intera pagina? – Ben

+0

sì quasi ma a volte il client può ricaricare –

2

"Attiva il supporto XMLHTTP nativo” opzione in IE, ovviamente, rende IE forniscono supporto nativo per XMLHTTPRequest. Se non si attiva questa, è Avremo solo il binding ActiveX legacy alla libreria MSXML in IE. Suppongo che tu usi una libreria che fornisce la gestione cross-browser per i casi in cui il supporto nativo è assente (impostazione disattivata o IE meno recente che dispone solo di un'interfaccia legacy) o fallback manuale su MSXML. Poiché l'associazione MSXML è un'interfaccia aliena per JavaScript, ci sono molti posti in cui gli oggetti introdotti da JS esterni possono creare riferimenti incrociati con oggetti nativi, non consentendo a JS o ad un garbage collector di ActiveX di recuperarli, poiché non comunicano e possono trovare riferimenti circolari simili.

La soluzione migliore, a mio parere, è quella di raccomandare agli utenti di IE7 di avere sempre questa opzione (non ci sono davvero svantaggi) e semplicemente dimenticare i vecchi browser. Se questa non è un'opzione in qualche modo, prova a ricorsivamente cancellare tutti gli oggetti MSXML che crei nel tuo codice fallback.

+0

La creazione di una soluzione su un'impostazione avanzata in IE non funziona. Nessuno va mai lì per cambiare niente anche se suggerisci ... –

+0

In genere non è mai disabilitato nei browser più vecchi a meno che alcune politiche di paranoico siano in uso e semplicemente non esistono più. Non suggerisco di buttar via completamente MSXML, ma è davvero giunto il momento di smettere di preoccuparsi delle sue prestazioni meno che stellari. –