为什么OpenCPU在返回列出的对象时表现更好?

时间:2017-06-08 14:54:08

标签: php r 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

0 个答案:

没有答案