Mentiras, puras mentiras: ¿Está mintiendo IE9 en SunSpider?


IE9 Sunspider cheater

El punto de referencia de rendimiento para Javascript, Sunspider, ideado por los desarrolladores de Webkit, es utilizado y mencionado ampliamente como una medida del rendimiento de javascript en los navegadores. Un resultado sorprendente fue recientemente encontrado por un desarrollador de Mozilla, Rob Sayre, viendo el test de rendimiento de Internet Explorer 9. Y es que uno de los muchos subtests al parecer en Internet Explorer 9 termina casi instantáneamente.

Aunque muchos de los subtests de SunSpider son de resultado casi instantáneo en muchos navegadores, uno de ellos atrajo la atención de este desarrollador. E hizo unas modificaciones simples a ese test en específico – cambios que no alteran el resultado de los cálculos que el test realiza, es decir, cambios que deberían ser tratados como equivalentes – y el resultado de ello ocasionó que Internet Explorer 9 baje en el resultado considerablemente.

El reporte de Sayre menciona que el motor de Internet Explorer 9, llamado Chakra, tiene un rendimiento frágil, y fue fácilmente deshabilitado por un cambio menor al código que éste debería tener en cuenta. Las coberturas sobre este asunto mencionan que Internet Explorer 9 está haciendo trampa en este test.

Por mi parte realicé las modificaciones mencionadas a este sub test que Rob Sayre hace. Únicamente agregué return como menciona aquí.

Y estas son las diferencias en IE9 preview 7

IE9SunSpider fail

Se nota una diferencia grande con un sencillo cambio.

Mientras que Chrome y Opera no muestra ninguna diferencia con tales cambios, es decir, se mantienen.

Chrome SunSpider

Opera 11 sunspider

Se plantean 3 posibles razones:

  • Microsoft hizo trampa al optimizar Internet Explorer 9 únicamente para sobresalir en el punto de referencia SunSpider. http://news.ycombinator.com/item?id=1913315
  • Los ingenieros de Microsoft al trabajar en el desarrollo de Internet Explorer 9 podrían haber estado utilizando SunSpider Benchmark y sin intención “sobre optimizado” el motor Javascript para SunSpider.
  • Una tercera opción sugerida por Hacker News, menciona de que precisamente se trate de un error del motor que al agregar esos códigos triviales desalinea las tablas del caché y así arruinar el rendimiento completamente. Si esta es la razón, pone en tela de juicio al robustez del motor Chakra.

Finalmente mencionar que Microsoft se ha manifestado sobre dicho tema, y ellos lo atribuyen a la eliminación de código muerto. Pero no explican del por qué ese procedimiento falla miserablemente al agregar tan sólo “true” o “return", que en realidad no cambia nada en la función actual, e inclusive de por qué falla cuando se cambia “for” por “while” como lo demuestran en Hacker News.

Saquen sus propias conclusiones, ¿de verdad Microsoft está haciendo trampa? o son únicamente descuidos que ellos mencionan.

Si no lo vieron más arriba, este es el subtest en cuestión http://people.mozilla.com/~sayrer/2010/sunspider/math-cordic-variations/driver.html

Fuente: Did Internet Explorer 9 Cheat In The SunSpider Benchmark?