в то время как VS делают удивительные результаты

Я возился с тестами JavaScript, и я попробовал этот код

var count = 0;
while(count < 100000000)
{
    count++;
}

VS

var count = 0;
do
{
    count++;
} while(count < 100000000);

и вот результаты:

введите описание изображения здесь

Я погуглил, но не нашел хорошего ответа. Может ли кто-нибудь объяснить мне, почему while более эффективен, чем do-while?


person Diptox    schedule 07.10.2016    source источник
comment
Различные оптимизации в этой реализации? Некорректный тест? Ваша электронная почта работала в фоновом режиме? На самом деле это не имеет значения. Используйте тот, который вам нужен.   -  person    schedule 07.10.2016
comment
но, как объясняется здесь, stackoverflow.com/a/20472425/5365770, do-while более эффективен, чем while, но результаты показывают другое   -  person Diptox    schedule 07.10.2016
comment
@TylerH: Вопрос должен быть закрыт, но я не понимаю, как этот вопрос Java или те, которые не зависят от языка, являются дубликатами.   -  person    schedule 07.10.2016
comment
@squint различные ответы объясняют разницу в скорости   -  person TylerH    schedule 07.10.2016
comment
я прочитал все страницы, все еще нет ответа, и один из ответов показывает обратный результат   -  person Diptox    schedule 07.10.2016
comment
@Diptox: while / do while - синтаксис. У синтаксиса нет производительности, у реализации есть. Однозначного ответа нет. Код, который вы пишете, просто что-то описывает. Реализация берет это и превращает в настоящий исполняемый код.   -  person    schedule 07.10.2016
comment
@TylerH: Нет, на самом деле нет. За исключением дополнительной итерации (при условии, что условие прерывания идентично), они такие же. Теперь реализация может иметь один синтаксис, оптимизированный по сравнению с другим, но это не имеет ничего общего с синтаксисом. В некоторых других реализациях это может быть отменено. Это были бы просто несоответствия.   -  person    schedule 07.10.2016
comment
@squint не понял, что вы говорите   -  person Diptox    schedule 07.10.2016
comment
@squint Конечно, есть. Вам просто нужно немного прочитать ответы и понять, что предпосылка OP (что одна по своей сути быстрее, чем другая) является ложной.   -  person TylerH    schedule 07.10.2016
comment
@Diptox: синтаксис - это символы, которые вы вводите в свой код, которые описывают поведение вашей программы. Этот синтаксис читается парсером и компилируется в реальный исполняемый код. Этот процесс выполняется людьми, которые хотят взять то, что вы предоставили, и превратить его в наиболее эффективный код, который они могут. Иногда оптимизация производительности несовместима. Циклы do и do-while описывают почти одинаковое поведение. В зависимости от оптимизаций времени компиляции они могут быть переписаны, чтобы они были идентичными. Или нет. Если одна реализация сегодня производит действительно более быстрый код, это ...   -  person    schedule 07.10.2016
comment
может измениться в следующем выпуске. Представьте, что вы смотрите на чертежи двух почти идентичных домов. Имеет ли смысл спросить, какой из них более конструктивен? Ответом, конечно, будет ни то, ни другое, хотя в зависимости от того, как он устроен, мог бы быть более здравый смысл.   -  person    schedule 07.10.2016
comment
@TylerH: Я этого не понимаю, но даже если ответ и коснулся характеристик производительности с некоторой точки зрения, это не то, о чем эти вопросы. Неважно. Эти вопросы по микрооптимизации нужно так или иначе закрыть.   -  person    schedule 07.10.2016
comment
Умный оптимизатор может оптимизировать это до var count = 100000000;. То, что вы измеряете, - это не while против do-while, а результат сложных алгоритмов оптимизации, основанных на эвристике, что довольно случайно на этом уровне. Вы измеряете шум. Не стоит делать никаких выводов на основании двух выборок шума.   -  person Antonín Lejsek    schedule 07.10.2016