Новый оптимизатор Internet Explorer 9 привел к завышению результатов теста SunSpider

Значительный прорыв производительности последней тестовой версии 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 ничего не сказано.

©  OpenNet