Когда вы кодируете / сериализуете только пару объектов / массив, я бы сказал, что разница в скорости не будет такой важной: вы вообще не будете ее воспринимать.
Разница в том, что сериализация сделана специально для 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, но, вероятно, не имеет особого смысла для другого приложения); но также имеет свои ограничения.