2016-04-12 10 views
7

Ich versuche Angular 2 und habe festgestellt, dass die Leistung des Internet Explorers 11 beim Radfahren mit * ng dramatisch langsam ist. Für über 1500 Elemente. Bei IE11 dauert es etwa 25 Sekunden, bei anderen Browsern weniger als 1 Sekunde.Angular 2 Leistung IE11 * ngFür

Anhalten des Debuggers Ich bemerkte, dass der Code ständig ruft isNan Funktion in es6-shim.js. Hier wird der Call-Stack:

enter image description here

Eine Arbeits plnkr hier: http://plnkr.co/edit/sEujClHmuCbrydIiYQYL?p=preview. Der Code ist sehr einfach:

<ul *ngFor="#item of items"> 
    <li>Item: {{item.itemKey}}</li> 
</ul> 

//Load items simulating remote load 
setTimeout(function(){ 
    for (let i = 0; i < 1500; i++) { 
      self.items.push(new Item(i+"")); 
     } 
},1000); 

Wer mit dem gleichen Problem? Irgendwelche Abhilfe oder Tipp zur Verbesserung der Leistung?

Vielen Dank im Voraus.

+0

Ich weiß nicht, ob das wirklich die Ursache für die schlechte Leistung ist, aber andere Browser brauchen 'es6-shim' nicht. – zeroflagL

+0

vielleicht ist das keine Problemumgehung, da IE11 keine native Implementierung hat und es6-shim ist die einzige Möglichkeit, das Framework auch bei schlechter Performance arbeiten zu lassen – Lelezeus

+0

Stellen Sie sicher, dass Sie 'prodMode' aktiviert haben, wenn Sie die Leistung testen. –

Antwort

6

Das Problem ist, dass IE keine native Implementierung von Map hat. Die set und get Funktionen des polyfill sind extrem langsam (im Vergleich zu ihren Pendants nativen) und den größten Teil der Zeit in Anspruch nehmen:

enter image description here

Vielleicht - oder hoffentlich - andere polyfills für Map sind schneller als es6-shim.

Update:

Ich habe Ihren Code mit core-js und seine Leistung scheint getestet viel näher zu sein, zu der der nativen Implementierung.

+2

Haben Sie eine Verbindung zu diesem Plünderer? Ich bin gespannt, welche Teilmenge von "Core-js" du benutzt hast und ob du eine Empfehlung zu diesem Punkt hast. – Ward

+0

IE11 hat grundlegende Unterstützung für 'Map'- und' Set'-Einbauten. Das Polyfill ersetzt sie durch eine eigene Implementierung. Ich habe [es6-shim] gepatcht (https://github.com/paulmillr/es6-shim/pull/429), um seine Leistung zu verbessern. –