хуйу нас не матерятся
В этой части будем тестировать сортировку числовых массивов. Node.js: array.sort(), PHP: sort(), Python: array.sort(), Lua: table.sort()
<?php
$lengths = [
1000,
10000,
100000,
1000000,
10000000
];
foreach($lengths as $len) {
$arr = [];
for($i=0; $i<$len; $i++)
$arr[] = mt_rand() / mt_getrandmax();
$startTime = microtime(true);
sort($arr, SORT_NUMERIC);
$worktime = microtime(true) - $startTime;
echo "LEN=$len, RESULT=$worktime
";
}
?>
from random import random
import time
lengths = [
1000,
10000,
100000,
1000000,
10000000
]
for len in lengths:
arr = []
i = 0
while i < len:
i += 1;
arr.append(random())
startTime = time.time()
arr.sort();
worktime = time.time() - startTime
print( "LEN=" + str(len) + ", RESULT=" + str(worktime) )
JavaScritp/Node.js
const lengths = [
1000,
10000,
100000,
1000000,
10000000
];
for(let len of lengths) {
let arr = [];
for(let i=0; i<len; i++)
arr.push( Math.random() );
let startTime = Date.now();
arr.sort( function(a, b) { return a - b });
let worktime = Date.now() - startTime;
console.log( `LEN=${len}, RESULT=${worktime / 1000}`);
}
local lengths = {
1000,
10000,
100000,
1000000,
10000000
}
for index, len in ipairs(lengths) do
math.randomseed( os.time() )
local arr = {}
for i = 1, len, 1 do
table.insert(arr, math.random())
end
local startTime = os.clock();
table.sort(arr)
local workTime = os.clock() - startTime;
print( 'LEN=' .. len .. ', RESULT=' .. workTime )
end
Для тестов как обычно используем 5-и долларовую виртуалку на линоде, версии софта: PHP: 7.0.30, Python: 3.5.3, Node.js: 10.6.0, Lua: 5.3.3, LuaJit: 2.0.4. За исключением ноды, весь софт из стандартного дистрибутива debian.
Array length | 1000 | 10000 | 100000 | 1000000 | 10000000 |
---|---|---|---|---|---|
PHP | 0.0001s | 0.0018s | 0.0217s | 0.2784s | 3.1013s |
LuaJit | 0.0002s | 0.0038s | 0.0500s | 0.6366s | 7.3314s |
Lua | 0.0004s | 0.0053s | 0.0702s | 0.9161s | 9.5855s |
Python | 0.0005s | 0.0039s | 0.0547s | 0.9600s | 15.283s |
Node.js | 0.0050s | 0.0240s | 0.1640s | 1.7780s | 32.1680s |
Моя любимая нода в этом тесте слила в салат. PHP оказался на голову выше всех, и наконец-то луа показал достойные результаты.
В 2021 PHP - без изменения, Lua = LuaJit, Python - в трое быстрее, Node.js - почти в 2 раза быстрее, js78 (Mozilla) - почти PHP.