Quando você só codificar / serializar um par de objetos / array, eu diria que a diferença de velocidade não será tão importante: você genherally não vai percebê-lo.
A diferença é que serialize é feito especialmente para PHP; por exemplo, sur informações como classes não são perdidos com serialize, e pode ser recuperado quando unserializing.
Por outro lado, JSON não é específico para PHP, o que significa que é um formato de intercâmbio bom - seu uso principal é a troca de dados entre JavaScript e PHP.
Por exemplo, considere este pedaço de código:
class A {
public $a;
public function __construct($a) {
$this->a = $a;
}
}
$test = new A(10);
Agora, vamos serializar e $ test unserialize:
var_dump(unserialize(serialize($test)));
Nós temos :
object(A)[2]
public 'a' => int 10
ou seja, um objecto, instância de classe A.
Agora, vamos fazer o mesmo com JSON:
var_dump(json_decode(json_encode($test)));
Nós agora só tem uma instância de stdClass:
object(stdClass)[2]
public 'a' => int 10
JSON é bom para a troca de dados (o nformação 'classe A' é importante para PHP, mas provavelmente não tem muito sentido para outra aplicação); mas tem suas limitações também.