Maison >développement back-end >tutoriel php >Solution d'optimisation des performances des grands sites Web PHP et des accès simultanés
L'optimisation des performances du site Web est très importante pour les grands sites Web. La vitesse d'ouverture d'un site Web affecte l'expérience utilisateur. Une vitesse d'accès lente au site Web entraînera un taux de rebond élevé, ce qui est facile à résoudre pour les petits sites Web. de nombreuses colonnes, les images et les images sont relativement volumineuses, alors comment optimiser les performances globales ? Cet article vous propose un plan d'optimisation des performances du site Web PHP à grande échelle et des accès simultanés
1. Stratégies d'amélioration des performances du site Web à grande échelle :
Grande. sites Web à grande échelle, tels que les portails Lorsqu'un site Web est confronté à un grand nombre de visites d'utilisateurs et à des requêtes simultanées élevées, les solutions de base se concentrent sur les liens suivants : utilisation de serveurs hautes performances, de bases de données hautes performances, de langages de programmation haute efficacité et de technologies de pointe. -Conteneurs Web performants. Ces solutions impliquent dans une certaine mesure des investissements plus importants.
Le conteneur Web est un programme de service. Il existe un programme qui fournit les services correspondants sur un port du serveur, et ce programme traite les requêtes du client, comme le conteneur Tomcat en JAVA, IIS d'ASP ou PWS. sont tous de tels conteneurs. Un serveur peut avoir plusieurs conteneurs.
1. HTML statique
En fait, tout le monde sait que la plus efficace et la moins consommée est la page html purement statique, nous faisons donc de notre mieux pour réaliser notre site internet. Les pages sont implémentées à l'aide de pages statiques. Cette méthode la plus simple est en fait la méthode la plus efficace.
2. Séparation des serveurs d'images
Comme nous le savons tous, pour les serveurs web, qu'il s'agisse d'Apache, IIS ou autres conteneurs, les images consomment le plus de ressources, nous Il est nécessaire de séparer les images des pages. C'est une stratégie adoptée essentiellement par les grands sites Web. Ils disposent tous de serveurs d'images indépendants, voire multiples. Une telle architecture peut réduire la pression sur le système serveur qui fournit les demandes d'accès aux pages et garantir que le système ne tombe pas en panne en raison de problèmes d'image.
Sur les serveurs d'applications et les serveurs d'images, différentes optimisations de configuration peuvent être effectuées. Par exemple, Apache peut prendre en charge le moins de LoadModules possible lors de la configuration de ContentType pour garantir une consommation système et une efficacité d'exécution plus élevées.
3. Cluster de bases de données, hachage de tables de bases de données
Les grands sites Web ont des applications complexes, et ces applications doivent utiliser des bases de données lorsqu'elles sont confrontées à un grand nombre d'accès, le goulot d'étranglement. de la base de données apparaîtra bientôt. À ce stade, une base de données ne sera bientôt plus en mesure de répondre à l'application, nous devons donc utiliser le clustering de base de données ou le hachage de table de base de données.
En termes de clusters de bases de données, de nombreuses bases de données ont leurs propres solutions, et le maître/esclave couramment utilisé fourni par MySQL est une solution similaire.
Les clusters utilisent généralement la technologie d'équilibrage de charge CDN, GSBL et DNS. Chaque région dispose d'un groupe de serveurs frontaux. Par exemple : NetEase et Baidu utilisent la technologie d'équilibrage de charge DNS. . Une recherche Grâce à la technologie de chargement DNS, tous les canaux partagent un cluster de serveurs frontaux.
Le hachage des tables de bibliothèque est une solution courante et la plus efficace.
Nous installons des modules métiers et applicatifs ou fonctionnels dans l'application pour séparer la base de données. Différents modules correspondent à différentes bases de données ou tables, puis disséminons une certaine page ou fonction dans des bases de données plus petites selon une certaine stratégie, telles que les tables utilisateur, sont hachées en fonction des ID utilisateur, ce qui peut améliorer les performances du système à faible coût et avoir une bonne évolutivité.
Le forum de Sohu adopte une telle structure, qui sépare les utilisateurs, les paramètres, les publications et autres informations du forum dans la base de données, puis hache les publications et les utilisateurs en fonction de la section et de l'ID dans la base de données et le tableau. il peut être configuré Une configuration simple dans le fichier permet au système d'ajouter à tout moment une base de données à faible coût pour compléter les performances du système.
4. Mise en cache
Chaque technicien a rencontré le mot cache, et le cache est utilisé à de nombreux endroits. L'architecture du site Web et la mise en cache dans le développement de sites Web sont également très importantes. Ici, nous parlons d’abord des deux caches les plus basiques. La mise en cache avancée et distribuée est décrite plus loin.
Mise en cache au niveau de l'architecture, toute personne familiarisée avec Apache saura qu'Apache fournit son propre module de mise en cache et que vous pouvez également utiliser le module Squid supplémentaire pour la mise en cache. Les deux méthodes peuvent améliorer efficacement la réactivité d'Apache.
Cache dans le développement de programmes de sites Web, Memory Cache fourni sur Linux est une interface de cache couramment utilisée, qui peut être utilisée dans le développement Web. Par exemple, lors du développement en Java, vous pouvez appeler MemoryCache pour mettre en cache et partager certaines données. . , certaines grandes communautés utilisent une telle architecture. De plus, lors de l'utilisation du développement de langages Web, chaque langage a essentiellement son propre module de cache et sa propre méthode. PHP a le module Cache de Pear, et Java en a encore plus. Je ne connais pas très bien .net, mais je pense qu'il doit être là.
5. Mise en miroir
La mise en miroir est une méthode souvent utilisée par les grands sites Web pour améliorer les performances et la sécurité des données. La technologie de mise en miroir peut résoudre le problème des différents fournisseurs d'accès au réseau et géographiques. zones. La différence dans les vitesses d'accès des utilisateurs, comme la différence entre ChinaNet et EduNet, a incité de nombreux sites Web à créer des sites miroirs au sein du réseau éducatif, et les données sont mises à jour régulièrement ou en temps réel.
6. Équilibrage de charge
L'équilibrage de charge sera une solution haut de gamme pour les grands sites Web afin de résoudre les accès à charge élevée et un grand nombre de requêtes simultanées.
La technologie d'équilibrage de charge est développée depuis de nombreuses années, et il existe de nombreux fournisseurs de services et produits professionnels parmi lesquels choisir. J'ai personnellement rencontré certaines solutions, et il existe deux architectures qui peuvent être utilisées comme référence. tout le monde
2. Optimisation de l'écriture du code PHP :
1. Echo est beaucoup plus rapide que l'impression.
Les deux méthodes imprimeront quelque chose sur la page, mais echo ne renvoie aucune valeur et print renverra 0 ou 1 en cas de succès ou d'échec.
2. include_once prend plus de temps que include.
Parce qu'il doit vérifier si la classe que vous souhaitez inclure a été incluse.
3. Assurez-vous d'utiliser des guillemets simples au lieu de guillemets doubles pour les longues chaînes de paragraphe.
Parce que les guillemets doubles rechercheront des variables dans la chaîne. Par exemple : echo 'Ceci est une longue chaîne'.$name est beaucoup plus rapide que echo 'Ceci est une longue chaîne $name'.
4. Ne pas utiliser de boucles for imbriquées dans des boucles
5 Si la fonction peut être définie comme statique
. Alors ne le définissez pas comme une fonction membre. Les fonctions statiques sont 33 % plus rapides que les fonctions membres.
6. Si vous pouvez résoudre le problème sans utiliser d'expressions régulières
alors n'utilisez pas d'expressions régulières. Les expressions régulières sont plus lentes que les fonctions natives de PHP.
Par exemple, utilisez str_replace au lieu de preg_replae.
7. Essayez de ne pas utiliser de chemins relatifs pour inclure des fichiers
Si vous recherchez des fichiers dans des chemins relatifs, vous les rechercherez dans le répertoire actuel, puis recherchez encore une fois dans l'ordre. Cela rend la recherche de fichiers très lente. Il est préférable de définir d'abord une constante comme WEB_ROOT, puis d'utiliser cette constante pour inclure le fichier.
8. Les symboles congruents === sont plus rapides que égaux ==
Et if(1 == '1′) retournera vrai, if(0 = = ”) renverra également true, tandis que if(1 ==='1′) et if(0===”) renverront tous deux false lorsque vous utilisez le symbole congruent. Il est donc préférable d'utiliser le symbole de congruence lorsque vous devez détecter certaines variables booléennes dans votre programme.
3. Il existe les méthodes suivantes pour thinkphp
1. Désactivez le mode de débogage
Après avoir désactivé le mode de débogage. , Le système générera automatiquement un cache de compilation de projet et désactivera l'écriture du journal, ce qui peut réduire beaucoup de temps de chargement d'E/S et d'écriture de journal.
2. Activer la sortie de compression de page
À partir de la version 3.1, le paramètre de configuration OUTPUT_ENCODE est ajouté pour contrôler la sortie de compression de page.
3. Activez la mise en cache
L'installation du cache APC ou Xcache dans l'environnement de déploiement du site Web peut améliorer efficacement les performances du site Web et l'utilisation de la mémoire
XCache est un Cache/optimiseur Opcode open source, ce qui signifie qu'il peut améliorer les performances de PHP sur votre serveur. Il évite les processus de compilation répétés en mettant en mémoire tampon les données PHP compilées dans la mémoire partagée et peut utiliser directement le code compilé en mémoire tampon pour augmenter la vitesse. votre taux de génération de pages de 2 à 5 fois, réduisant ainsi la charge du serveur.
Alternative PHP Cache (APC) est un outil de cache open source pour PHP qui peut mettre en cache le code intermédiaire PHP d'Opcode.
4. Cache de champ
Par défaut, le cache de champ est généré automatiquement une fois le développement terminé, il y a fondamentalement moins de modifications dans la base de données, il peut donc être généré. Envisagez de fusionner le cache de champs dans la classe de modèle correspondante, ce qui peut réduire la surcharge d'E/S liée à la lecture du cache de champs à chaque fois. La méthode de fusion consiste à trouver le fichier de cache de champs correspondant sous Runtime/Data/_fields
4. Optimisation de la base de données
1. Choisissez le bon moteur de stockage
Prenons MySQL comme exemple, comprenant deux moteurs de stockage, MyISAM et InnoDB. Chaque moteur présente des avantages et des inconvénients.
MyISAM convient aux applications qui nécessitent un grand nombre de requêtes. La tendance d'InnoDB sera un moteur de stockage très complexe, et pour certaines petites applications, il sera plus lent que MyISAM. Mais il prend en charge les « verrouillages de lignes » et les transactions.
2. Optimiser le type de données du champ
Rappelez-vous un principe, plus la colonne est petite, plus elle sera rapide. Pour la plupart des moteurs de bases de données, les opérations sur le disque dur constituent probablement le goulot d'étranglement le plus important. Ainsi, rendre vos données compactes peut être très utile dans cette situation car cela réduit l’accès au disque dur.
Si une table ne comporte que quelques colonnes (comme une table de dictionnaire, une table de configuration), alors nous n'avons aucune raison d'utiliser INT comme clé primaire. Il sera plus économique d'utiliser MEDIUMINT, SMALLINT ou un TINYINT plus petit. . Quelques. Si vous n'avez pas besoin de suivre l'heure, il est préférable d'utiliser DATE plutôt que DATETIME. Bien entendu, vous devez également laisser suffisamment de place à l’expansion.
3. Ajoutez un index au champ de recherche
L'index ne signifie pas nécessairement la clé primaire ou le seul champ. S'il y a un champ dans votre table que vous utiliserez toujours pour la recherche, il est préférable de l'indexer. À moins que le champ que vous souhaitez rechercher soit un champ de texte volumineux, vous devez alors créer un index de texte intégral.
4. Évitez d'utiliser Select * pour lire plus de données de la base de données,
Ensuite, la requête deviendra plus lente. De plus, si votre serveur de base de données et votre serveur WEB sont deux serveurs indépendants, cela augmentera également la charge de transmission réseau. Même si vous souhaitez interroger tous les champs de la table de données, essayez de ne pas utiliser le caractère générique *. Faire bon usage des définitions d'exclusion de champs intégrées peut apporter plus de commodité.
5. Utilisez ENUM au lieu de VARCHAR
Le type ENUM est très rapide et compact. En fait, il contient un TINYINT, mais il apparaît sous la forme d'une chaîne. De cette façon, il devient tout à fait parfait d'utiliser ce champ pour faire des listes de choix. Par exemple, si les valeurs de champs tels que le sexe, l'origine ethnique, le département et le statut sont limitées et fixes, vous devez utiliser ENUM au lieu de VARCHAR.
6. Utilisez NOT NULL autant que possible
Sauf si vous avez une raison très précise d'utiliser des valeurs NULL, vous devez toujours garder vos champs NOT NULL . NULL nécessite en fait un espace supplémentaire et votre programme sera plus complexe lorsque vous effectuerez des comparaisons. Bien sûr, cela ne signifie pas que vous ne pouvez pas utiliser NULL. La réalité est très compliquée et il y aura toujours des situations dans lesquelles vous devrez utiliser des valeurs NULL.
7. Les tableaux de longueur fixe seront plus rapides
Si tous les champs du tableau sont de "longueur fixe", le tableau entier sera considéré comme "statique" ou " longueur fixe". Par exemple, la table ne contient aucun champ des types suivants : VARCHAR, TEXT, BLOB. Tant que vous incluez l'un de ces champs, la table n'est plus une "table statique de longueur fixe" et le moteur MySQL la traitera d'une autre manière.
Les tables de longueur fixe amélioreront les performances car MySQL recherchera plus rapidement. Parce que ces longueurs fixes facilitent le calcul du décalage des données suivantes, la lecture sera naturellement plus rapide. Et si le champ n'est pas de longueur fixe, chaque fois que vous souhaitez trouver le suivant, le programme doit trouver la clé primaire.
De plus, les tables de longueur fixe sont plus faciles à mettre en cache et à reconstruire. Cependant, le seul effet secondaire est que les champs de longueur fixe gaspillent de l'espace, car les champs de longueur fixe nécessitent beaucoup d'espace, que vous les utilisiez ou non.
Grâce à la technologie "vertical split", vous pouvez diviser votre table en deux, une de longueur fixe et une de longueur variable.
8. Division verticale
La « division verticale » est une méthode permettant de transformer les tables de la base de données en plusieurs tables par colonnes, ce qui peut réduire la complexité du tableau. Degré et nombre de champs pour atteindre les objectifs d'optimisation.
Par exemple : Il y a un champ dans la table Utilisateur qui est l'adresse du domicile. Ce champ est facultatif, sauf pour les informations personnelles lorsque vous opérez dans la base de données, vous n'avez pas besoin de le lire ou de le lire. fréquemment. Il s'agit de réécrire ce champ. Alors pourquoi ne pas le mettre dans une autre table ? Cela donnera à votre table de meilleures performances. Pensez-y, la plupart du temps, pour la table utilisateur, seuls l'ID utilisateur, le nom d'utilisateur, le mot de passe, le rôle utilisateur, etc. seront fréquemment utilisés. Les tables plus petites auront toujours de meilleures performances.
De plus, vous devez faire attention au fait que vous ne rejoindrez pas fréquemment les tables formées par ces champs séparés, sinon les performances seront pires que lorsqu'elles ne sont pas divisées. De plus, ce sera un extrême. déclin.
9. EXPLAIN votre requête SELECT ;
L'utilisation du mot-clé EXPLAIN peut vous permettre de savoir comment MySQL gère votre instruction SQL. Cela peut vous aider à analyser les goulots d'étranglement des performances de vos instructions de requête ou de vos structures de table. Les résultats de la requête EXPLAIN vous indiqueront également comment votre clé primaire d'index est utilisée, comment votre table de données est recherchée et triée... etc., etc.
Habituellement, nous pouvons ajouter le mot-clé EXPLAIN devant les instructions SELECT plus complexes, en particulier celles impliquant plusieurs tables. Vous pouvez utiliser phpmyadmin pour ce faire. Pour plus de détails, veuillez consulter la pièce jointe explicative.doc.
5. Optimisation du front-end
Après avoir optimisé le back-end et la base de données, ce que nous devons faire ensuite. est d'optimiser la page de sortie. Les pages frontales et les fichiers de ressources incluent principalement l'optimisation des images, du JS et des fichiers de style.
Nous vous recommandons d'utiliser les outils de test de performances des pages Web suivants pour la détection et l'analyse, et des suggestions d'optimisation pertinentes seront données :
Outil PageSpeed développé par Google
Les webmasters et les développeurs Web peuvent utiliser PageSpeed pour évaluer les performances de leurs pages Web et obtenir des recommandations sur la façon d'améliorer les performances.
yslow YSlow
peut analyser les pages du site et vous indiquer comment les optimiser en fonction de certaines règles afin d'améliorer les performances du site.
Articles connexes :
Pratique d'optimisation des performances des sites Web PHP : pratique d'optimisation de la vitesse de chargement de la page d'accueil Taobao
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!