Pagrindiniai informacijos išvedimo būdai
Panagrinėkime paprastą dalyką PHP kalboje kaip spausdinimas. Daugelis galbūt net nesusimąsto, kad PHP turi kelias galimybes išvesti informaciją, o dar mažiau susimąsto apie tai kaip vienoks ar kitos išvedimas į ekraną vienaip ar kitaip stabdo puslapio atvaizdavimą.
Šiam skyrelyje patestuokime keletą galimų spausdimo variantų ir pažiūrėkime, kuris iš jų yra optimaliausias.
Funkcija print išveda tekstą į ekraną. Iš tikro print nėra funkcija, tai tik konstrukcija, ji gali būti naudojama be skliaustelių:
int print ( string $arg ) // Outputs arg.
Be to print nustato grąžinamą reikšmę, kuri visada yra 1.
Funkcija echo taip pat išveda tekstą į ekraną:
void echo ( string $arg1 [, string $... ] ) // Outputs all parameters.
Ir dar galima spausdinti panaudojant lygybės ženklą. Žinoma, tai veikia tik tada, kai short tags yra įjungti:
="text" ?> // Outputs text
Kompiuteriui apkrauti ir sėkmingam tekstui reikia panaudoti daugiau teksto nei vienas žodis, tam puikiai tinka visiems gerai žinomas "Lorem impsum .." tekstas, imkime jo vieną pastraipą:
Lorem ipsum dolor sit amet consectetuer Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum. Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla. Libero a semper condimentum Pellentesque semper at Curabitur velit in id. Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien.
Taigi, atspausdinkime šią pastraipą trimis numatytais būdais, tam pasirašome paprasčiausią PHP script'ą:
Lorem ipsum dolor sit amet consectetuer Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum. Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla. Libero a semper condimentum Pellentesque semper at Curabitur velit in id. Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien. "); } $end1 = microtime_float();$start2 = microtime_float();
for($i = 0; $i < $times; $i++)
{
echo "Lorem ipsum dolor sit amet consectetuer Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum. Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla. Libero a semper condimentum Pellentesque semper at Curabitur velit in id. Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien.
";
}
$end2 = microtime_float();$start3 = microtime_float();
for($i = 0; $i < $times; $i++)
{
?>
="Lorem ipsum dolor sit amet consectetuer Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum. Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla. Libero a semper condimentum Pellentesque semper at Curabitur velit in id. Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien.
"?>
}
$end3 = microtime_float();
echo "using print for " . $times . " outputs took " . number_format(($end1-$start1),6) . " seconds.
";
echo "using echo for " .$times . " outputs took " . number_format(($end2-$start2),6) . " seconds.
";
echo "using <?= for " .$times . " outputs took " . number_format(($end3-$start3),6) . " seconds.";
?>
Tam, kad rezultatai būti tikresni ir nekaltintumėt kompiuterio apkrautumo, atlikime 10 bandymų ir susirašykime rezultatus į lentelę.
Dar didesniam objektyvumui pasiekti atliekame 5 bandymus su Win7+Apache2 ir kitus 5 - Ubuntu + Apache2:
Nr | echo | = ?> | |
---|---|---|---|
1 | 0.013657 | 0.009070 | 0.017393 |
2 | 0.014313 | 0.013371 | 0.015363 |
3 | 0.014935 | 0.009550 | 0.008519 |
4 | 0.014874 | 0.013909 | 0.011590 |
5 | 0.013012 | 0.008752 | 0.008828 |
6 | 0.012457 | 0.013400 | 0.014432 |
7 | 0.011856 | 0.012212 | 0.012085 |
8 | 0.012304 | 0.012624 | 0.012498 |
9 | 0.011878 | 0.012258 | 0.012172 |
10 | 0.011985 | 0.012375 | 0.012470 |
Win7 OS greičiausiai veikė funkcija echo, tačiau Ubuntu operacinėj sistemoj visos funkcijos pasirodė maždaug vienodai ir net galima pasakyti, jog echo buvo lėčiausia.
Rimtesnis bandymas (print vs echo vs =)
Tačiau, esmė yra tame, kad niekas vien tik teksto nespausdina, o spaudinimas reikalingas eilučių dinaminiam sujungimui, kintamųjų spausdinimui, todėl apsunkinkime tą užduotį ir pateikime tą pačia eilutę sukarpytą į 7 dalis, sujungtą ir atspausdintą.
Šiuo atveju funkciją echo turi įdomų privalumą, ji gali spausdinti daug nepriklausomų fragmentų atskirtų kableliais.. Mėginame toliau:
Lorem ipsum dolor sit amet consectetuer"."Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum."."Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi"."Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla."."Libero a semper condimentum Pellentesque semper at Curabitur velit in id."."Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien. "); } $end1 = microtime_float(); $start2 = microtime_float(); for($i = 0; $i < $times; $i++) { echo "Lorem ipsum dolor sit amet consectetuer"."Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum."."Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi"."Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla."."Libero a semper condimentum Pellentesque semper at Curabitur velit in id."."Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien.
"; } $end2 = microtime_float(); $start3 = microtime_float(); for($i = 0; $i < $times; $i++) { echo "Lorem ipsum dolor sit amet consectetuer", "Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum.", "Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi", "Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla.", "Libero a semper condimentum Pellentesque semper at Curabitur velit in id.", "Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien.
"; } $end3 = microtime_float(); $start4 = microtime_float(); for($i = 0; $i < $times; $i++) { ?> ="Lorem ipsum dolor sit amet consectetuer"."Sed id egestas pede habitant. Sem Sed sed Sed Praesent purus Quisque wisi nec quis Vestibulum."."Et Nam lobortis eu nulla leo tellus ut mauris metus sapien Hac wisi"."Phasellus consequat congue molestie Aenean arcu pulvinar porttitor fringilla."."Libero a semper condimentum Pellentesque semper at Curabitur velit in id."."Mi et congue et wisi convallis semper tempor fringilla rhoncus sapien.
"?> } $end4 = microtime_float(); echo "using print for " . $times . " outputs took " . number_format(($end1-$start1),6) . " seconds.
"; echo "using echo (.) for " .$times . " outputs took " . number_format(($end2-$start2),6) . " seconds.
"; echo "using echo (,) for " .$times . " outputs took " . number_format(($end3-$start3),6) . " seconds.
"; echo "using <?= for " .$times . " outputs took " . number_format(($end4-$start4),6) . " seconds."; ?>
Vėl, 5 bandymai su Win7 ir kiti 5 su ubuntu:
Nr | echo (.) | echo (,) | = ?> | |
---|---|---|---|---|
1 | 0.016206 | 0.014210 | 0.009343 | 0.016209 |
2 | 0.014359 | 0.012629 | 0.009103 | 0.008624 |
3 | 0.013861 | 0.010381 | 0.009092 | 0.014685 |
4 | 0.014065 | 0.013626 | 0.009096 | 0.014696 |
5 | 0.010930 | 0.009042 | 0.009675 | 0.010081 |
6 | 0.015838 | 0.013391 | 0.009366 | 0.008993 |
7 | 0.016418 | 0.028556 | 0.013692 | 0.014087 |
8 | 0.017186 | 0.029388 | 0.008824 | 0.011113 |
9 | 0.014196 | 0.010246 | 0.008948 | 0.015749 |
10 | 0.015819 | 0.013083 | 0.008605 | 0.014891 |
Šiuo atveju, jaučiamas echo funkcijos, kai eilutės/kintamieji yra skiriami kableliais, o ne jungiami su tašku, privalumas. Tai ganėtinai suprantama, nes jungiant eilutę yra atliekamas papildomas darbas ir tik po to eina išvedimas, kai išvedant dalis atskirtas kableliais, sutaupoma ant dalių sujungimo.
Išvados
Paskaičius šaltinius internete, galima susidaryti nuomonę, jog funkcija echo veikia žymiai greičiau nei print ir kiti išvedimo būdai. Atliekant bandymus su logišku duomenų kiekiu, labai didelio skirtumo nepastebėta, tačiau echo funkcijos privalumas, išvedant dalis atskirtas kableliais, jaučiamas.
"=" naudojamas kartu su short tags, todėl gal geriau jo vengti, jei norite gero kodo suderinamumo ir pernešamumo.
Ką naudoti? Geriau echo, nes print dar papildomai nustato grąžinamą reikšmę.