В каких случаях лучше использовать json_encode (), чем использовать serialize ()? - PullRequest
3 голосов
/ 21 сентября 2009

Это все, что мне нужно спросить. Проверил руководство по PHP и увидел сообщение пользователя, в котором говорится, что serialize на 45-90% медленнее, чем json_encode (он провел несколько тестов). Но как "медленно" медленно? Я могу найти много "против" материала, растущего вокруг, но ни один из которых не может относиться к новичку, как я.

Я только что написал скрипт, который кодировал массив в json, и еще один, чтобы декодировать его. Я сделал то же самое с сериализацией. Очевидно, это не скажет мне никаких существенных различий между ними.

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

Сделайте это 10000 раз (каждый), чтобы (мы надеемся) получить измеримое представление о различиях как в использовании памяти, так и во времени ЦП.

В основном разница не будет значительной с точки зрения производительности. Использование JSON полезно в двух конкретных случаях: для возврата в веб-браузер и для взаимодействия с другими приложениями (через веб-службы и другими средствами), особенно с платформами, не поддерживающими PHP.

2 голосов
/ 21 сентября 2009

Когда вы кодируете / сериализуете только пару объектов / массив, я бы сказал, что разница в скорости не будет такой важной: вы вообще не будете ее воспринимать.

Разница в том, что сериализация сделана специально для PHP; например, информация как классы не теряется при сериализации и может быть получена при десериализации.

С другой стороны, JSON не является специфическим для PHP, что означает, что это хороший формат обмена данными - его основное использование - обмен данными между Javascript и PHP.


Например, рассмотрим этот кусок кода:

class A {
    public $a;
    public function __construct($a) {
        $this->a = $a;
    }
}

$test = new A(10);

Теперь давайте сериализуем и десериализуем $ test:

var_dump(unserialize(serialize($test)));

Получаем:

object(A)[2]
  public 'a' => int 10

т.е. объект, экземпляр класса A.


Теперь давайте сделаем то же самое с JSON:

var_dump(json_decode(json_encode($test)));

Теперь у нас есть только экземпляр stdClass:

object(stdClass)[2]
  public 'a' => int 10

JSON удобен для обмена данными (информация о классе A важна для PHP, но, вероятно, не имеет особого смысла для другого приложения); но также имеет свои ограничения.

1 голос
/ 21 сентября 2009

Если вы передаете данные между одним приложением и другим, обычно почти всегда лучше использовать данные в кодировке JSON, а не сериализованные в PHP данные , так как последний формат является специфическим для PHP и не такой переносимый, как JSON.

Даже в ситуации, когда и сервер, и клиент основаны на PHP, вам следует использовать переносимый формат, такой как JSON, чтобы разрешить создание новых клиентов в будущем без необходимости изменять формат ответа с сервера.

Я сам не проводил сравнительный анализ этих двух, но если вы обнаружите, что кодировка json быстрее, чем сериализация, то у вас больше причин использовать ее.

Кроме того, я предпочитаю данные в кодировке JSON, поскольку их легче читать, чем сериализованные данные, и их можно быстро бросить в firebug для визуализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...