Я написал две функции для отображения чисел от 1 до 20 и скажу, которые являются кратными 3, кратным 5, которые являются обоим, а какие нет.Структурированный или неструктурированный алгоритм JavaScript
Я решил написать функцию, в которой используется как можно меньше времени.
Я получил эти две функции:
Первый:
function func1(){
console.time('execution time:');
for (var i=1 ; i<=20; i++)
if((i%5)===0 && (i%3)===0)
console.log("\n" + i + " : Multiple of 5 and 3.");
else{
if(i%3===0)
console.log("\n" + i + " : Multiple of 3.");
else{
if(i%5===0)
console.log("\n" + i + " : Multiple of 5.");
else
console.log("\n" + i);
}
}
console.timeEnd('execution time:');
}
Второй является:
function func2(){
console.time('execution time:');
for (var i=1 ; i<=20; i++){
if((i%5)===0 && (i%3)===0){
console.log("\n" + i + " : Multiple of 5 and 3.");
continue;
}
if(i%3===0){
console.log("\n" + i + " : Multiple of 3.");
continue;
}
if(i%5===0)
console.log("\n" + i + " : Multiple of 5.");
else
console.log("\n" + i);
}
console.timeEnd('execution time:');
}
func1() имеет время выполнения: 29ms
Функция func2() имеет время выполнения: 20 мс
Разница огромна около 1/3.
У меня 2 вопроса:
1) Является ли это лучше сравнить я% 5 === 0 до, а затем я% 3 === 0 или наоборот?
2) Функция func2() имеет время выполнения лучше, чем func1(), но func2() имеет неструктурированный код becouse У меня есть более чем одна точка выхода функции (ключевое слово continue считается go-to). Вопрос: Должен ли я хранить свой структурированный код и игнорировать время выполнения, или, если мне нужна хорошая производительность, могу ли я написать такой код?
Это слишком мало времени для выполнения каких-либо вопросов. Наибольшее экономия времени будет заключаться в том, чтобы сохранить ваши результаты разделения (хотя время выполнения * может это сделать) вместо повторения «i% 5» и «i% 3» дважды. – Pointy
Ваш браузер должен быть медленным, мой использует 1,655 миллисекунды, что составляет немногим более тысячи секунд, так что, иначе говоря, это не имеет значения, если вы не намереваетесь запустить функцию триллиона раз. – adeneo
20 мс? На моем компьютере, который является старым и не очень быстрым, это 0 мс. Вы должны запускать его много раз, чтобы сравнить. – Oriol