Optimisation PHP

olivieri

WRInaute impliqué
Je cherche a optimiser encore et toujours :wink:

Est il préférable, au niveau vitesse de réponse du serveur, d'avoir des blocs php <? ?> quand on en a besoin comme par exemple

Code:
<html>
<head>
<?echo montitle();?>
</head>
<body>
<?echo untexte();?>
<br>
<?echo unautretexte();?>
</body>
</html>

ou bien avoir un seul bloc php avec toutes les lignes html en echo

Code:
<?
echo "<html>";
echo "<head>";
echo "<title>mon title</title>";
echo "<body>";
echo "un texte";
echo "<br>";
echo "un autre texte";
echo "</body>";
echo "</html>";
?>

Et, il y a t'il une différence, surtout au niveau vitesse d'affichage, entre les fonctions echo() et print() ?

Merci :wink:
 

mewp

WRInaute discret
Le plus rapide est d'avoir une variable $ma_page, de construire ta page dedans et de l'afficher à la fin.
 

lothar

WRInaute passionné
Personnellement, j'opterais pour la première version, ne serait-ce que pour des raisons de clarté du code.

Pour la différence entre
Code:
echo()
et
Code:
print()
il y avait eu un test, mais je n'ai plus l'url sous la main...
 

olivieri

WRInaute impliqué
La clarté est effectivement importante mais j'ai besoin d'optimiser le temps de réponse, y compris au détriment de la lisibilité du code :wink:
 

mewp

WRInaute discret
echo est marginalement plus rapide ( cf http://www.faqts.com/knowledge_base/vie ... d/1/fid/40 ).

Si tu as beaucoup de requêtes SQL dans ta page, tu peux aussi faire un système de cache : tu récupère REQUEST_URI, tu regardes si cela existe dans ton répertoire de cache, si c'est là et inférieur à 10mn tu output le fichier. Sinon tu construis ta page dans $ma_page, la sauvegarde dans le cache sous le nom REQUEST_URI et l'affiche avec un echo.
 

olivieri

WRInaute impliqué
Effectivement echo devrait être plus rapide car il ne traite pas les insertions de format de données style %s ou %d et ne retourne pas de valeur, contrairement à print donc a priori moins de boulot en interne.

Pour les requêtes, je n'en ai que 5 par page (bien optimisées bien sur !), je ne sais pas si c'est beaucoup, mais c'est vraiment dans un soucis d'optimisation de la vitesse d'affichage :wink:
 

PyRoFLo

WRInaute occasionnel
mewp a dit:
Le plus rapide est d'avoir une variable $ma_page, de construire ta page dedans et de l'afficher à la fin.
C'est un peu vrai, seulement cela demande plus de RAM, donc faut faire son choix :wink:
 

milkiway

WRInaute accro
En optimisant le code HTML de ta page et tes images tu gagneras déjà 10 fois plus que tout ce que tu peux espérer gagner en optimisant ton PHP.
 

PyRoFLo

WRInaute occasionnel
Tout dépend de la quantité de chose que tu vas stocker dans ta variable.

Il ne faut pas non plus s'alarmer, évite de stocker une page entière quoi :)
 

PyRoFLo

WRInaute occasionnel
Tout dépend encore une fois de tes besoins, mais en règle générale l'accès disque est plus avantageux qu'une requête SQL (qui implique une connexion au préalable, ce qui prend du temps) :)
 

mewp

WRInaute discret
Dj_Apx a dit:
c'est plus rapide de lire le disque dur que d'accéder à une bdd ???? :eek:

Les accès disque se retrouvent dans ton cache mémoire, si tu lis tout le temps les mêmes fichiers c'est donc très rapide.
 

tonguide

WRInaute passionné
PyRoFLo a dit:
mewp a dit:
Le plus rapide est d'avoir une variable $ma_page, de construire ta page dedans et de l'afficher à la fin.
C'est un peu vrai, seulement cela demande plus de RAM, donc faut faire son choix :wink:

Un site que j'ai repris était programmé de la sorte (pas tout mais une partie de différente page été stoké dans une variable) Après avoir mis "echo" directement, le site a sensiblement était plus vite.

Edit : la différence se voit particulièrement pdt les heures de pointes
 

Remi L.

WRInaute impliqué
C'est la première formule qui est la plus rapide: ce n'est pas pénalisant de mettre plein de balises <? et ?>, par contre il faut essayer d'avoir le minimum de print ou d'echo.

Sinon, ce qui est vraiment beaucoup plus rapide, c'est de se passer de MySql en programmant soi même ses trucs... ;)
 

cybervince

WRInaute impliqué
Remi L. a dit:
C'est la première formule qui est la plus rapide: ce n'est pas pénalisant de mettre plein de balises <? et ?>, par contre il faut essayer d'avoir le minimum de print ou d'echo.

Sinon, ce qui est vraiment beaucoup plus rapide, c'est de se passer de MySql en programmant soi même ses trucs... ;)
Difficile de se passer de MySQL quand le contenu est dynamique et a besoin d'être dans une base de données.
Par contre limiter le nombre de requêtes SQL, c'est bien, notamment par l'utilisation de cache.
Sur mon site par exemple (hormis pour les bannières de pub), y'a 0 requête SQL sur la page d'accueil, alors que y'a pourtant du contenu dynamique.
 
