Pull to refresh

Быстрее ли JavaScript, чем Python?

Множество постов я видел, где люди писали про преимущество JavaScript в скорости перед Python. Много раз мне это писали мои знакомые. Ну что же, пришло время это проверить.

P.S. В каждом коде я буду считать время его выполнения именно методами языков.

В JavaScript:

Date.now()

А в Python:

from time import time
time()

Также я всегда буду брать средние показатели скорость, полученные из 10 запусков программы.

Итак, приступим.

Для начала проверим скорость обычного цикла for, который будет выводить числа от 1 до 1000.

JavaScript:

start = Date.now()
for (var i = 1; i < 1001; i++) {
    console.log(i);
}
end = Date.now() - start
console.log(end + " ms")

Выполнение кода заняло 850 ms.

Теперь Python:

from time import time
start = time()
for i in range(1, 1001):
    print(i)
end = round(time() - start, 3)
print(str(end) + " ms")

Выполнение этого кода заняло 620 ms.

1:0 в пользу Python.

Теперь давайте сделаем то же самое, только вместо for у нас будет while.

JavaScript:

start = Date.now()
var i = 1;
while (i < 1001) {
    console.log(i);
    i++;
}
end = Date.now() - start
console.log(end + " ms")

760 ms у нас даёт JS. Быстрее чем for, кстати.

А что у нас по Python?

from time import time
start = time()
i = 1
while i < 1001:
    print(i)
    i += 1
end = round(time() - start, 3)
print(str(end) + " ms")

Если JavaScript стабильно держится на показателе около 750-760 ms, то скорость Python'а колеблется от 600 ms до 750 ms. Но в итоге средняя скорость выходит в 720 ms.

2:0 в пользу Python.

Следующие в очереди — функции.

Создадим функцию, которая будет возводить число 123 в степень 123. Почему не больше? Это я объясню позже. Сейчас же просто создадим такие вот функции.

JavaScript:

start = Date.now()
function func(a,b) {
    console.log(a ** b);
}
func(123, 123);
end = Date.now() - start
console.log(end + " ms")

JavaScript выполняется за 10 ms.

Python:

from time import time
start = time()
def func(a, b):
    print(a ** b)
func(123, 123)
end = round(time() - start, 3)
print(str(end) + " ms")

Этот код выполняется за 1 ms. В 10 раз быстрее чем JavaScript…

3:0 в пользу Python.

Это всё были детские игры! Давайте играть по-взрослому!

JavaScript:

start = Date.now()
for (var i = 1; i < 1001; i++) {
    if (i % 5 == 0) {
        console.log(i ** 10)
    } else {
        console.log(i ** 123)
    }
}
end = Date.now() - start
console.log(end + " ms")

Код выполняется за 800 ms.

Python:

from time import time
start = time()
for i in range(1, 1001):
    if i % 5 == 0:
        print(i ** 10)
    else:
        print(i ** 123)
end = round(time() - start, 3)
print(str(end) + " ms")

Python-код выполнялся 1300 ms.

«Вот она, победа JavaScript! Python не может в сложные вычисления!» — сказал бы я, если бы не одно НО. В большинстве случаев, JavaScript даже не считает. Он просто выводит «Infinity» и продолжает, а Python считает всё. И вот я даже не знаю, кому присудить победу. Наверное, здесь у нас будет ничья.

4:1 в пользу Python.

Подведём итог: Python оказался быстрее JavaScript в циклах, функциях, вычислениях. Он считает всё, когда JavaScript делать этого не хочет.

Этим постом я не пытался принизить JavaScript, сам его люблю всем сердцем. Просто надоели те, кто везде пишут: «Python самый медленный! Нафиг такую скорость!»

Спасибо за уделенное время. Удачи всем!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.