|
Publicité ' | ||||||||||||||||||||||||
|
|
#161 | |
|
Candidat au titre de Membre du Club
![]() |
Bonjour,
Un autre petit test sur l'affichage de chaines de caractère avec variable et caractères spéciaux. Exécuté 30 000 fois chacun : Citation:
|
|
|
00
|
|
|
#162 | ||
![]() ![]() Geek entrepreneur Inscription : novembre 2004 Messages : 1 087 ![]() |
Ce petit script permet de bencher un site. Il est conseillé de commencer par des petites itérations afin de ne pas boucler pendant des heures ^^
Code :
Ca permet de voir quelles sont les parties du site qui prennent le plus de temps et de garder des traces de ces perfs pour pouvoir les comparer plus tard après une modification par exemple. |
||
|
00
|
|
|
#163 | |
|
Membre habitué
![]() Sylvain GourvilFreelance en développement Web Inscription : mars 2005 Messages : 248 ![]() |
Citation:
|
|
|
00
|
|
|
#164 |
|
Membre actif
![]() Étudiant Inscription : août 2005 Messages : 161 ![]() |
un c'est encore plus efficace (sur les tables myisam en tous cas)
|
|
|
00
|
|
|
#165 |
|
Membre habitué
![]() Sylvain GourvilFreelance en développement Web Inscription : mars 2005 Messages : 248 ![]() |
oui, en cas d'un id manquant en plein milieu, c'est meme plus correct sinon c la meme chose voire moins en ressources mais je pinaille lol
|
|
00
|
|
|
#166 |
|
Invité régulier
![]() |
et SELECT MAX(id) FROM table ? ça va pas?
|
|
|
00
|
|
|
#167 |
|
Membre chevronné
![]() Inscription : mai 2005 Messages : 657 ![]() |
Salut,
Il me semble avoir lu que MyISAM stocke le nombre d'enregistrement, dans tout les cas pour obtenir le nombre d'enregistrements, "SELECT COUNT(*) FROM table" devrait être la solution la plus rapide. |
|
|
00
|
|
|
#168 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
Petite remarque amusante. La fonction array_map est lente. Il est plus rapide d'utiliser un parcours avec foreach, que d'appliquer map. Apparement, il est également plus rapide de donner un nom de fonction en paramètre plutôt qu'une fonction lamda crée avec create_function. A vérifier ;) J'ai gagné 40 % rien qu'en remplaçant les fonctions map. Interessant pour une partie dont le temps d'execution se compte en secondes.
|
|
|
00
|
|
|
#169 |
|
Membre régulier
![]() Inscription : juillet 2004 Messages : 398 ![]() |
Je souhaite afficher des images sur une page.
Les images pèsent environs 100ko chacune, je souhaite en afficher environs 30 par page. Si j'utilise le la librairie GD2 pour redimenssioner, est ce que les images seront réduites coté serveur en étant mise dans le cache (qui, normalement réduirait le poid des images), ou alors c'est un redimenssionement coté client (style <IMG width="xx" height="xx">) ?? Merci |
|
|
00
|
|
|
#170 |
|
Invité de passage
![]() Inscription : août 2005 Messages : 1 ![]() |
Bonjour,
j'ai une table auteurs avec des attributs comme le nom, le prénom, le sexe... Chaque auteur est lié à plusieurs articles dans une table articles (1 article = 1 enregistrement). je veux ressortir tous les articles d'un auteur donné ainsi que son nom, son prénom... Du point de vue de l'optimisation vaut-il mieux faire deux requêtes (et occuper du temps processeur) ou bien faire une jointure, quitte à avoir dans la table du résultat les attributs de l'auteur répétés pour chaque article (et donc occuper de la mémoire) ? Sachant que pour l'exemple j'ai simplifié à l'extrême et que c'est beaucoup plus lourd en réalité (4 tables, entre 5 et 10 colones pour chaque table et jusqu'à plus d'une centaine d'enregistrements à ressortir). j'éspère être clair (il est tard) Merci d'avance. |
|
|
00
|
|
|
#171 |
|
Membre chevronné
![]() ![]() |
Pour ce type de configuration il faut faire une jointure, c'est justement fait pour ça
|
|
|
00
|
|
|
#172 | |
|
Invité de passage
![]() Inscription : août 2005 Messages : 7 ![]() |
Je pense qu'on devrait refaire ce sujet... là on a un paquet de posts, donc certains inutiles... j'ai pas eu le courage de tout lire...
je vais donc peut être redire des choses déja indiquées, mais voila mes habitudes en matière d'optimisation Citation:
|
|
|
|
00
|
|
|
#173 | ||||
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 113 ![]() |
Citation:
si sizeof ($arr) vaut 10 tu vas passer 10 fois dan sla boucle est tu vas 10 fois évaluer $i<sizeof($arr) tu vas donc appeler 10 fois la fonction alors que si tu calcule la valeur avant sizeofarr = sizeof($arr) tu ne teste que $i<$sizeofarr 10 fois mais tu n'appelle la fonction qu'une fois. je ne sais pas ce qu'il en est du moteur zend de php mais certain compilateur savent optimiser ce genre de chose et n'appelle la fonction qu'une fois. de façon générale pas de fonction dans l'argument d'une boucle. est l'équivalent (ce qui est exécuté) que Code :
la deuxième forme montre bien que mafonctio est appelé autant de fosi qu'elle retournera vrai + une. on vois bien qu'elle est dans la boucle. A+JYT |
||||
|
|
00
|
|
|
#174 |
|
Membre chevronné
![]() ![]() |
Il faudrait testern j'ai déjà eu des cas en C ou le code mettait quelques secondes de plus car je mettais justement un strlen() dans la condition.
cependant ne pas oublier que PHP est un langage interpréte, il y a de très forts chances que le résultat soit mis en cache et non recalculé à chaque fois, en tout cas si j'avais programmé PHP c'est comme ca que j'aurais fait donc les développeurs ont surement eu cette idée. |
|
|
00
|
|
|
#175 |
|
Expert Confirmé Sénior
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 2 113 ![]() |
c'est plus compliqué que mettre en cache il faut s'assurer que dans le corps de la boucle les arguments de la fonction appelé dans le test ne change pas.
il faut aussi s'assurer qu'il n'y a pas d'effet de bord. la fonction appelé dans la condition utilise peut être des paramètres globaux qui pourraient changer de valeur dans le corps. bref il faut assurer l'indépendence du résultat de la fonction dans la contion de l'algo du corp. ce genre d'analyse est particulièrment difficile à faire. et je ne suis pas du tout sur que php sache le faire. plus probablement il est possible que le moteur zend pour un certain nombre de fonctions prédéfinie sache s'assurer de l'indépendance et donc mettre en cache. si c'est le cas c'est dans des cas très particulier. A+JYT |
|
|
00
|
|
|
#176 |
|
Membre chevronné
![]() ![]() |
Oui en fait tu as probablement raison. Les variables PHP sont probablement dans une listes chainées, et je me disais qu'il sufirait peut être simplement de définir un flag dans cette structure, qu'on met à TRUE dès que la variable recoit une modification. Si la variable n'est pas modifiée dans la boucle le flag reste à FALSE, et le for () par exemple n'a pas besoin de recalculer cette variable. C'est un peu idéaliste mais c'est surement faisable, mais comme tu le dit je doute PHP finalement l'ai fait, il y a beaucoup de paramètres à prendre en compte
|
|
|
00
|
|
|
#177 | ||
|
Membre du Club
![]() Inscription : juin 2005 Messages : 60 ![]() |
Bon topic,
juste un point à propos de MySQL et PHP : les moteurs de base de donnée sont fait pour structurer/organiser/formater les données. Donc ils sont optimisés pour ça, et le font plus vite que PHP. Comme cela a déjà été dit, mieux vaut utiliser SQL plutôt que PHP pour ces tâches, et quelques fonctionnalitées 'avancées' de SQL peuvent être fort utiles : *les jointures *les requêtes imbriquées (à partir de MySQL 4.1, et pour certaines formes 4.0) : remplace plusieurs requêtes à la suite par 1 seule Code :
*pour les problèmes de base de données bloquée par un script : les locks (verrous), mettre un lock en lecture/ecriture sur une ligne plutôt que sur la table entière Pour un script qui utilise intensément les bdd, je pense que c'est sur les connexions qu'il faut se concentrer : ça peut gagner beaucoup de temps. Le mode de connexion peut aussi jouer un rôle : si la base de donnée est locale (sur le même serveur PHP), on peut se connecter avec un socket plutôt qu'en TCP, je crois que c'est plus rapide. Voilà, si quelqu'un veut bien compléter/corriger ce que j'ai écrit ... -- Rom_1 |
||
|
|
00
|
|
|
#178 |
|
Membre chevronné
![]() ![]() |
Les bases de données sont effectivement faites pour formater les données, néanmoins un cache PHP avec un tableau à inclure évitera de :
1) Faire une requète vers le serveur SQL (ce qui peut être important dans certains cas) 2) Avoir les données directement dans le tableau sans se taper un déplacement de pointeur ligne par ligne avec un truc genre mysql_fetch_array() |
|
|
00
|
|
|
#179 |
|
Membre confirmé
![]() Inscription : mai 2002 Messages : 342 ![]() |
je viens de surfer sur ce thread en étant sûr de trouver ce que je vais annoncer. Et non !!!! Grande surprise (ah moins que ma fonction de recherche de IE me joue des tours, dans ce cas là DSL) je n'ai pas trouvé l'une des plus grandes optimisations concernant les bases de données :
Prévu spécialement pour des sites web comme developpez.com avec bcp de forums de users de postes donc de bases de données. Indispensable en tous les cas ! |
|
|
00
|
|
|
#180 |
![]() ![]() Inscription : novembre 2005 Messages : 3 868 ![]() |
c'est effectivement un plus mais ca peut avoir des inconvenients, si tu as droit a 20 connections simultanées et que tu fais du pconnect, tu seras limité a 20 users sur ton site alors que sans le pconnect, tu pourras en avoir plus car ils interrogeront pas tous la base en meme temps
__________________
Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin. Cours | FAQ | Sources Javascript Cours | FAQ | Sources PHP Mes Articles |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com