Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Я думаю стоит привести примеры тестов.
namespace my\json;
function decode($json) {
$data = \json_decode($json);
if (JSON_ERROR_NONE !== \json_last_error()) {
throw new \InvalidArgumentException('Invalid JSON');
}
return $data;
}
$obj = json_decode($test, true);
$str = json_encode($obj);
$obj = CJSON::decode($test);
$str = CJSON::encode($obj);
memory_get_usage
отдает текущее потребление (это хорошо видно по уменьшению после unset
). Как вы с ее помощью собираетесь померять расходы во время парсинга?echo memory_get_usage() . "\n"; // 36640
$a = str_repeat("Hello", 4242);
echo memory_get_usage() . "\n"; // 57960
unset($a);
echo memory_get_usage() . "\n"; // 36744
str_repeat
и присвоения — увеличилась, после unset
— упала обратно.function bump()
{
$a = str_repeat("Hello", 4242);
unset($a);
}
echo memory_get_usage() . "\n";
bump()
echo memory_get_usage() . "\n";
Теперь то я понятно изложил?
Кстати, тут disem выложил результаты своего независимого теста по сабжу. И это только подтверждает то, о чем, собственно заметка и была. Или вы ему тоже не верите?
Увы, форматирование комментария теперь не работает, спасибо вам.
Плашка оперативки стоит 2к руб.
//encode
...
if(function_exists('json_encode'))
return json_encode($var);
...
//decode
...
if(function_exists('json_decode'))
{
$json = json_decode($str,$useArray);
...
public static function encode($var)
{
switch (gettype($var))
...
case 'string':
if (($enc=strtoupper(Yii::app()->charset))!=='UTF-8')
$var=iconv($enc, 'UTF-8', $var);
if(function_exists('json_encode'))
return json_encode($var);
...
В остальных случаях там своя обработка. И да, вопрос: часто ли вы кодируете в json обычные строки? )
return '[' . join(',', array_map(array('CJSON', 'encode'), $var)) . ']';
function_exists
столько съедает?) и (б) почему потребление памяти на мегабайт меньше?function_exists
— это, конечно, восторг)это, конечно, восторг
assert(false === function_exists('foo'), 'Foo should not exists');
eval('function foo () { return "foo"; }');
assert(true === function_exists('foo'), 'Foo should exists');
hhvm speedtest.php
string(32) "Test case elements count: 113530"
string(31) "Execution time: 2.4736559391022"
string(12) "42.594744 MB" //memory_get_usage(true)
string(13) "140.213176 MB" //memory_get_peak_usage(true)
/usr/bin/php5 speedtest.php
string(32) "Test case elements count: 113530"
113530string(31) "Execution time: 6.6452739238739"
string(13) "215.744512 MB" //memory_get_usage(true)
string(13) "277.348352 MB" //memory_get_peak_usage(true)
hhvm speedtest.php
string(32) "Test case elements count: 113530"
113530string(32) "Execution time: 0.37734508514404"
string(12) "42.619448 MB" //memory_get_usage(true)
string(12) "140.24484 MB" //memory_get_peak_usage(true)
/usr/bin/php5 speedtest.php
string(32) "Test case elements count: 113530"
113530string(32) "Execution time: 0.71565389633179"
string(13) "233.832448 MB" //memory_get_usage(true)
string(12) "290.97984 MB" //memory_get_peak_usage(true)
Вы всё еще используете CJSON?