¿En qué escenarios es mejor usar json_encode () que usar serialize ()?

votos
27

Eso es todo lo que necesito preguntar. Comprobé el manual de PHP y vi una publicación de usuario que decía que serializar es un 45-90% más lento que json_encode (ejecutó algunos puntos de referencia). ¿Pero cómo lento es lento? Puedo encontrar muchas cosas en contra que se extienden por todas partes, pero ninguna de las cuales puede relacionarse con un principiante como yo.

Acabo de escribir un script que codificó una matriz en json y otra para decodificarla. Hice lo mismo con serializar. Obviamente eso no me dirá ninguna diferencia significativa entre ellos.

Publicado el 21/09/2009 a las 02:50
por usuario
En otros idiomas...                            


3 respuestas

votos
3

Haga eso 10.000 veces (cada uno) para (con suerte) obtener una idea medible de las diferencias en el uso de la memoria y el tiempo de CPU.

En su mayoría, la diferencia no será significativa en términos de rendimiento. El uso de JSON es útil en dos circunstancias particulares: para volver a un navegador web y para la interoperabilidad con otras aplicaciones (a través de servicios web y otros medios), particularmente aquellos en plataformas que no son PHP.

Respondida el 21/09/2009 a las 02:55
fuente por usuario

votos
1

Si está transfiriendo datos entre una aplicación y otra, generalmente es casi siempre mejor utilizar datos codificados JSON en lugar de datos serializados de PHP , ya que el último es un formato específico de PHP y no es tan portátil como JSON.

Incluso en una situación en la que tanto el servidor como el cliente están basados ​​en PHP, le corresponde usar un formato portátil como JSON para permitir la creación de nuevos clientes en el futuro sin tener que cambiar el formato de respuesta del servidor.

No he hecho ningún benchmarking de estos dos, pero si descubres que la codificación json es más rápida que la serialización, hay más razones para usarla.

Además, prefiero los datos codificados JSON ya que es más fácil de leer que los datos serializados y se pueden lanzar rápidamente en Firebug para visualizarlos.

Respondida el 21/09/2009 a las 03:05
fuente por usuario

votos
2

Cuando solo codifica / serializa un par de objetos / matriz, yo diría que la diferencia de velocidad no será tan importante: usted, en general, no la percibirá.

La diferencia es que serialize está hecho especialmente para PHP; por ejemplo, información sur ya que las clases no se pierden con la serialización, y se pueden recuperar al deserializar.

Por otro lado, JSON no es específico de PHP, lo que significa que es un buen formato de intercambio; su uso principal es intercambiar datos entre JavaScript y PHP.


Por ejemplo, considere esta pieza de código:

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

$test = new A(10);

Ahora, serialicemos y extraterminemos $ test:

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

Obtenemos :

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

es decir, un objeto, instancia de clase A.


Ahora, hagamos lo mismo con JSON:

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

Ahora solo tenemos una instancia de stdClass:

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

JSON es agradable para intercambiar datos (la información 'clase A' es importante para PHP, pero probablemente no tiene mucho sentido para otra aplicación); pero tiene sus limitaciones también.

Respondida el 21/09/2009 a las 03:07
fuente por usuario

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