Новый оптимизатор Internet Explorer 9 привел к завышению результатов теста SunSpider
softskif — 21.11.2010Значительный прорыв производительности
последней тестовой версии Internet Explorer 9 дал повод задуматься,
каким образом разработчикам IE удалось кардинально поднять
производительность браузера, переведя его из разряда отстающих в
лидеры. Как оказалось, в последней тестовой версии была реализована
техника оптимизации "Dead Code Elimination", основной задачей
которой в данный момент является ускорение прохождения теста
производительности SunSpider.
По сути оптимизация сводится к игнорированию определенных языковых
конструкций, что пока влияет только на прохождение теста SunSpider,
не ускоряя работу реальных сайтов. При этом даже незначительное
изменение кода теста, приводит к значительному падению скорости его
прохождения. Например, оптимизация уже перестает работать при
замене переменных местами в условном выражении (т.е. если вместо
"if (TargetAngle > CurrAngle)" написать "if (TargetAngle <=
CurrAngle)"), при добавлении новой переменной или при изменении
огранизации цикла (если вместо "for (Step = 0; Step < 12;
Step++)" поставить "while(Step < 12)" или "for (Step = 12; Step
> 0; Step--)").
Интересно, что добавление в код теста забытого "return" в конце функции приводит к замедлению работы IE в 20 раз (!), а подстановка в любое место кода пустого вызова "true" замедляет IE в 19 раз (!). Opera, Chrome и Firefox также были протестированы на предмет выборочной оптимизации тестов, но изменение кода SunSpider для данных браузеров не привело к изменению скорости прохождения теста.
Дополнение: представители Microsoft
прокомментировали ситуацию тем, что в новой тестовой версии IE
включена начальная поддержка нового механизма оптимизации, который
пока нигде не применяется, но в течение нескольких недель будет
адаптирован для ускорения реальных сайтов. Невероятное ускорение
прохождения теста SunSpider объясняется тем, что в нем выполняются
интенсивные типовые цикличные операции, после чего результаты
данных вычислений в дальнейшем нигде не используются. Подобное
синтетическое поведение теста как раз подпадает под действие нового
оптимизатора, который как раз нацелен на удаление подобных
вычислений, не приводящих к результату. О причинах сведения
оптимизации на нет после добавления несущественных изменений в код
SunSpider ничего не сказано. (via:
opennet.ru/opennews/art.shtml?num=28717)
Вот такие вот в мелкософте "оптимизаторы". Если не
получается нормальный продукт выпустить, так надо просто пыль всем
в глаза пустить и сделать видимость, что все чудесно. Вот только на
кого было это рассчитанно? На домохозяек, которые верят только
циферкам-пузомеркам, а когда не в тестах, а в реальной работе все
тормозит оправдывали бы это тем, что "браузер замечательный, просто
сайты неправильные попадаются"?