« 1 2 »
Autor Zpráva
sentinelcz
Profil *
Zdravim vsechny,

Chtel bych co nejvice optimalizovat kod a mam dve moznosti (priznam se ze jsem hledal na netu a nenasel tuto pro me zakladni vec):

Struktura A,
<?php
echo "<div>";
// kus funkcniho kodu 1
echo "</div>";
echo "<div>";
// kus funkcniho kodu 2
echo "</div>";
?>

Struktura B,

<div>
<?php // kus funkcniho kodu 1 ?>
</div>
<div>
<?php // kus funkcniho kodu 2 ?>
</div>

Kterou strukturu mam pouzivat aby bylo zpracování co nejrychlejsi ?

Dekuji za odpoved
Alphard
Profil
nevím, která varianta je rychlejší, ale rozdíly budou zanedbatelné, optimalizaci soustřeď na věci jako jsou dotazy na databázi, zpracování řetězců, efektivní práce cyklů apod.
Dranel
Profil
sentinelcz
A optimalizuj také délku kódu.
souki
Profil
Dranel
proč?

sentinelcz
říká se, že první varianta je lepší. Nevím co je na tom pravdy.
anode
Profil
Optimalizaci soustřeď především na čitelnost kódu. Zrovna toto je zcela minimální rozdíl výkonu, který nebude mít žádný vliv. To už bych mohl rovnou říkat, že jsou lepší apostrofy než dvojité uvozovky, když v nich je konstatní řetězec. U toho se taky říká, že první varianta je lepší...
sentinelcz
Profil *
Děkuji za radu a mám jěstě jednu věc, která s tím souvisí.
Do proměnných ukládám kus HTML kódu a později to vypisuji.
Např.:
<?php
$test1 = "<div>bla bla bla</div><img src xxxxxxxxxxxxxxxxxxxxx docela dlouhy string />";
$test2 = "<span>bla bla bla</span>";
echo ="$test1";
?>
Nemůže mě to někde později vytrestat? Je to korektní?
Měsíček
Profil
echo = "$test1"; ?? Proč když stačí přeci jen echo $test1; ne?

Jinak já bych se přikláněl k první variantě ta druhá může být ve větších skriptech dosti nepřehledná.
sentinelcz
Profil *
Měsíček
Jo jasne, mas pravdu, ja to psal v rychlosti.
Jaky mas na to nazor? Je to korektni ? (ukladat kusy HTML kodu do promennych)
Měsíček
Profil
Já si myslím, že ukládat HTML tagy do proměnných není nic nebezpečnýho .. takže myslím, že to korektní je.
Alphard
Profil
sentinelcz
PHP interpretuje server a html až prohlížeč
ukládání tagů do proměnných není žádný problém a s výjimkou šablonovacích systémů běžná praxe
WertriK
Profil
Na netu jsem vyčenichal dobrý článek s optimalizací php kódu a hlavně jak co psát a co je jak pomalejší.
Bylo tam třeba, pokud se nepletu, že je lepší psát
echo "text ".$promenna."text";
než
echo "text $promenna text";
Ještě tam bylo srovnání s apostrofama
echo 'text '.$promenna.'text';

Bohužel už si to moc nepamatuju a ten web už neexistuje, pokud tady někdo kolem tohodle něco ví, mohl by se připojit taky do diskuse.

Našel jsem zajmavé čtivo http://www.ilia.ws/files/zend_performance.pdf
od 32 stránky
sentinelcz
Profil *
WertriK
Add1. To by se moc hodilo, hlavne by byly ucelene informace jak psat kod od zacatku spravne a ceho se vyvarovat.

Vim ze tecka pred je "spojovaci clen", ale neznam tecku za promennou.
Je ta tecka za promennou spravna ?
jaco
Profil
Bodka . je operátor na spájanie reťazcov, je jedno, či ho máš priamo zapísaný, alebo v premennej.

Čo sa týka rýchlosti:
echo "text $promenna text";
echo "text ".$promenna."text";
echo 'text '.$promenna.'text';

