Почему OpenCPU работает лучше при возврате перечисленных объектов?

Во время тестирования производительности OpenCPU API я заметил, что функция, которая возвращает указанный фрейм данных, займет значительно меньше времени выполнения, чем возврат фрейма данных, не включенных в список, того же размера. Это более заметно с большими кадрами данных. В чем причина этой разницы? Я тестировал с использованием Ubuntu 14.04 LTS и opencpu-server v1.6.

Вот функции R, которые я использовал.

test1 <- function(n) {
data <- data.frame(x = rnorm(n), y = rnorm(n), z = rnorm(n))
data
}

test2 <- function(n) {
data <- data.frame(x = rnorm(n), y = rnorm(n), z = rnorm(n))
list(data)
}

А вот и скрипт php, который я использовал для тестирования.

<?php
function curl_post($url, $postfields) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}

$test1sum = 0;
$test2sum = 0;

$postfields = array('n' => 100000);

for ($i = 0; $i < 10; $i++) {

$time0 = microtime(true);
$data1 = curl_post('http://localhost/ocpu/library/testpackage/R/test1', $postfields);
$time1 = microtime(true);
$data2 = curl_post('http://localhost/ocpu/library/testpackage/R/test2', $postfields);
$time2 = microtime(true);

$test1sum += ($time1 - $time0);
$test2sum += ($time2 - $time1);
}

$test1avg = $test1sum / 10;
$test2avg = $test2sum / 10;

echo $test1avg, '<br>', $test2avg;
?>

Различий в размерах выборки около 10000 и меньше не было, вот эталон для N 5000

0.19470419883728
0.15488367080688

А вот эталон для N 100000.

1.3232709169388
0.23536853790283

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]