Cet article vous présentera 53 détails sur l'optimisation du code PHP et les stratégies d'optimisation courantes et importantes. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
53 détails sur l'optimisation du code PHP, stratégies d'optimisation PHP courantes et importantes.
Utilisez des guillemets simples au lieu de guillemets doubles pour délimiter la chaîne, ce qui est plus rapide. Parce que PHP recherchera les variables dans les chaînes entourées de guillemets doubles, les guillemets simples ne le feront pas. Remarque : seul echo peut le faire, c'est une "fonction" qui peut prendre plusieurs chaînes comme paramètres (Annotation : Manuel PHP On dit que echo est. une structure de langage, pas une fonction réelle, donc la fonction est entourée de guillemets doubles).
1. Si vous pouvez définir une méthode de classe comme statique, essayez de la définir comme statique, et sa vitesse sera augmentée de près de 4 fois.
2. $row['id'] est 7 fois plus rapide que $row[id].
3. Echo est plus rapide que print et utilise plusieurs paramètres d'echo (annotation : fait référence à l'utilisation de virgules au lieu de points) au lieu de la concaténation de chaînes, comme echo $str1, $str2.
4. Déterminez le nombre maximum de boucles avant d'exécuter la boucle for. Ne calculez pas la valeur maximale à chaque boucle. Il est préférable d'utiliser foreach à la place.
5. Désenregistrez les variables inutilisées, en particulier les grands tableaux, pour libérer de la mémoire.
6. Essayez d'éviter d'utiliser __get, __set, __autoload.
7. require_once() coûte cher.
8. Essayez d'utiliser des chemins absolus lors de l'inclusion de fichiers, car cela évite la vitesse de recherche des fichiers par PHP dans include_path et le temps requis pour analyser le chemin du système d'exploitation sera moindre.
9. Si vous souhaitez connaître l'heure à laquelle le script commence à s'exécuter (annotation : c'est-à-dire que le serveur reçoit la requête du client), il est préférable d'utiliser $_SERVER['REQUEST_TIME'] plutôt que time(). .
10. Les fonctions remplacent les expressions régulières pour compléter la même fonction.
11. La fonction str_replace est plus rapide que la fonction preg_replace, mais la fonction strtr est quatre fois plus efficace que la fonction str_replace.
12. Si une fonction de remplacement de chaîne accepte des tableaux ou des caractères comme paramètres et que la longueur du paramètre n'est pas trop longue, vous pouvez alors envisager d'écrire un code de remplacement supplémentaire afin que chaque paramètre passé soit un caractère au lieu d'écrire simplement. une ligne de code pour accepter les tableaux comme paramètres de requête et de remplacement.
13. Il est préférable d'utiliser une instruction de branchement sélectif (traduction : changer de casse) plutôt que d'utiliser plusieurs instructions if, else if.
14. Utiliser @ pour bloquer les messages d'erreur est très inefficace, extrêmement inefficace.
15. L'ouverture du module mod_deflate d'Apache peut améliorer la vitesse de navigation des pages Web.
16. La connexion à la base de données doit être fermée une fois son utilisation terminée et n'utilisez pas de connexions longues.
17. Les messages d’erreur coûtent cher.
18. L'augmentation des variables locales dans une méthode est la méthode la plus rapide. Presque aussi rapide que d'appeler des variables locales dans une fonction.
19. L'incrémentation d'une variable globale est 2 fois plus lente que l'incrémentation d'une variable locale.
20. L'incrémentation d'une propriété d'objet (telle que : $this->prop++) est 3 fois plus lente que l'incrémentation d'une variable locale.
21. L'incrémentation d'une variable locale non définie est 9 à 10 fois plus lente que l'incrémentation d'une variable locale prédéfinie.
22. Le simple fait de définir une variable locale sans l'appeler dans une fonction ralentira également la vitesse (au même titre que l'incrémentation d'une variable locale). PHP vérifiera probablement si une variable globale existe.
23. Les appels de méthode semblent être indépendants du nombre de méthodes définies dans la classe, car j'ai ajouté 10 méthodes (avant et après avoir testé la méthode), mais il n'y a eu aucun changement dans les performances.
24. Les méthodes des classes dérivées s'exécutent plus rapidement que les mêmes méthodes définies dans les classes de base.
25. Appeler une fonction vide avec un paramètre prend le même temps que d'effectuer 7 à 8 opérations d'incrémentation de variable locale. Un appel de méthode similaire nécessite près de 15 opérations d’incrémentation de variables locales.
26. Le temps nécessaire à Apache pour analyser un script PHP est 2 à 10 fois plus lent que pour analyser une page HTML statique. Essayez d'utiliser plus de pages HTML statiques et moins de scripts.
27. À moins que le script puisse être mis en cache, il sera recompilé à chaque appel. L'introduction d'un mécanisme de mise en cache PHP peut généralement améliorer les performances de 25 à 100 % pour éliminer la surcharge de compilation.
28. Essayez de mettre en cache autant que possible, vous pouvez utiliser memcached. Memcached est un système de mise en cache d'objets mémoire hautes performances qui peut être utilisé pour accélérer les applications Web dynamiques et réduire la charge de la base de données. La mise en cache des codes OP est utile afin que les scripts n'aient pas besoin d'être recompilés pour chaque requête.
29. Lorsque vous utilisez une chaîne et que vous devez vérifier si sa longueur répond à certaines exigences, vous utiliserez naturellement la fonction strlen(). Cette fonction s'exécute assez rapidement car elle n'effectue aucun calcul et renvoie simplement la longueur connue de la chaîne stockée dans la structure zval (la structure de données intégrée au C utilisée pour stocker les variables PHP). Cependant, puisque strlen() est une fonction, elle sera quelque peu lente, car l'appel de fonction passera par de nombreuses étapes, telles que les lettres minuscules (Annotation : fait référence au nom de la fonction en minuscule, PHP ne fait pas de distinction entre les noms de fonction en majuscules et en minuscules. ), recherche de hachage, Sera exécuté avec la fonction appelée. Dans certains cas, vous pouvez utiliser l'astuce isset() pour accélérer l'exécution de votre code.
(Exemple ci-dessous)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(Comparez avec la technique ci-dessous)
if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java 代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36、并非要用类实现所有的数据结构,数组也很有用。
37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38、当你需要时,你总能把代码分解成方法。
39、尽量采用大量的PHP内置函数。
40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
48、多维数组尽量不要循环嵌套赋值;
49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
50、foreach效率更高,尽量用foreach代替while和for循环;
51、用单引号替代双引号引用字符串;
52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
53、对global变量,应该用完就unset()掉;
最后,总结一下常见而重要的php优化策略:
一、 在includes和requires中使用绝对路径,这样在分析路径花的时间更少;
二、 在循环里别用函数,例如For($x=0; $x < count($array); $x)
,count()函数在外面先计算;
三、 使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在php.ini文件里。可是如果你在用一个共享的虚拟主机,php.ini你不能修改,那么你最好添加error_reporting(0)函数,放在每个脚本文件的第一行(或用require_once()来加载)这能有效的保护敏感的SQL查询和路径在出错时不被显示;
四、 禁止过多的循环套循环,嵌套过多的循环会拉低执行效率
五、 禁止在循环内部执行相关的查询语句,除非万不得以,不然千万不可这么操作
六、 尽量使用单引号联接字符串
七、 尽可能的减少变量复制操作。例如:$description = $_POST['description'];
八、 当if/else过多时,尽可能的使用switch/case 代替 if/else。能够使代码更加简明
九、 开启缓存机制有助于提升性能,同时降低MySQL负载
十、 开启gzip压缩
更多相关知识,请关注 PHP中文网!!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!