PHP: Mīti un patiesības par ātrdarbību

Ātrdarbība, kods pārskatāmība, koda loģika, u.c. ir stūrakmeņi, starp kuriem nemitīgi jālavierē veidojot lielāku vai mazāku PHP projektu. Sākšu ar to, ka jebkurš mērījums ir nosacīts un ļoti lielā mērā atkarīgs gan no vides gan no PHP versija.

Ātrdarbība, kods pārskatāmība, koda loģika, u.c. ir stūrakmeņi, starp kuriem nemitīgi jālavierē veidojot lielāku vai mazāku PHP projektu. Sākšu ar to, ka jebkurš mērījums ir nosacīts un ļoti lielā mērā atkarīgs gan no vides gan no PHP versija.

Tā piemēram, tiek uzskatīts, ka PHP 4.4.6 ir par 33% ātrāks nekā PHP 5.2.2
http://barry.wordpress.com/2007/05/28/php-4-vs-php-5-basic-benchmark/

Savukārt PHP 5.2 ir ātrāks nekā PHP 5.1.6
http://www.improvedsource.com/view.php/Web-Performance/11/

Par laimi (nelaimi) ne vienmēr ir iespējams izvēlēties platformu, savukārt gandrīz vienmēr ir iespēja izvēlēties to vai citu funkciju.

Daži piemēri:

Asociatīvie masīvi. $a[„viens”] vs $a[viens]
No Quotes - avg 0.008120 seconds
* Quotes - avg 0.003794 seconds

preg_replace() vs. ereg_replace() vs. str_replace()
* str_replace() - avg 0.001622 seconds
preg_replace() - avg 0.003306 seconds
ereg_replace() - avg 0.002706 seconds

Static vs. Non Static Methods
* Static Method - avg 0.001358 seconds
Non-Static Method - avg 0.002631 seconds

Error Suppression vs. None
Error Suppression - avg 0.009935 seconds
* No Error Suppression - avg 0.006685 seconds

Split() vs. Explode()
split() - avg 0.002042 seconds
explode() - avg 0.002652 seconds

(!) citi avoti norāda, ka explode ir ātrāks par split, kas, manuprāt, ir loģiski, jo split dalīšanai izmanto regex. Secība droši vien būtu šāda: explode, preg_split un tikai tad split;

While() vs. For() vs. Foreach()
* while - avg 0.000309 seconds
for - avg 0.000330 seconds
foreach - avg 0.000337 seconds

is_numeric() vs. ctype_digit()
ctype_digit() - avg 0.002235 seconds
* is_numeric() - avg 0.001969 seconds


Echo vs. Print
Echo - avg 0.001092 seconds
Print - avg 0.001188 seconds

Numeric vs. Associative Foreach
Numeric foreach - avg 0.001630 seconds
Associative foreach - avg 0.001663 seconds

" vs. '
' - avg 0.000893 seconds
" - avg 0.000897 seconds

= = = ir ātrāks par ==

include() ir ātrāks par include_once()

++$i ir ātrāks nekā $i++

time() ir ātrāks nekā date('U')

(int) ir ātrāks par intval()

Par PDO_mysql vs mysql vs mysqli gan dažādi viedokļi. Piem, laacz testā noskaidrojies, ka ātrākais ir mysqli, pēc kura nedaudz atpaliek pdo_mysql, savukārt Devolio blogā atrodamā informācija liecina, ka PDO ir pat līdz 90% ātrāks nekā mysql.
Lai vai kā PDO_mysql ir ievērības cienīgs abstract layers.


Davolio - http://www.devolio.com/blog/archives/314-Practical-and-impractical-PHP-Optimizations.html

Menhir - http://blog.menhir.be/2008/09/16/speed-tests-in-php-and-javascript/

http://bitfilm.net/2007/08/24/tips-for-faster-php-scripts/
http://bitfilm.net/2007/09/07/more-tips-for-faster-php-scripts/

Laacz - http://laacz.lv/2007/06/29/db-abstrakcijas-leijeri/

 

 

Dalies:
Novērtē: 4 (10)

komentāri

deni2s

http://nnm.ru/blogs/Dorantor/chto_bystree_htmlspecialchars_ili_str_replace_dlya_rssxml/

bubu

Īsti nesaprotu, kas te ir runāts par mītiem par ātrdarbību?
Šeit pieminēto lietu mērījumi ir visai loģiskas. Un vismaz manā skatījuma atbilda tam, ko es domāju sagaidīt.

Ēriks

Un ko tu vēlējies sagaidīt?
Mīts, piemēram, ka print ir ātrāks par echo. Ir, bet - nenozīmīgi. Līdzīgi ir ar mītu, par masīvu tipiem.
Domāju šo sarakstiņu var vēl ilgi garināt, piem. kas būs ātrāks @funkcija vai try cache?

bubu

Es neko negribēju sagaidīt. Es vienk nesapratu, kas ir gribēts pateikt ar to visu augstāk uzrakstīto...

Kas ir ar tiem masīvu tipiem?

Ēriks

Pastāv uzskats, ka $mas[1] ir neitīvais C masīvs, bet $mas[\"viens\"] ir objekts, līdz ar ko - pēdējam vajadzētu būt smagākam un lēnākam, bet tā nav. (ok)

bubu

Ah, nu tas protams. php masīvi jau īstenībā nav masīvi, bet gan heštabulas, kurām liels pofigs par to, kas tiek lieots kā indekss.



Ko lasa citi?