2014-05-19 11 views
7

Ho una pagina (generata) con una matrice molto grande e seghettata. Non inizializza in IE11; Ottengo SCRIPT28: Out of stack space e SCRIPT2343: Stack overflow at line: 1. Ho ridotto pagina problematico il minimo indispensabile con i dati randomizzati, e questo è quello che sembra:Il caricamento di un enorme array in Internet Explorer 11 causa un overflow dello stack

<html><body> 
    <div id="info"> 
     Loading... 
    </div> 
    <script> 

     var d = []; 
     var i = 0; 

     d[i++] = [ 
     "XHC_14", 
     0 
     ]; 

     d[i++] = [ 
     "ZXS_26", 
     "UVT_27", 
     "QML_3149", 
     "MJO_3150", 
     15993327 
     ]; 

     d[i++] = [ 
     "VKG_3156", 
     "ZEA_3157", 
     "KZG_3159", 
     "MNA_3162", 
     "AKX_3163", 
     "KLK_3164", 
     618601 
     ]; 

     // more array initialization ... 

     info.innerHTML = "<h1>Ready!</h1>"; // this will only show if the initialization succeeded 
    </script> 
</body></html> 

Il file reale è ~ 500k linee, ripetendo l'inizializzazione di matrice intorno ~ volte 14k. File reale disponibile qui: ie11_stack_overflow_problem.zip

Arresto anomalo solo quando l'inizializzazione dell'array è sufficientemente grande. Ho una triade di tutti i tipi di variazione, incluso metterlo in una funzione per dargli il suo scopo, senza risultato. Funziona con tutti gli altri browser che ho provato, incluso IE8 su XP. La mia configurazione è Win7 con IE 11.0.9600.17107 (completamente aggiornato).

Qualcuno può capire perché questo sta accadendo?

+1

Non penso che questo sia un problema di runtime. Penso che tu abbia raggiunto qualche limite nel compilatore/interprete. Questo è un file sorgente piuttosto complesso. Potrei considerare di esternalizzare quei dati e provare a caricarli tramite XMLHttpRequest. – spender

+0

Non posso, dal momento che il punto del file deve essere autonomo (è stato creato da una [utility] (http://www.rlvision.com/snap2html/) genera elenchi di file basati su HTML) –

+0

Dovrei aggiungere questo: la matrice seghettata sembra essere parte del problema. Se prendi semplicemente uno dei dir [i ++] e moltiplica alla stessa dimensione, non succede. –

risposta

4

Questo file è orrendo ed è il bacio della morte sia per Visual Studio che per Notepad ++ ... e infatti IE11. Hai fatto saltare l'interprete.

ho avuto questo lavoro utilizzando

JSON.serialize(d) 

in un altro browser, quindi incollare l'output come una stringa in file di origine.

Poi:

var jsonStr = '[[blablabla...I go on foreeeeeever]]'; 
var d=JSON.parse(jsonStr); 

Ora carichi in IE11.

Quindi la soluzione è scrivere la struttura dei dati come stringa JSON e analizzarla.

+0

Interessanti lavori. Anche se non dà una risposta a ciò che sta causando l'incidente. Mi chiedo se si tratta di un bug in IE11? –

+2

Penso sia chiaro. Il tuo codice sta facendo esplodere l'interprete perché ha esaurito la memoria (stack space). È discutibile se questo sia o meno un bug o una caratteristica di progettazione (immagino che lo stack traboccante sia probabilmente limitato in termini di dimensioni, in base alla progettazione). È a corto di memoria un bug? Sia Visual Studio che Notepad ++ hanno lo stesso bug? Se spingi abbastanza forte, tutti i browser avranno un limite. Penso che il tuo file sia una spinta piuttosto difficile. – spender

+2

(... e abbiamo sempre saputo che IE è un po 'spazzatura comunque ...). – spender

Problemi correlati