A

Anonymous

Guest
mewp a dit:
Le plus rapide est d'avoir une variable $ma_page, de construire ta page dedans et de l'afficher à la fin.


Comment ça ?

Faire un include de la page construite ?
Mais la construction se ferait comme dans le premier ou le second exemple montré.
J'ai donc du mal à saisir l'optimisation puisqu'on ne fait qu'ajouter une mise en variable...

Merci pour vos éclaircicements car ça m'interesse aussi :wink:
 

M.o.n.d.i.a.n.i

WRInaute occasionnel
olivieri a dit:
Est il préférable, au niveau vitesse de réponse du serveur, d'avoir des blocs php <? ?> quand on en a besoin comme par exemple

Code:
<html>
<head>
<?echo montitle();?>
</head>
<body>
<?echo untexte();?>
<br>
<?echo unautretexte();?>
</body>
</html>

ou bien avoir un seul bloc php avec toutes les lignes html en echo

Code:
<?
echo "<html>";
echo "<head>";
echo "<title>mon title</title>";
echo "<body>";
echo "un texte";
echo "<br>";
echo "un autre texte";
echo "</body>";
echo "</html>";
?>

Et, il y a t'il une différence, surtout au niveau vitesse d'affichage, entre les fonctions echo() et print() ?

La difference entre les 2 manieres de coder est negligeable, à moins de faire une boucle de 1000, 10000 fois tu ne peux pas mesurer la difference. Et comme tu ne sers pas tes pages à tes clients au sortir d'une boucle 10000 et qu'en general tu ne peux servir que 3 clients en meme temps (et pas 10000) à cause des limitations sql: tu as ta reponse.

La premiere facon de faire a l'avantage d'etre plus lisible et plus facile à modifier.

Pour accélerer la generation de tes pages tu dois accélérer tes requetes sql, et faire du CACHE aussi souvent que possible. En faisant de la sorte j'ai accéléré la generation de mes pages entre 3 et 6 fois!

Je souscris egalement à l'idée d'accelerer les pages en en diminuant le poids (code html, images, scripts, css)
 

Patrice A.

WRInaute passionné
La premiere facon de faire a l'avantage d'etre plus lisible et plus facile à modifier.
Lisible ? permets-moi de trouver cette façon de faire très peu lisible, et de plus, peu pratique : comment fais-tu par exemple pour avoir un titre dynamique, etc... il serait nettement préférable de séparer le code php du balisage html.
 

M.o.n.d.i.a.n.i

WRInaute occasionnel
Dj_Apx a dit:
La premiere facon de faire a l'avantage d'etre plus lisible et plus facile à modifier.
Lisible ? permets-moi de trouver cette façon de faire très peu lisible, et de plus, peu pratique : comment fais-tu par exemple pour avoir un titre dynamique, etc... il serait nettement préférable de séparer le code php du balisage html.

J'utilise la premiere facon de faire (enfin pas tel quel) et j'ai des titres dynamiques. Et il me semble qu'au contraire c'est avec la seconde methode qu'on melange le php et l'html. Pour ne plus avoir que du PHP. Un code quasi impossible à donner à un graphiste.

Je ne comprends pas ce que tu veux dire...
 

shrom

WRInaute impliqué
mewp a dit:
Le plus rapide est d'avoir une variable $ma_page, de construire ta page dedans et de l'afficher à la fin.

Non, c'est le plus lent, print et echo sont semsiblement équivalent, le plus rapide étant echo+output buffering.
Code:
<?php

require_once 'Benchmark/Timer.php';

$bench = new Benchmark_Timer;

$bench->start();
$bench->setMarker('Début du script');

for ( $i=0; $i<1000000; $i++ ) {
  echo 'a';
}

$bench->setMarker('Echo');


for ( $i=0; $i<1000000; $i++ ) {
  print 'a';
}

$bench->setMarker('Print');

ob_start();
for ( $i=0; $i<1000000; $i++ ) {
  echo 'a';
}
ob_end_flush();

$bench->setMarker('Output buffering');



for ( $i=0; $i<1000000; $i++ ) {
  $content .= 'a';
} 
echo $content;

$bench->setMarker('Concatenation');

$bench->stop();

$bench->display();

?>
 

Patrice A.

WRInaute passionné
M.o.n.d.i.a.n.i a dit:
Dj_Apx a dit:
La premiere facon de faire a l'avantage d'etre plus lisible et plus facile à modifier.
Lisible ? permets-moi de trouver cette façon de faire très peu lisible, et de plus, peu pratique : comment fais-tu par exemple pour avoir un titre dynamique, etc... il serait nettement préférable de séparer le code php du balisage html.

J'utilise la premiere facon de faire (enfin pas tel quel) et j'ai des titres dynamiques. Et il me semble qu'au contraire c'est avec la seconde methode qu'on melange le php et l'html. Pour ne plus avoir que du PHP. Un code quasi impossible à donner à un graphiste.

Je ne comprends pas ce que tu veux dire...
Ce que je veux dire, c'est qu'avec un système de templates à la phpBB, ton code PHP et ton HTML sont bien séparés.
Et même en faisant plus simple, faire tous les traitements d'abord et ensuite inclure un fichier html "squelette", c'est plus propre quand même.
 

Discussions similaires

Haut