Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Наш движок Chakra балансирует между качеством кода и временем на анализ и производит лишь наименее затратные и очевидные оптимизации «мертвого» кода.
— Почему при добавлении ничего не делающих («мёртвых») инструкций ИЕ выполняет тест в разы медленнее?
— Потому что его движок офигенно оптимизирует код и выкидывает мёртвые участки!
IE обогнал хром? Вот это да!
for (Step = 0; Step < 12; Step++) {
...
}
for (Step = 12; Step > 0; Step--) {
...
}
Step = 0;
while(Step < 12) {
...
Step++;
}
for (Step = 0; Step < 12; Step++) { в исходном. И в исходном Step тоже объявленна в начале. --- tests/sunspider-0.9.1/math-cordic.js 2010-11-17 00:55:29.000000000 -0700
+++ tests/sunspider-0.9.1-deadcode/math-cordic.js 2010-11-17 02:09:34.000000000 -0700
@@ -62,7 +62,7 @@
TargetAngle = FIXED(28.027);
CurrAngle = 0;
- for (Step = 0; Step < 12; Step++) {
+ for (Step = 12; Step > 0; Step--) {
var NewX;
if (TargetAngle > CurrAngle) {
NewX = X - (Y >> Step);
for (var i = 0, l = array.length; i < l; i++) {
// vs
for (var i = array.length; i--;) {
for (var i in array) нэ?for (var i = 0, l = array.length; i < l; i++) if (i in array) {
for (var i = array.length; i--;) {
for (var i = 0, l = array.length; i < l; i++) if (i in array) {
for (var i = 0, l = array.length; i < l; i++)
for (var i = 0, l = array.length; i < l; i++)for (var i = 0; i < array.length; i++)вместо не менее очевидного, чем for in
for (var i = 0; i < array.length; i++)
// имхо, менее очевиден, чем
for (var i = array.length; i--;)
// и, имхо, менее очевиден, чем
for (var i in array)
Array.implement({
forEach: function(fn, bind){
for (var i = 0, l = this.length; i < l; i++){
if (i in this) fn.call(bind, this[i], i, this);
}
},
for (var i = 0, l = array.length; i < l; i++)if ( 1 ) — такой момент встречается регулярно, например есть в коде phpBBя — ничего не проверял, о чём уже заявил неоднократно. но много людей, в т.ч. сторонников IE выкладывали свои тесты.
я бы с удовольствием поставил большую серию тестов, будь у меня IE9. Может, как-то, сделаю это.
ты очень любишь расставлять ярлыки.Да вы шо?
вы притворяетесь слепым (евангелист)… написал TheShock.
Это объясняется вами и другими фанатами МС
с каких пор ты стал евангелистом Микрософт?
аргументы сторонников Микрософта
так яро защищаете МикрософтТо, что ты слабоумен — очевидный факт. Иначе не объяснить, что наличие другого взгляда ты способен объяснить только приверженностью какому-то лагерю.
Тяжёлая. Повседневная деятельность настолько нарушена, что требуется постоянный надзор (например, больной не в состоянии выполнять правила личной гигиены, не понимает, что ему говорят и сам не говорит).
<html><body>
<script language="Javascript">
var start = new Date();
for (var i = 0; i < 1000000; i++) {
if (1) {
for (var j = 0; j < 1000; j++)
var k = i + j;
} else {
for (var j = 0; j < 1000; j++)
var k = i - j;
}
}
alert(new Date() - start);
</script>
</body></html>
for (var i = 0; i < 1000000; i++) {}, который не несет смысловой нагрузки.<html><body>
<script language="Javascript">
var start = new Date();
alert(new Date() - start);
</script>
</body></html>
Чтоб проверить «натасканность» оптимизатор конкретно на санспайдер, а не на часто используемые конструкции итерации от нуля до верхнего предела, простых условий и арифметических операций нужно добавлять ИМЕННО дополнительные простые условия, итерации и арифметику.
Ваш оппонент как раз спросил, почему не вырезался пустой цикл с миллионом итерацийЕбать…
Код не перестает быть мертвым, IE9 по каким-то неизвестным причинам перестает его таковым считать.
cordic: 1.0ms ± 0.0%
cordic-with-return: 15.4ms ± 2.4%
cordic-with-true: 14.2ms ± 3.2%var start = new Date();
// Тут цикла нет
alert(new Date() - start);
skidka = 0;
.... // blablabla
if(skidka>0) ... //показать слово "СКИДКА!!!"
А еще первыми к финишу можно было прийти, подсчитав заранее все ответы на калькуляторе и в тесте только выводить их на экран. Все равно от этих подсчетов никакой реальной пользы.Не передергивай.
подозрительно странно ведет себя, определяя код санспайдера как «мертвый»Это яркий представитель мертвого кода, лежащий на виду. Он запросто мог попасть в внутренние тесты разработчиков, которые проходит анализатор.
Ведь согласитесь, мало толку от анализатора метвого кода, если он работает только в при каких-то очень ограниченных условиях.Platform preview о чем нибудь говорит? Спасибо за баг репорт, ребята будут работать над анализатором дальше.
Поведение нашего JS движка это не «специально подкрученная» оптимизация и это не баг.
TimTowdy
идиот
Что именно вырвано из контекста?Вы приводите кусок из топика, где утверждается, что «это» не бага в ответ на мой комментарий, где я утверждаю, что «это» бага, и вроде как у читателя это должно вызвать сомнение в моей адекватности.
потом втихую отключить хакиИ закрыть тесты. Или уничтожить, чтобы больше никто не смог их пройти. Или как по вашему они не дадут другим ребятам провести тесты самим после релиза и получить другие результаты?
Это (данный тест СанСпайдера) яркий представитель мертвого кода, лежащий на виду. Он запросто мог попасть в внутренние тесты разработчиков, которые проходит анализатор.
Dead code elimination optimizations look for code that has no effect on a running program, and removes the code from the program. This has a benefit of both reducing the size of the compiled program in memory and running the program faster.
Избавление от «мертвого» кода в Javascript в IE9