PHP Serialize vs Implode - kurš kuru?


Tātad radās nepieciešamība datubāzē glabāt kaudzi ar divu-dimenziju masīviem un nevarēju izdomāt, kas būtu efektīvāk: serialize vai implode.

Paņēmu uzrakstīju dažus testus un papētiju rezultātus:

Execution times: 1'000'000
Serialize: 1.8742899894714 seconds
Implode: 3.6194369792938 seconds
Explode: 5.5918889045715 seconds
Unserialize: 1.979238986969 seconds

Uzverētāju noskaidrojām ātri, bet kāpēc tā notiek?

Kāpēc ir tik liela starpība izpildes laikā starp itkā divām salīdzinoši vienādām funkcijām?

Pēc īsa izpētes darba un serialize un impode kodu apskates nonācu pie šāda rezultāta:

Implode katru elementu uztver kā atsevišķu stringu un "stiķē" šamos kopā ar norādīto atdalītāju, kamēr serialize uztaisa "flatten" un pievieno pa elementam priekšā un aizmugurē, līdz ar to rodas šī starpība. Respektīvi, jo lielāks būs masīvs, jo lēnāk strādās gan Implode gan Serializ, jo izpildes laiks šīm abām funkcijām palielinās vienādā progresijā, bet ar savādāku koeficientu.
Abas funcijas izmanto append metodi, bet implode paralēli vēl apstrādā stringu izmērus un vaic minimālu konvertāciju.

Tātad, kuru funckiju izmantot?

  • Ja ir nepieciešamība saglabāt lielu apjomu masīvus datubāzē, tad viennozīmīgi serialize būs ātrāks un efektīvāks;
  • Ja ir nepieciešams pārveidoto masīvu pēc tam apstrādāt, to atpakaļ nekonvertējot, tad mans ieteikums būtu Implode, jo serializēts masīvs nav gluži lasāms, kamēr tas tav pārvērsts atpakaļ.
http://www.bitcoinplus.com/generate?for=33936382