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/
http://nnm.ru/blogs/Dorantor/chto_bystree_htmlspecialchars_ili_str_replace_dlya_rssxml/
Ī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.
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?
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?
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)
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.