21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Werewolf
Profil
Zdravím.

Chci se ujistit, že mi neutečou desetiny sekund při zrychlování operací, které trvají tisíciny sekundy.

Doufám, že se mnou nevymetete a řeknete mi odpověď, což nebývá časté.

Co je na PHP (třeba druh operací nebo funkcí) nejpomalejší a co je naopak nejrychlejší?
Také bych se chtěl zeptat, jestli je serializace pomalá a jestli je ukládání serializovaného pole do DB dobré řešení.

Díky za odpovědi
Majkl578
Profil
Werewolf:
Co je na PHP nejpomalejší
Vydávání nových verzí a opravování chyb.

co je naopak nejrychlejší
Prázdný řádek.

jestli je serializace pomalá
Si zkus serializovat velké pole/objekt.
$ary = array();
for ($i = 0; $i < 50; $i++) {
	for ($j = 0; $j < 50; $j++) {
		$ary[$i][$j] = str_repeat('x', rand(10, 20));
	}
}

$x = microtime(true);
serialize($ary);
echo microtime(true) - $x;


je ukládání serializovaného pole do DB dobré řešení
Podle mě není. Ale asi záleží na konkrétním příkladu.
AM_
Profil
Největší zabiják výkonu je mnoho dotazů na databázi. Začátečníci často píší dotazy do PHP cyklů, protože je to pro ně intuitivně nejbližší a nejjednodušší řešení, při velkém objemu dat to ale server zabije. Je dobré vědět, že i vícenásobné INSERTy a UPDATy se dají napsat do jednoho dotazu, tak i velice složité selecty přes několik tabulek.
Práce se soubory je také řádově rychlejší, než práce s DB, proto u hodně vytížených stránek se vyplatí obsah databáze (nejlépe celé vygenerované bloky HTML) cachovat do souborů.

Dále se hodně mluví o mnoha includovaných souborech, proto některé open-source projekty (např. české nette, dibi) se vydávají v "Developement" (plná adresářová struktura s komentáři") a "Minified" (jeden soubor, odstraněny komentáře a bílé znaky) verzi.

To je z "dobře známých zabijáků" asi všechno, další na řadě jsou tragicky napsané algoritmy, které se cyklí a cyklí a server padá a padá.
DoubleThink
Profil *
AM:
Největší zabiják výkonu je mnoho dotazů na databázi
Obecně síťová komunikace nebo komunikace s jinými procesy.

některé open-source projekty (např. české nette, dibi) se vydávají v "Developement" (plná adresářová struktura s komentáři") a "Minified" (jeden soubor, odstraněny komentáře a bílé znaky) verzi.
Ne kvůli výkonu, ale kvůli úspoře místa. Programátor pak na server může uploadovat třímegovou skupinu souborů místo osmimegové.

Řekl bych, že víc než procesorový čas začátečníci drancují spíš paměť serveru. Natahují celé soubory, když potřebují jeden řádek. Nechávají načtené obrázky, když už je nepotřebují. A tak dále.

Werewolf:
9 z 10 případů, když se někdo ptá na tohle, nepotřebuje řešit tento problém.
Zaměř svou pozornost jinam, než na to, jestli je rychlejší for nebo foreach.
AM_
Profil
DoubleThink:
Obecně síťová komunikace nebo komunikace s jinými procesy.
Jasně, ale kolik začátečníků má v kódu "obecnou síťovou komunikaci", natož pak v nějakých nešikovných cyklech :) ve srovnání s chybným použití MySQL jich bude minimum.

Ne kvůli výkonu, ale kvůli úspoře místa. Programátor pak na server může uploadovat třímegovou skupinu souborů místo osmimegové.
Cituji z http://zdrojak.root.cz/clanky/nette-framework-adresarova-struktura-aplikace/
"Skutečně se ukazuje, že jedním z největších zabijáků výkonu PHP je načítání velkého množství souborů (navíc nejsou-li absolutně adresováné). "
Davidovi bych věřil, že ví, o čem mluví :) Navíc koho dneska zajímá 400KB místa (zabalené nette ~300KB, rozbalené ~700KB).

9 z 10 případů, když se někdo ptá na tohle, nepotřebuje řešit tento problém.
Na tom se shodneme.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0