JeuWeb - Crée ton jeu par navigateur
Manière d'alléger son code - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Manière d'alléger son code (/showthread.php?tid=2055)

Pages : 1 2 3 4


Manière d'alléger son code - Kassak - 24-11-2007

Bonsoir à tous.

J'ai pensais que se serait bien de lister dans un post, toutes les manières possible pour alléger son code, pour en améliorer la rapidité etc...

Les codeurs assez expérimenté doivent connaitre des petits trucs a ne pas faire, ou a faire, et qui change grandement la rapidité d'exécution du codes.

Bref, merci de dire ici, quoi faire ou ne pas faire afin d'avoir un code léger, et une rapidité d'exécution augmentée.

Moi on m'a conseillé à mes débuts, lors d'un SELECT, de préciser le nom des champs et de ne pas mettre un * a chaque fois, pas mettre de requête dans une boucle si on a le choix....C'est ce genre de petites choses qui m'intéresse, et qui je l'espère pourra en intéresser d'autre Wink

Ps : Les "trucs" concernant la BDD ou autre est toujours bon a prendre^^


RE: Manière d'alléger son code - naholyr - 24-11-2007

On a TOUJOURS le choix de ne pas faire une boucle sur une requête. Il ne faut JAMAIS mettre une requête dans une boucle, à moins qu'on soit sûr et certain (et là il vaut mieux le prouver mathématiquement si on veut donner une chance de survie à l'appli) que cette boucle ne fasse pas plus de N passages (N étant le plus petit possible).

Ensuite les petites améliorations qui ne coûtent pas cher et qui ne font certes pas gagner grand-chose mais c'est toujours ça de prix :
  • Quand on manipule des gros tableaux, toujours les passer par référence (à déclarer au niveau de la fonction : function maFonction(&$grosTableau)). Edit : quand je parle de «gros» tableau c'est à partir de 1000 éléments hein Smile Quand on manipule ce genre de tableau on est bien d'accord que le premier reflexe serait de... trouver comment faire autrement Wink
  • Quand on parcourt un tableau, toujours utiliser foreach, c'est la syntaxe la plus lisible et la plus rapide dans quasiment tous les cas (voir http://www.php.lt/benchmark/phpbench.php).
  • Au niveau des requêtes, fermer la connexion SQL une fois qu'on a fini de faire des requêtes est une bonne pratique : ça permet de ne pas faire durer une connexion inutilement (et donc de retarder le jour fatidique du "fatal error : mysql - too many connections").

Dans l'ensemble, je préfère toujours la lisibilité du code à sa performance. Si pour être plus rapide je dois rendre un script illisible, alors je ne le ferai pas. Donc je ne suis pas le plus apte à lister les astuces d'optimisation des perfs Smile
Je préfère de loin optimiser mon serveur Apache Wink


RE: Manière d'alléger son code - naholyr - 24-11-2007

Pour comparer tu peux t'amuser à tester la différence entre ces deux requêtes :

Code PHP :
<?php 
// Récupérer les noms des persos d'ID 1 à 20 : requête dans la boucle
$names = array();
for (
$i=0; $i<20; $i++) {
$res = mysql_query('SELECT name FROM users WHERE id = ' . $i);
if (
$row = mysql_fetch_assoc($res)) {
$names[] = $row['name'];
}
}

Code PHP :
<?php 
// Récupérer les noms des persos d'ID 1 à 20 : requête hors de la boucle
$values = array();
for (
$i=0; $i<20; $i++) {
$values[] = $i;
}
$res = mysql_query('SELECT name FROM users WHERE id IN (' . implode(',', $values) . ')');
$names = array();
while (
$row = mysql_fetch_assoc($res)) {
$names[] = $row['name'];
}

On dira que ça altère la lisibilité du code, mais avec une couche d'abstraction qui vaut quelque chose ça ressemblerait à ça :
Code PHP :
<?php 
// Récupérer les noms des persos d'ID 1 à 20 : requête en dehors de la boucle
$values = array();
for (
$i=0; $i<20; $i++) {
$values[] = $i;
}
$names = SQL::query('SELECT names FROM users WHERE id IN :values', array('values' => $values));



RE: Manière d'alléger son code - Sephi-Chan - 24-11-2007

J'ai eu peur en te lisant, Naholyr.

Je pense que la première fois qu'un codeur commet l'erreur de faire des requêtes à l'intérieur d'une boucle, c'est quand il s'attaque à un système de news avec commentaires.


Sephi-Chan


RE: Manière d'alléger son code - MyHeadXplod - 24-11-2007

http://www.vulgarisation-informatique.com/optimiser-php.php


RE: Manière d'alléger son code - Sephi-Chan - 25-11-2007

Alors ça c'est typiquement ce qui pousse à faire des écarts de lisibilité aux profits de gains insignifiants. Hormis certaines petites astuces, mieux vaut ignorer ces benchmarks et faire ce qu'il y a de plus propre.


Sephi-Chan


RE: Manière d'alléger son code - Shidame - 25-11-2007

Sephi +1

D'autant que pour la comparaison while / foreach je pense que cela depend grandement de la taille du tableau parcours...


RE: Manière d'alléger son code - MyHeadXplod - 25-11-2007

Même si je suis pour un code propre osef des écarts de lisibilité...

Dans le cadre de vos jeux vous bosser sur des trucs énormes à ce point là? oO
Citation :D'autant que pour la comparaison while / foreach je pense que cela depend grandement de la taille du tableau parcours...

Ok tu peux expliquer stp? J'ai remarqué qu'ici pas mal de personnes balancent des affirmations sans expliquer pourquoi. Le but c'est quand même que ceux qui débutent comprennent le pourquoi du comment non?


RE: Manière d'alléger son code - Shidame - 25-11-2007

*sens comme des sarcasmes*

Je ne pense pas avoir dis une vérité mais plus mon opinion sur le sujet.

J'ai forgé mon opinion en ayant vu plusieurs sites de benchmark (au passage les résultats sont des fois trés différents d'un site à l'autre) .
De plus pour avoir testé en local différentes options de code j'ai constaté que les méthodes de bouclage dépendent du nombres d'enregistrements à parcourir.

Pour illustrer mes propos voici un site de benchmark http://iubito.developpez.com/php/bench.php?test=foreach (encore une fois je ne donne que mon point de vue et ce n'est pas une vérité générale)

A bientot,


RE: Manière d'alléger son code - naholyr - 25-11-2007

Pour comprendre le pourquoi du comment il faut ausculter le moteur PHP, et pour ça il faut avoir un bagage que personne n'a ici.
Tout ce qu'on peut affirmer, c'est que les benchmarks prouvent ceci ou cela.
Et en PHP5 j'affirme que foreach() est toujours plus rapide que le while, et en tous cas il est toujours infiniment plus lisible Wink