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

21.07.2018 09:21

В этой части будем тестировать сортировку числовых массивов. Node.js: array.sort(), PHP: sort(), Python: array.sort(), Lua: table.sort()

Исходники тестов:

PHP

<?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
";
}

?>

Python

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}`);
}

Lua/LuaJit

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 оказался на голову выше всех, и наконец-то луа показал достойные результаты.



Сравнение скорости работы nodejs, php, python, lua, luajit часть 2, string replace

В этот раз посмотрим стандартную во всех языках функцию замены подстроки в строке. В php это str_replace, в javaScript str.replace, в python str.replace, и в lua str:gsub.

Все на дно!

Ну вот и всё ребята. Все мосты построены, олимпиады и чемпионаты прошли. Наступил август 2018, поезд следует to the moon, ну или на дно.


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