Сравнение скорости работы nodejs, php, python, lua, luajit, наполнение массива

А захотелось мне протестировать, на сколько отличается скорость работы этих языков программирования. В их чистом виде, по самой простейшей задаче. Для этого создал новую, чистую виртуалку, и установил lua 5.3.3, luajit 2.0.4, nodejs 8.6, python 3.5 и php7.0.

Всё, кроме ноды, ставил из стандартных репозиториев. Ставил так, как ставило бы 99% людей, без излюбонов со сборкой из сорцов.

Тест

Просто много раз пересоздаём массив и добавляем в него овер 9999 элементов. Исходники:

php

$start = microtime(true);

for($raund=0; $raund<1000; $raund++) {
  $arr = [];
  for($aLength=0; $aLength<1000000; $aLength++) {
    $arr[] = 1;
  }
}

$timeSpent = microtime(true) - $start;
echo "Time spent: " . $timeSpent . "\n";

python

import time

start = time.time()

for raund in range(0, 1000):
  myList = []
  for aLength in range(0, 1000000):
    myList.append(1)

timeSpent = time.time() - start
print("Time spent: ", timeSpent)  

nodejs

let start = new Date();

for(let raund=0; raund<1000; raund++) {
  let arr = [];
  for(let aLength=0; aLength<1000000; aLength++) {
    arr.push(1);
  }
}

let end = new Date();
let timeSpent = end - start;
console.log('Time spent:', timeSpent);

lua

local tstart = os.time() 

for raund=1,1000 do
  arr = {}
  for aLength=1,1000000 do
    table.insert(arr, 1)
  end
end

local timeSpent = os.time() - tstart
print("Time spent: " .. timeSpent .. "\n");
Господин Анон, в комментах предложил лучший код для луа:
local tstart = os.time()

for raund=1,1000 do
  local arr = {}
  local i = 0
  for aLength=1,1000000 do
    i = i + 1
    arr[i] = 1
  end
end

local timeSpent = os.time() - tstart
print("Time spent: " .. timeSpent .. "\n");

Результаты

Время выполнения скрипта, в секундах.

nodejs 8.6.0 php 7.0 luajit 2.0.4 python 3.5 lua 5.3.3
24.621 55.76 84 10 125.2 181 33

В итоге, nodejs наголову разбил всех. php как ни странно на втором месте, про python промолчим. А вот lua стал неожиданно тормозным, даже jit компиляция ему не помогает.

С новым тестом для луа, уже не всё так однозначно, нода отстаёт только от luajit, а с простолуа результат почти одинаковый.



Yandex money не поддерживают sni в sll

Из яндекс.мани прилетел привет, из позапрошлого века. Оказалось, что бот, который рассылает уведомления о платежах не поддерживает SNI идентификацию в SSL соединении.

Завожу трактор

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


(5) Комментариев

anon - 29.05.2019 15:48:08
- 0    + 0
А если таки корректный код на Lua затестить?

for raund=1,1000 do
local arr = {}
local i = 0
for aLength=1,1000000 do
i = i + 1
arr[i] = 1
end
end
Ilya - 30.05.2019 01:54:31
- 0    + 0
Спасибо, анон, так работает значительно быстрее. Инфу обновил.
Igr - 15.06.2019 18:09:09
- 0    + 0
Python
myList = [1] * 1000000
anon - 16.06.2019 20:21:13
- 0    + 0
local myList = setmetatable({}, {__index = function () return 1 end})
Ilya - 17.06.2019 02:48:11
- 0    + 0
Не, Igr, челендж не в том чтобы запихнуть именно кучу едениц. Вместо единицы должны быть какие-то рандомные данные. Но чтобы не мерить скорость рандомгенератора, я пихаю всегда 1.