Comments 39
ну разница мизерная, +(un)serialize встроенная ф-я,.. так что на этом тоже думаю не стоит заморачиваться =)
0
спасибо, было интересно почитать. Лично я предпочитаю JSON так как удобней хранить данные и можно сразу в AJAX выдавать.
+1
Итог: serialize/unserialize быстрее всегда.
как так? у вас же на диаграмме serialize медленнее, чем json_encode.
как так? у вас же на диаграмме serialize медленнее, чем json_encode.
+2
Имелись в виду парные операции - т.е. кодирование сравнивалось с кодированием, декодирование - с декодированием.
0
Вы не использовали русский UTF-8 у нас JSON почему-то каждый не латинский символ кодировал в четырех сивольный код, так что размер как раз раздувался нереально
0
так правильно, яваскрипт получил escape последовательность.
0
ну насколько я знаю - у JS нет проблем с юникодом, в таком случае зачем искейпить русские символы?
0
это вы спросите у своего броузера
0
причем тут мой браузер? когда это продукт php-функций?
0
вы про какие символы спрашиваете? %uXXXили \uXXX в пхп?
http://pastie.org/242412 - вот все классно работает, в чем проблема то?
http://pastie.org/242412 - вот все классно работает, в чем проблема то?
0
ооо, сэкономлю еще 0.001 секунды. спасибо, мой сайт будет летать.
-2
микрооптимизация это потеря времени
+1
Всё зависит от масштабов. Если это часто выполняемая операция, я думаю не будет лишним потратить час на тесты.
0
Микрооптимизации должны сидеть в подкорке и делаться автоматически.
Руки сами не должны писать for (i = 0; i < count(array); i++).
Руки сами не должны писать for (i = 0; i < count(array); i++).
+3
Насчёт пост-инкремента согласен, но если этот цикл работает не очень много времени я всегда напишу i < count(array) чем перед циклом array_size = count(array) и i < array_size, потому что экономия несущесвенна, а читабельность и время страдает.
0
А я как раз с вами и согласен, Я пытался сказать, что у человека, профессионально пишущего код решение вопроса надо ли писать i < count(array) или count = count(array); i < count не должно занимать больше 0,001 секунды. :) И не в коем случае не являться предметом обсуждения.
+1
Я с вами полностью согласен. Я хотел сказать, что у человека, пишущего код профессионально, решение вопроса надо ли писать i < count(array) или array_size = count(array); i < array_size не должно занимать больше 0,001 секунды и ни в коем случае не являться предметом жаркой дискуссии.
-1
жаль что тема уже не обсуждается…
по поводу for (i = 0; i < count(array); i++) — мы как-то заинтересовались этим вопросом, решили проверить. вообще-то спор был, как джава и пхп это обрабатывают. в джаве, ясное дело, каждый раз вычисляться значение count, если массив не меняется, не будет. самое интересное — в пхп тоже не вычисляется каждый раз. скорее всего оптимизация интерпретатор…
возможно, опубликую данные теста
по поводу for (i = 0; i < count(array); i++) — мы как-то заинтересовались этим вопросом, решили проверить. вообще-то спор был, как джава и пхп это обрабатывают. в джаве, ясное дело, каждый раз вычисляться значение count, если массив не меняется, не будет. самое интересное — в пхп тоже не вычисляется каждый раз. скорее всего оптимизация интерпретатор…
возможно, опубликую данные теста
0
С точки зрения логики count — обычная функция, которая принимает параметром массив, а поэтому не совсем понятно почему она не должна исполняться каждый раз при вызове. Хотя я не претендую на знания приемов оптимизации PHP-интерпретатора.
0
У меня на других тестовых данных получилось что json_encode занимает в 3 раза меньше времени чем serialize. Выигрыш у json по компактности данных раза в 2.
Также для себя посчитал плюсом что json легко читается и позволяет искать что-либо в сжатом поле SQL запросом через LIKE, иногда приходится такое делать.
Также для себя посчитал плюсом что json легко читается и позволяет искать что-либо в сжатом поле SQL запросом через LIKE, иногда приходится такое делать.
+1
На самом деле на таких маленьких цифрах не очень показательно... Запустили бы хоть на 1000 раундов... Ну или на 100 раундов и по 10К элементов...
+2
Вижу, что вы не забыли использовать исключительно одинарные кавычки и echo вместо print’а. Это хорошо. Продолжайте в том же духе.
-2
Это тенденция большинства популярных языков программирования — к их «облегчению», этим грешат все, но мало кто из создателей говорит об этом (а если точнее никто), не будете же вы признавать, что новые возможности имеют недостатки.
Для новичков это оправдано, и база изучающих язык ввиду его «лёгкости» возростает, да и потом — как правило, новички не станут делать что-то громоздкое, т.е. в большинстве своём различия не так уж заметны.
Для новичков это оправдано, и база изучающих язык ввиду его «лёгкости» возростает, да и потом — как правило, новички не станут делать что-то громоздкое, т.е. в большинстве своём различия не так уж заметны.
0
Давно интересуюсь этим вопросом. Подкину пару мыслей:
1. Эксперимент был бы интереснее, и результаты сильнее бы отличались в те или иные стороны, если бы данные были разной длины и разного размера. Попробуйте сериализовать/десериализовать: очень короткие строки, очень длинные строки (главы из книг), целые числа и вещественные числа, массивы, и так далее.
2. Реализация serialize/unserialize в PHP имеет ряд особенностей (и мне это не очень нравится). К примеру, попробуйте сериализовать текст, содержащий перевод строки, а потом посмотрите, как выглядит уже сериализованная строка. То есть, используя serialize(), нельзя рассчитывать гарантированно получить однострочную строку, например, для передачи скрипту параметров методом GET. Поэтому часто после serialize() приходится использовать дополнительные функции для кодирования полученного результата, например base64 или url encode.
1. Эксперимент был бы интереснее, и результаты сильнее бы отличались в те или иные стороны, если бы данные были разной длины и разного размера. Попробуйте сериализовать/десериализовать: очень короткие строки, очень длинные строки (главы из книг), целые числа и вещественные числа, массивы, и так далее.
2. Реализация serialize/unserialize в PHP имеет ряд особенностей (и мне это не очень нравится). К примеру, попробуйте сериализовать текст, содержащий перевод строки, а потом посмотрите, как выглядит уже сериализованная строка. То есть, используя serialize(), нельзя рассчитывать гарантированно получить однострочную строку, например, для передачи скрипту параметров методом GET. Поэтому часто после serialize() приходится использовать дополнительные функции для кодирования полученного результата, например base64 или url encode.
0
Спасибо за проделанную работу.
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
я обычно заменяю на microtime(true) для наглядности ;), как не странно многие не знают о такой возможности
Ещё интересный факт:
Вывод прост: json предназначен для другого
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
я обычно заменяю на microtime(true) для наглядности ;), как не странно многие не знают о такой возможности
Ещё интересный факт:
class MyTest extends StdClass{
protected $test = 24;
public function test(){
echo $this->test, PHP_EOL;
}
}
$a = new MyTest();
$a->test1 = 'string';
$b = unserialize( serialize($a));
var_dump($b);
$b->test();
$c = json_decode(json_encode($a));
var_dump($c);
$c->test();
/*/ // вывод скрипта
object(MyTest)#2 (2) {
["test:protected"]=>
int(24)
["test1"]=>
string(6) "string"
}
24
object(stdClass)#3 (1) {
["test1"]=>
string(6) "string"
}
Fatal error: Call to undefined method stdClass::test() in /home/kandy/workspace/TelmeWeb/Telme/test.php on line 31
Call Stack:
0.0003 96944 1. {main}() /home/kandy/workspace/TelmeWeb/Telme/test.php:0
/**/
Вывод прост: json предназначен для другого
+3
Замечательная пометка про microtime(true), очень показательный пример с классом. Блеск.
0
В "спеке" по JSON'у говориться только об упаковке свойств объекта.
Про упаковку методов - ни слова.
Про упаковку методов - ни слова.
0
UFO just landed and posted this here
экономия на спичках, имхо.
0
Для полноты картины сравните с XML и Bencode.
Bencode - это формат, обеспечивающий максимально возможную скорость десериализации за счет отсутствия накладных расходов на парсинг и определение типов значений. Используется для кодирования torrent файлов.
Реализаций на PHP хватает. Например: http://www.pear.php.net/package/File_Bittorrent2/
Bencode - это формат, обеспечивающий максимально возможную скорость десериализации за счет отсутствия накладных расходов на парсинг и определение типов значений. Используется для кодирования torrent файлов.
Реализаций на PHP хватает. Например: http://www.pear.php.net/package/File_Bittorrent2/
0
UFO just landed and posted this here
Sign up to leave a comment.
Производительность кодирования и декодирования serialize и json