În ceea ce scenarii este mai bine să utilizați json_encode () decât să utilizeze serialize ()?

voturi
27

Cam asta e tot ce am nevoie să întreb. Verificat manualul PHP și a văzut un post de utilizator spunând că serializare este de 45-90%, mai lent decât json_encode (el a fugit niște repere). Dar cum „lent“ este lent? Pot să găsesc o mulțime de „versus“ chestii asupra lui în jur, dar nici unul dintre care un începător ca mine se poate referi la.

Tocmai am scris un script care codificat o matrice în JSON și altul să-l decodeze. Am făcut același cu serializare. Obviuously care nu-mi va spune orice diferențe semnificative între ele.

Întrebat 21/09/2009 la 02:50
de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
3

Face acest lucru de 10.000 de ori (fiecare) până la (sperăm) obține o idee măsurabilă a diferențelor atât utilizarea memoriei și timp CPU.

Cea mai mare parte diferența nu va fi semnificativă în termeni de performanță. Utilizarea JSON este utilă în două situații particulare: pentru revenirea la un browser Web și pentru interoperabilitatea cu alte aplicații (prin intermediul serviciilor web și alte mijloace), în special cele pe platforme non-PHP.

Publicat 21/09/2009 la 02:55
sursa de către utilizator

voturi
1

Dacă transferați date între o aplicație și alta, de obicei , aproape întotdeauna mai bine pentru a utiliza JSON codificate de date , mai degrabă decât serializate PHP date ca mai târziu este un format specific PHP și nu la fel de portabile ca JSON.

Chiar și într-o situație în care atât server și client sunt ambele bazate pe PHP, se cuvine să utilizați un format portabil, cum ar fi JSON pentru a permite crearea de noi clienți, în viitor, fără a fi nevoie să se schimbe formatul de răspuns de la server.

Eu nu am făcut nici o analiză comparativă a acestor două mine, dar dacă ai găsi acea codificare JSON este mai rapid decât serializare, decât toate motivele să-l folosească.

De asemenea, prefer JSON codificate de date, deoarece este mai ușor de citit decât datele serializate și pot fi rapid aruncate în Firebug pentru a fi vizualizate.

Publicat 21/09/2009 la 03:05
sursa de către utilizator

voturi
2

Când codifica numai / serializarea un cuplu de obiecte / matrice, aș spune că diferența de viteză nu va fi atât de important: tu genherally nu va percepe.

Diferența este că serializare este făcută în special pentru PHP; de exemplu, informații sur ca clase nu sunt pierdute cu serializare, și pot fi recuperate atunci când unserializing.

Pe de altă parte, JSON nu este specifică PHP, ceea ce înseamnă că este un format bun schimb - utilizarea sa primară fiind acela de a face schimb de date între Javascript si PHP.


De exemplu, ia în considerare această bucată de cod:

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

$test = new A(10);

Acum, să serialize și testul $ unserialize:

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

Primim :

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

adică, un obiect, de exemplu de clasă A.


Acum, să facem același lucru cu JSON:

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

Avem acum doar o instanță de stdClass:

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

JSON este frumos de a face schimb de date (The nformation „clasa A“ este important pentru PHP, dar probabil nu are prea mult sens pentru o altă aplicație); dar are limitele sale prea.

Publicat 21/09/2009 la 03:07
sursa de către utilizator

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