Dans quels scénarios est-il préférable d'utiliser json_encode () que d'utiliser serialize ()?

voix
27

C'est tout ce que je dois demander. Vérifié le manuel PHP et a vu un poste utilisateur disant que serialize est 45-90% plus lent que json_encode (il a couru quelques repères). Mais comment « lent » est lent? Je peux trouver beaucoup de « et » choses tentaculaire autour, mais dont aucun un débutant comme moi peuvent rapporter.

Je viens d'écrire un script qui encodé un tableau dans JSON et un autre pour le décoder. Je l'ai même avec serialize. Obviuously qui ne me dira pas de différences significatives entre eux.

Créé 21/09/2009 à 02:50
utilisateur
Dans d'autres langues...                            


3 réponses

voix
3

Est-ce que 10.000 fois (chacun) à (je l'espère) faire une idée mesurable des différences dans les deux utilisation de la mémoire et le temps CPU.

La plupart du temps la différence ne sera pas significatif en termes de performance. L'utilisation JSON est utile dans deux circonstances particulières: pour revenir à un navigateur Web et pour l'interopérabilité avec d'autres applications (via des services Web et d'autres moyens), en particulier celles sur les plates-formes non-PHP.

Créé 21/09/2009 à 02:55
source utilisateur

voix
1

Si vous transférez des données entre une application et un autre, il est généralement presque toujours préférable d'utiliser encodées JSON données plutôt que sérialisés PHP données que le dernier est un format spécifique à PHP et non comme portable JSON.

Même dans une situation où le serveur et le client sont à la fois en PHP, il vous appartient d'utiliser un format portable comme JSON pour permettre la création de nouveaux clients dans l'avenir sans avoir à modifier le format de réponse du serveur.

Je ne l'ai pas fait de l'analyse comparative de ces deux moi-même, mais si vous trouvez que le codage JSON est plus rapide que la sérialisation, que d'autant plus de raison de l'utiliser.

Aussi, je préfère les données codées JSON comme il est plus facile à lire que les données sérialisés et peut rapidement être jeté dans Firebug à visualiser.

Créé 21/09/2009 à 03:05
source utilisateur

voix
2

Lorsque vous ne codez / sérialisation deux objets / tableau, je dirais que la différence de vitesse ne sera pas si important que cela: vous ne percevra pas genherally il.

La différence est que serialize est faite spécialement pour PHP; par exemple, des informations sur les classes ne sont pas comme perdu avec serialize, et peut être récupéré lorsque la délinéarisation.

D'autre part, JSON est pas spécifique à PHP, ce qui signifie qu'il est un bon format d'échange - son utilisation principale étant d'échanger des données entre Javascript et PHP.


Par exemple, considérons ce morceau de code:

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

$test = new A(10);

Maintenant, la sérialisation et de unserialize $ test:

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

On a :

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

par exemple, un objet, instance de la classe A.


Maintenant, nous allons faire la même chose avec JSON:

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

Nous avons maintenant seulement une instance de stdClass:

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

JSON est agréable d'échanger des données (la nformation « classe A » est important pour PHP, mais n'a probablement pas beaucoup de sens pour une autre application); mais a aussi ses limites.

Créé 21/09/2009 à 03:07
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more