Maison >développement back-end >tutoriel php >Sauter de PHP à aller: blasphème, bravade ou bon sens?
Points de base
Cet article sur la migration de PHP à aller a été initialement publié ailleurs et a été reproduit ici avec la permission de l'auteur.
Plus tôt cette année, j'ai sans doute pris une mauvaise décision commerciale: j'ai décidé de réécrire l'application Laravel qui a propulsé Boxzilla en Go.
Cependant, je ne le regrette pas.
Après quelques semaines, j'ai déployé l'application Go. Le construire était ma période le plus heureux depuis des mois, j'ai beaucoup appris et je me suis retrouvé avec une énorme amélioration par rapport à l'ancienne application: de meilleures performances, un déploiement plus facile, une couverture de test plus élevée.
L'application est une API et une zone de compte axées sur une base de données assez simples où les utilisateurs peuvent se connecter pour télécharger des produits, afficher les factures ou mettre à jour leurs méthodes de paiement.
Stripe et Braintree sont utilisés pour accepter les paiements d'abonnement. Les factures sont traitées à l'aide de Moneybird et certains e-mails de transaction sont envoyés à l'aide de Mailgun.
Alors que Laravel fonctionne assez bien, je pense toujours que certaines choses sont trop compliquées. Et que se passe-t-il avec une nouvelle version "principale" publiée tous les quelques mois? Je serais heureux si la version plus récente contient des améliorations significatives, mais plusieurs fois, à mon avis, cela apporte simplement quelques modifications mineures au nom et à la structure du répertoire.
L'année dernière, j'avais déplacé plusieurs services à faire, donc je n'étais pas complètement nouveau dans la langue. En tant que développeur vendant des produits basés sur WordPress, une partie de mon travail consiste à faire face à une ancienne pile technologique qui se concentre sur les utilisateurs finaux.
Si je n'étais pas des travailleurs indépendants, je postulerais à un nouvel emploi pour compenser ce manque de technologie «sexy». En tant que mon propre patron, il est de ma responsabilité de rendre mon travail quotidien amusant, pas seulement pour poursuivre des avantages plus directs. Si le revenu le permet (et fait), pourquoi ne pas s'amuser?
Écrire le code GO est une chose agréable, avec des outils incroyables, non seulement un développement rapide, mais le résultat final est généralement incroyablement rapide. Le simple fait de lire le but du projet Go m'a fait tomber amoureux de cette langue.
Je pense que dans les prochaines années, nous verrons pas mal de gens passer de langues dynamiquement dactylographiées comme PHP, Python et JavaScript.
Le code migration vers Golang implique principalement de faire correctement les interactions de base de données et de porter des modèles de lame vers quelque chose que nous pouvons utiliser dans GO.
Orm me gêne toujours, j'ai donc choisi une couche d'accès aux données simularisable et une requête SQL normale. Meddler est utilisé pour éliminer un code de passe-partout qui analyse les résultats de la requête aux structures.
Pour prendre en charge des modèles en couches et des modèles partiels, je open plus vert, un petit emballage autour du package HTML / modèle standard de Go. Cela me permet de porter le fichier de modèle de lame pour aller relativement facilement, car je peux utiliser la même hiérarchie et les modèles partiels.
Pour l'intégration avec Stripe, il y a le package officiel de la bande. Pour Braintree, il y a le package non officiel de Braintree-Go qui a été négligé depuis un certain temps mais qui a récemment reçu une nouvelle attention. Puisqu'il n'y a pas de forfait Go pour gérer les factures dans Moneybird, j'ai construit et ouvert Moneybird-Go.
Puisque GO est une langue compilée et que sa bibliothèque standard est bien meilleure que PHP, il n'est pas juste de comparer les deux langues que je suis sur le point de faire. Cela dit, je pense qu'il serait amusant de partager certains chiffres.
WRK est utilisé pour effectuer des repères HTTP simples sur les deux applications, renvoyant HTML pour les pages de connexion.
Numéro de concurrence Délai moyen Demande / seconde transfert / seconde
Malheureusement, une fois que j'augmente le nombre de "utilisateurs" simultanés à plus de 100, l'application Laravel (ou socket PHP-FPM) continue de s'écraser.
NetData fournit le tableau suivant pour voir comment le serveur peut supporter de telles charges.
GO Language, le nombre de connexions simultanées est de 100
Laravel, le nombre de connexions simultanées est de 100
Notez que j'exécute des repères à partir de la même machine que l'application s'exécute, donc cela affecte sérieusement les deux graphiques.
Comparons le nombre de lignes de code dans les deux applications, y compris toutes les dépendances des fournisseurs.
<code>find . -name '*.php' | xargs wc -l 156289 total </code>
La version Laravel contient plus de 156 000 lignes de code. Cela n'inclut pas les dépendances de développement, qui sont nécessaires pour que Laravel exécute des tests, etc.
<code>find . -name '*.go' | xargs wc -l 33624 total </code>
En revanche, la version Golang contient 33 000 lignes de code. Ce n'est qu'un cinquième du même code de fonction.
excluons les dépendances externes dans l'application Laravel afin que nous sachions combien de lignes de code que j'ai réellement écrites.
<code>find . -name '*.php' -not -path "./vendor/*" | xargs wc -l 13921 total </code>
pour Golang.
<code>find . -name '*.go' -not -path "./vendor/*" | xargs wc -l 6750 total </code>
Si vous affichez uniquement le nombre de lignes de code gérées, les résultats seront plus équilibrés. Pourtant, il s'agit d'une application avec la même fonctionnalité, avec une quantité de code de moitié.
Dans Golang, le test est un citoyen de première classe et le fichier de test est situé à côté du fichier source réel.
<code>license.go license_test.go subscription.go subscription_test.go</code>
Cela rend le développement axé sur les tests d'application très pratique.
Dans notre application Laravel, nous effectuons principalement des tests d'intégration pour vérifier si le gestionnaire de demande renvoie la réponse correcte. La couverture globale du test est assez faible, principalement en raison du couplage serré, ce qui à son tour est principalement ma propre faute. La rédaction de la même application la deuxième fois aide ici.
J'ai fait quelque chose que vous ne devriez jamais faire: j'ai réécrit une application dans une langue différente parce que je me sentais comme ça. Le résultat est une application plus petite et plus rapide et beaucoup de plaisir.
PHP et GO sont tous deux des langages de programmation puissants, mais ils ont des différences clés. PHP est un langage de script principalement utilisé pour le développement Web, tandis que GO est un langage compilé statiquement typé conçu pour améliorer l'efficacité et la simplicité. GO offre d'excellentes performances dans la vitesse et l'utilisation de la mémoire, et est également plus facile à maintenir en raison de sa simplicité et de sa nature dactylographiée. Cependant, PHP possède une communauté plus large et plus de ressources disponibles, ce qui facilite l'apprentissage et l'utiliser.
Il y a plusieurs raisons d'envisager de migrer de PHP à partir. GO fournit d'excellentes performances, ce qui est crucial pour les applications qui nécessitent une vitesse et une efficacité élevées. Il est également plus simple et plus direct, ce qui peut rendre votre code plus facile à maintenir. De plus, GO a un fort soutien pour la programmation simultanée, ce qui peut être un avantage majeur pour certains types d'applications.
La difficulté de migrer de PHP à aller varie en fonction de votre familiarité avec les concepts de programmation et de votre volonté d'apprendre une nouvelle langue. Le design de Go est simple et facile à comprendre, mais il a des fonctionnalités uniques qui prennent un certain temps à s'adapter. Cependant, avec un certain effort et une pratique, la plupart des développeurs devraient être en mesure de terminer la conversion.
Il existe de nombreuses ressources pour vous aider à apprendre. Le site Web officiel Go fournit des tutoriels et des documents complets, et il existe de nombreux cours en ligne et tutoriels disponibles. De plus, la communauté Go est active et solidaire, et il existe de nombreux forums et groupes de discussion où vous pouvez poser des questions et obtenir de l'aide.
Oui, vous pouvez utiliser Go pour le développement Web. GO a un package Net / HTTP intégré qui facilite la création d'applications Web, et plusieurs frameworks Web sont disponibles pour GO. Cependant, n'oubliez pas que GO est un langage commun, il n'est donc pas spécifiquement utilisé pour le développement Web comme PHP.
GO a un fort soutien pour la programmation simultanée, qui est l'un de ses principaux avantages par rapport à PHP. Goroutine et les canaux de Go facilitent l'écriture de code simultané, et la conception de la langue garantit l'efficacité et la sécurité de ce code. En revanche, PHP n'a pas de support de concurrence intégré, bien qu'il puisse être implémenté à l'aide d'autres outils et bibliothèques.
GO fournit généralement de meilleures performances que PHP. Il s'agit d'un langage compilé, ce qui signifie qu'il s'exécute directement sur le matériel de la machine, réduisant ainsi le temps d'exécution. Go a également un système de gestion de la mémoire plus efficace, ce qui peut réduire l'utilisation de la mémoire. Cependant, n'oubliez pas que pour les petites applications simples, les différences de performance peuvent ne pas être évidentes.
Oui, GO convient aux projets importants et complexes. Sa simplicité et ses fonctionnalités dactylographiées facilitent le maintien de grandes bases de code, et ses fonctionnalités de performance le rendent adapté aux applications à haute charge. En outre, le soutien de GO pour la programmation simultanée peut être un avantage majeur pour les projets qui nécessitent des niveaux élevés de parallélisme.
PHP possède une communauté plus large et plus de ressources disponibles, ce qui facilite l'apprentissage et l'utiliser. Cependant, la communauté Go se développe rapidement et il existe déjà de nombreuses bibliothèques et outils disponibles pour GO. De plus, les caractéristiques de simplicité et de performance de GO le rendent populaire parmi de nombreuses entreprises technologiques, ce qui contribue également à son écosystème croissant.
Il peut y avoir des défis lors de la migration de PHP à partir, notamment l'apprentissage de nouvelles paradigmes de syntaxe et de programmation, l'adaptation des fonctionnalités uniques de Go telles que les goroutines et les canaux, et trouver les bonnes bibliothèques et les bonnes outils pour vos besoins. Mais ces défis peuvent être surmontés avec un certain effort et les bonnes ressources.
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!