Prvý prípad bude najpomalší, pretože sa reťazec musí parsovať a potom v ňom nahradzovať premenná. Spojenie troch reťazcov v druhom prípade bude rýchlejšie. No a tretí prípad by mal byť najrýchlejší, pretože reťazce zapísané v úvodzovkách sa neprehľadávajú pre premenné.
To nie je nič nové, no rozdiel v rýchlosti bude minimálny, podľa mňa určite zanedbateľný. Takže používajte, čo vám osobne vyhovuje a čas šetrite inde.
sentinelcz
Profil *
Jsem docela rad, ze lidi zde pomohou i se zakladama.
Neni mi jeste jasny rozdil mezi
echo 'prvni text <br /> druhy text'
echo 'prvni text\n druhy text'
Me se to chova ve vysledku stejne.
Co mam pouzivat ?
Měsíček
Profil
nechová \n zalomí řádek v kódu <br> zalomí řádek ve stránce v prohlížeči.
nightfish
Profil
akorát mám dojem, že \n se v případě uzavření do apostrofů nevyhodnotí, tzn. nic se nezalomí, vypíše se (např.) test\ntest
Leo
Profil
Rekl bych, ze michani php a html kodu takovym divokym zpusobem jako je treba html kod v php promenne je to nejhorsi reseni, Leo
sentinelcz
Profil *
Leo
Jaké potíže mohou nastat?
Měsíček
Profil
Nevidím v tom Leo nic špatného .. zkus to kdyžtak rozvést.
jaco
Profil
sentinelcz
Měsíček
Myslím, že Leovi ide iba o prehľadnosť kódu.
Mastodont
Profil
jaco
Ještě rychlejší než ten tvůj třetí případ bude
echo 'text' , $promenna , 'text'; 

protože tam se nic spojovat nemusí :)
tiso
Profil
Myslím že Leovi ide o oddelenie vrstiev (aplikačnej a prezenčnej)...
Leo
Profil
"Myslím že Leovi ide o oddelenie vrstiev (aplikačnej a prezenčnej)..."

Bingo. Leo
Fibi
Profil *
Tak to tak čtu a napadlo mně proč tu rychlost vypisování neotestovat že ?
Zkusil sem vytvořit malej scriptik s cyklem na 100 000 opakování, při každém vypsal jedním z uvedených způsobů testovací řetězec a měřil sem rychlost provedeni scriptu. Výsledky :
echo "text $promenna text"; - 3.5236
echo "text ".$promenna."text"; - 3.2090
echo 'text '.$promenna.'text'; - 3.2240
echo 'text' , $promenna , 'text'; - 2.9812

Jsou to výsledky vždy po 5ti spuštěních scriptu, PC byl během té doby bez jakýchkoliv dalších dotazů na apache a před každou sérií jsem apache resetnul.

Test je samozřejmě syntetický, v praxi bude někdo dost těžko vypisovat 100 000 řádků :-)
No řek bych že správnými indexy v tabulce se obvykle docílí lepšího zrychlení :-)
A další test k původní otázce :
?>
<div>
<?php echo 'text' , $promenna , 'text'; ?>
</div>
<?php

za : 7,0168
A
echo '<div>text' , $promenna , 'text</div>';

za : 6,749

Stejne podminky jako u samostných řetězců.
Měsíček
Profil
Fibi :) zajímavý něják tak jsem to odhadoval.

Mohl by jsi zde prosím zveřejnit kód, který zachycuje rychlost a čas provedení skriptu?

Ještě pár věcí bych si rád ověřil.
Fibi
Profil *
Jasně celý testovací kód :
$tmp=explode(" ",microtime());
$startStranky = $tmp[1]+$tmp[0];

$promenna = 'Testovaci retezec vcelku nepodstatne, ale nutne';
for ($i = 0; $i <= 100000; $i ++):
	//echo "text $promenna text"; 
	//echo "text ".$promenna."text"; 
	//echo 'text '.$promenna.'text';
	//echo 'text' , $promenna , 'text';
	
endfor;

$tmp=explode(" ",microtime());
$dobaZpracovani=number_format(($tmp[1]+$tmp[0])-$startStranky,7);
echo "<br /><strong>Stráka byla zpracována za $dobaZpracovani s. </strong>";

Timy
Profil
Co místo toho všeho používat třeba Nette::Html?
Retal
Profil
Oboje je špatně, použij šablony, důvod viz Leo.
sentinelcz
Profil *
Fibi
Díky za příklady, také si to zkusím, myslím že jsou velmi užitečné.
Vrátil bych se k tomu co mě vedlo vložit HTML kód do proměnné.
Ten důvod byl právě citelnost kódu. Je to jednoduchá šablona která vypisuje hodnoty a mění podle těchto hodnot i design.
Jednoduše vyhodnocuji podmínku (testuji cca 40 hodnot jestli jsou A, nebo B)
v A mám již zmíněný HTML kód a když to přeženu , je to dejme tomu 10 řádek
v B mám jiný HTML kód a ten má dejme tomu 50 řádek.
To všechno dělám , jak jsem psal, 40 krát.
Pokud bych nepoužil proměnnou a vypisoval bych samotné HTML kódy, měl bych stránku s kódem daleko objemnější.
Takto je ta stránka s kódem poloviční.
Jaký máte na to názor ?
Měsíček
Profil
Že je rychlejší i lepší psát ve většině případů HTML do echa než uzavírat a zase otevírat zápis PHP, ale je ještě jedna možnost, žel pomalá.

$proměnná = <<<XXX

<table border="1">
<tr><td> $proměnná_2 </td></tr>
</table>

<span style="background: gold;"> Cokoliv </span>

XXX;
« 1 2 »

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