Les ingénieurs PHP sont confrontés à des goulots d'étranglement en matière de croissance
Tout d'abord, précisez que les ingénieurs PHP mentionnés ici font référence à ceux qui utilisent principalement PHP pour développer des systèmes Web et n'ont pas travaillé dans d'autres langues. J'ai environ 3 à 4 ans d'expérience professionnelle. Je suis fondamentalement à l'aise dans le développement de systèmes Web ordinaires (des millions d'accès, des données de moins de 1 000 niveaux ou la logique métier n'est pas particulièrement complexe) sans aucun problème. Mais ils pointeront comme ceci :
◆Ne pas utiliser d'autres langagessauf PHP, et peuvent cliquer sur des scripts shell.
◆Pas bon pour maîtriser PHP (je n'ai pas lu beaucoup de manuels PHP, à l'exception des bibliothèques).
◆La base de connaissances est relativement étroite (face à la demande, à part utiliser PHP et MySQL, je ne connais pas d'autres solutions).
◆Le code PHP est principalement orienté processus, et je pense que l'implémentation orientée objet est trop compliquée et difficile à comprendre.
Ces PHPers manquent d'idées lorsqu'ils rencontrent des projets qui nécessitent des performances élevées, un traitement hautement simultané et de grandes quantités de données, ou lorsque la logique métier est relativement complexe (le système doit résoudre des problèmes métier dans plusieurs domaines). Ils sont incapables d'analyser l'essence du problème et ont un mauvais jugement technique. Ils peuvent trouver rapidement des solutions temporaires au problème, mais souvent le système et eux-mêmes s'effondrent étape par étape dans les solutions temporaires constantes. Alors comment s’améliorer ? Comment puis-je contester un système plus difficile ?
Où sont les défis les plus élevés ?
Sur la base de ma propre expérience, j'énumère quelques défis spécifiques pour donner à chacun une compréhension perceptuelle.
Quels sont les enjeux des systèmes performants ?
◆Comment choisir un serveur web ? Dois-je utiliser le mode fast-cgi ?
◆Dois-je utiliser un service proxy inverse ? Choisir le cache mémoire complet ou le cache disque dur ?
◆Un équilibrage de charge est-il requis ? Est-ce basé sur la couche application ou sur la couche réseau ? Comment garantir une haute fiabilité ?
◆Quelle est la performance de votre code PHP et quelle est-elle après avoir utilisé des outils d'optimisation ? Où est le goulot d’étranglement des performances ? Doit-il être écrit comme une extension de C ?
◆Quelles sont les caractéristiques de l'accès des utilisateurs ? S'agit-il plutôt de lecture ou d'écriture ? La séparation lecture-écriture est-elle requise ?
◆Comment les données sont-elles stockées ? Quelles sont les vitesses d’écriture et de lecture ? Comment la vitesse d’accès change-t-elle à mesure que les données augmentent ?
◆Comment utiliser le cache ? Comment envisager l’échec ? Comment assurer la cohérence des données ?
Quels sont les défis des systèmes à haute complexité ?
◆Pouvez-vous identifier le champ correspondant à l'entreprise ? Est-ce un ou plusieurs ?
◆L'entreprise peut-elle être raisonnablement abstraite afin que les changements dans les règles commerciales puissent être réalisés à moindre coût ?
◆La cohérence et la sécurité des données peuvent-elles être garanties ?
◆Avez-vous maîtrisé les méthodes d'analyse et de conception orientées objet ?
Si vous pouvez répondre par l'affirmative aux questions énumérées ici, cela signifie que vous êtes techniquement capable de devenir architecte. Si vous ne pouvez pas encore y répondre, vous devez vous renforcer dans les directions suivantes.
Comment s'améliorer et surmonter les goulots d'étranglement
Comment vous ne pouvez pas encore y répondre, vous devez vous renforcer dans les directions suivantes :
◆ Analysez ce que vous utilisez Les principes de la technologie et le mécanisme de fonctionnement qui la sous-tend peuvent améliorer votre jugement technique et améliorer l'exactitude de votre choix de solutions techniques
◆Apprenez des connaissances importantes pendant vos études universitaires, les principes du système d'exploitation, les structures de données ; et les algorithmes. Sachez qu'avant, vous étudiiez pour les examens, mais maintenant vous devez étudier par vous-même et vous faire savoir pourquoi
◆Recommencez à apprendre le langage C, même si vous l'avez déjà appris à l'université. Ce n'est pas seulement parce que vous devrez peut-être écrire des extensions PHP, mais aussi parce que, dans les applications C, il existe un environnement qui se soucie toujours des performances, du contrôle de la mémoire, du cycle de vie des variables, des structures de données et des algorithmes
◆ ; L'analyse et la conception orientées objet sont une méthode efficace pour résoudre des problèmes complexes. Apprenez l'abstraction, c'est le seul moyen de résoudre des problèmes complexes.
Comment étudier efficacement est un gros problème. « Développement itératif centré sur l'architecture, basé sur des cas d'utilisation », empruntant cette idée, les méthodes d'apprentissage efficaces peuvent s'exprimer comme suit : centrées sur des principes, des modèles ou des mécanismes, apprentissage itératif axé sur les tâches. C'est un peu abstrait, donnons un exemple pour illustrer comment apprendre.
Objectif : Apprendre à améliorer les performances de traitement.
Tâche pilotée par itérable : rechercher l'emplacement par IP. Il s'agit d'une tâche courante pour les applications Web et la base de données IP contient environ 100 000 lignes d'enregistrements.
Première itération : implémentation de la fonction sans tenir compte des performances (implémentée via PHP)
Parce que la région ne peut pas être recherchée directement via KEY (IP), donc la méthode simple de le mettre directement dans les données ou via un tableau associatif ne fonctionnera pas. L'idée est de trier d'abord les données puis de rechercher :
◆Comment rechercher par IP ? Pour les données ordonnées, la recherche binaire est la plus rapide.
◆Comment trier ? Bien sûr, vous pouvez utiliser la fonction de tri de la bibliothèque, mais puisque vous apprenez, il est préférable d'implémenter vous-même le tri rapide.
Objectifs d'apprentissage : algorithmes de tri, algorithmes de recherche
La structure des données et la base des algorithmes de PHPer sont relativement pauvres. Je n'ai généralement pas de tâches dans ce domaine et je n'étudie pas moi-même, donc. Je manque de connaissances dans ce domaine. Cependant, les problèmes résolus par la programmation se résumeront en fin de compte à la structure des données et aux algorithmes qui opèrent sur cette structure de données. Si l'algorithme de structure des données est toujours dans votre esprit, vous serez en mesure de comprendre clairement sa structure interne lorsque vous rencontrerez un problème, et la solution émergera naturellement.
Deuxième itération : Optimisation du chargement et du tri des données
Si vous effectuez la première étape, elle n'est fondamentalement pas disponible car les données doivent être chargées et triées à chaque fois, ce qui prend trop de temps. La solution consiste à charger et trier les données une fois et à les placer dans un endroit où chaque processus PHP peut y accéder. Le mettre dans Memcache est un problème facile pour tout le monde. En fait, le placer dans la mémoire partagée (pris en charge par EA et d'autres accélérateurs) est un moyen plus rapide, car Memcache a également plus d'opérations réseau. Les données sont-elles stockées dans la mémoire partagée dans leur intégralité ou en blocs ? Comment tester les performances ? Comment analyser les goulots d'étranglement (xdebug) ?
Objectifs d'apprentissage : Méthodes pour détecter, localiser et optimiser les performances PHP ; l'impact de la structure d'implémentation PHP sur les performances.
La troisième itération : écriture d'extensions PHP
Les performances ne peuvent toujours pas s'améliorer, et je dois entrer dans le monde du C/C++, mais à partir de maintenant vous ne le ferez plus être uniquement un PHPer Quant aux ingénieurs polyvalents côté serveur, c'est bien sûr un énorme défi pour les étudiants qui n'ont jamais fait de C/C++.
Objectifs d'apprentissage : Apprendre le C/C++, écrire des extensions PHP
Comment déterminer les mécanismes et principes à apprendre ? Comment trouver les tâches d'apprentissage de la conduite ? Je n’ai aucune idée de ce que je dois apprendre. Comment puis-je répondre aux deux questions ci-dessus ? Découvrez les points clés qu'il faut retenir du positionnement de cette technologie, c'est-à-dire comment elle le fait (mécanisme) et pourquoi elle peut le faire. Énumérez les applications les plus courantes de cette technologie sous forme de tâche d’apprentissage et pratiquez-les du plus simple au plus difficile.
Si j'ai besoin d'apprendre JavaScript, j'ai des connaissances perceptuelles en HTML et CSS. La première chose à comprendre est que JavaScript est un langage dynamique dans le domaine du Web, qui résout principalement l'interaction dynamique des pages Web. Les points clés à apprendre sont les suivants :
◆Comment JavaScript interagit avec HTML (mécanisme)
◆Quelles sont les caractéristiques dynamiques de JavaScript et en quoi sont-elles différentes des autres langages dynamiques ? (Modèle de langage)
Si vous êtes entièrement autodidacte, trouver les points clés à apprendre (mécanisme, modèle, principe) Fixer des tâches d'apprentissage n'est en effet pas si simple à appréhender. Si vous trouvez une personne expérimentée pour vous guider ou ajoutez une équipe d’apprentissage, la vitesse d’apprentissage sera en effet grandement améliorée.