web-dev-qa-db-fra.com

Vitesse d'exécution du code: ASP.NET-MVC vs PHP

J'ai un argument amical à ce sujet avec un collègue, et mon opinion personnelle est qu'une application Web compilée ASP.NET-MVC fonctionnerait plus efficacement/plus rapidement que le même projet qui serait écrit en PHP. Mon ami n'est pas d'accord.

Malheureusement, je n'ai pas de données solides que je puisse utiliser pour sauvegarder mon argument. (ni lui non plus)

Pour cela, j'ai essayé de chercher des réponses sur Google pour essayer de trouver des preuves pour lui prouver le contraire, mais la plupart du temps, le débat s'est transformé sur quelle plate-forme il est préférable de développer, le coût, les fonctionnalités de sécurité, etc ... argument je ne me soucie vraiment de rien de tout cela.

Je voudrais savoir ce que la communauté de débordement de pile pense de la vitesse/efficacité brute des sites Web en général qui sont développés dans ASP.NET avec MVC par rapport au même site Web développé avec PHP?

Quelqu'un a-t-il des exemples pratiques dans des scénarios du monde réel comparant les performances des deux technologies?

(Je réalise que pour certains d'entre vous, cela peut très bien être un argument non pertinent et peut-être stupide, mais c'est un argument, et j'aimerais toujours entendre les réponses des bonnes personnes ici à S.O.)

69
7wp

C'est une comparaison difficile à faire car les différences dans les piles respectives signifient que vous finissez par faire la même chose différemment et si vous les faites de la même manière à des fins de comparaison, ce n'est pas un test très réaliste.

PHP, que j'aime, est dans sa forme la plus basique chargée avec chaque requête, interprété puis rejeté. Il ressemble beaucoup à CGI à cet égard (ce qui n'est pas surprenant étant donné qu'il a environ 15 ans).

Au fil des ans, diverses optimisations ont été apportées pour améliorer les performances, notamment la mise en cache d'opcode avec APC, par exemple (à tel point qu'APC sera une partie standard de PHP 6 et non optionnel). module tel qu'il est maintenant).

Mais toujours PHP sont essentiellement transitoires. Les informations de session sont (normalement) basées sur des fichiers et s'excluent mutuellement (session_start () bloque les autres scripts accédant à la même session utilisateur jusqu'à session_commit () ou la fin du script) alors que ce n'est pas le cas dans ASP.NET. Mis à part les données de session, il est assez facile (et normal) d'avoir des objets qui vivent dans le contexte de l'application dans ASP.NET (ou Java d'ailleurs, auquel ASP.NET ressemble beaucoup plus).

Ceci est une différence clé. Par exemple, l'accès à la base de données dans PHP (en utilisant mysql, mysqli, PDO, etc.) est transitoire (malgré les connexions persistantes) alors que .Net/Java utilisera presque toujours des pools de connexions persistantes et s'appuiera sur ceci pour créer des cadres ORM et similaires, dont les caches sont au-delà de toute demande particulière.

En tant que plate-forme interprétée par bytecode, ASP.NET est théoriquement plus rapide mais les limites de ce que PHP peut faire sont si élevées qu'elles ne sont pas pertinentes pour la plupart des gens. 4 des 20 sites les plus visités sur Internet sont PHP par exemple. La vitesse de développement, la robustesse, le coût de fonctionnement de l'environnement, etc ... ont tendance à être beaucoup plus importants lorsque vous commencez à évoluer que toute différence de vitesse théorique.

Gardez à l'esprit que .Net a des types primitifs, la sécurité des types et ce genre de choses qui rendront le code plus rapide que PHP peut l'exécuter. Si vous voulez faire un test quelque peu injuste, triez un tableau d'un million d'entiers aléatoires 64 bits dans les deux plates-formes. ASP.NET le tuera car ce sont des types primitifs et les tableaux simples seront plus efficaces que les tableaux associatifs de PHP (et tous les tableaux de PHP sont associatifs). Plus PHP sur un OS 32 bits n'aura pas un entier 64 bits natif donc en souffrira énormément).

Il convient également de noter qu'ASP.NET est précompilé alors que PHP est interprété à la volée (à l'exclusion de la mise en cache des opcode), ce qui peut faire la différence mais la flexibilité de PHP à cet égard est une bonne chose. Pouvoir déployer un script sans faire rebondir votre serveur est génial. Déposez-le et cela fonctionne. Brillant. Mais il est finalement moins performant.

En fin de compte, je pense que vous discutez de ce qui est vraiment un détail non pertinent.

66
cletus

ASP.NET s'exécute plus rapidement. Le développement ASP.NET est plus rapide. Achetez un ordinateur rapide et profitez-en si vous faites des applications Web professionnelles sérieuses

Le code ASP.NET s'exécute beaucoup plus rapidement que PHP, lorsqu'il est construit en mode Release, optimisé, mis en cache, etc. etc. Mais, pour les sites Web (à l'exception des gros joueurs, comme Facebook), c'est moins important - le plus de temps de rendu de page est accès et interrogation de la base de données.

En connectant la base de données, ASP.NET est beaucoup mieux - dans asp.net, nous utilisons généralement LINQ qui traduit nos requêtes d'objet en procédures stockées dans la base de données SQL Server. La connexion à la base de données est également persistante, un pour un site Web, il n'est pas nécessaire de se reconnecter.

PHP, en comparaison, ne peut pas maintenir la connexion au serveur SQL entre les requêtes, il se connecte, récupère les données de la base de données et détruit, lorsque la reconnexion de la base de données représente souvent 20 à 30% du temps de rendu des pages.

De plus, la configuration complète de l'application Web est rechargée en php à chaque demande, où dans asp.net elle persiste en mémoire. Il peut être facilement vu dans les grands cadres d'entreprise comme symfony/symfony2, beaucoup de temps de rendu est un processus interne de symfony, où asp.net se charge une fois et ne gaspille pas votre serveur pour un travail inutile.

ASP.NET peut contenir un objet dans le cache de la mémoire d'application - en php, vous devez l'écrire dans des fichiers ou utiliser un hack comme memcache. utiliser memcache est beaucoup de travail avec des problèmes de concurrence et de danger (le stockage du cache dans des fichiers a également ses propres problèmes de concurrence - chaque demande démarre un nouveau thread du serveur Apache et de nombreuses demandes peuvent fonctionner en même temps - vous devez penser à la concurrence entre ceux-ci threads, cela prend beaucoup de temps de développement et ne fonctionne pas toujours parce que php n'a pas de mécanisme mutex dans le langage, donc vous ne pouvez pas faire de section critique de quelque façon que ce soit).

maintenant quelque chose sur la vitesse de développement: ASP.NET a deux principaux frameworks conçus pour cela (Webforms et MVC), installés avec l'environnement, où en PHP vous devez obtenir un framework open-source. Il n'y a pas framework standard en php comme en asp.NET.

Le langage ASP.NET est si riche, la bibliothèque standard a des solutions pour des problèmes très courants, où PHP est ... nue ... ils ne peuvent pas garder une convention de nommage.

.NET a des types, où PHP est dynamique, donc cela signifie aucun contrôle sur le code source jusqu'à ce que vous l'exécutiez ou que vous écriviez des tests unitaires.

.NET a un excellent IDE où PHP les IDE sont moyens ou bons) (PHPStorm est toujours bien pire que VS + resharper ou même sans)

L'échafaudage PHP dans symfony est déclenché à partir de la ligne de commande lorsque l'échafaudage ASP.NET est intégré à l'environnement.

Si vous avez un ordinateur lent comme le mien (un cœur 2,2 GHz), le développement de pages asp.net peut être pénible car vous devez recompiler votre projet à tout changement de code source, où PHP rafraîchissement du code immédiatement.

La syntaxe du langage PHP est donc inachevée, non solide et nue par rapport à la syntaxe C #. Des types forts en C # et de nombreuses fonctionnalités de langage flexibles peuvent accélérer votre développement et rendre votre code moins bogué.

31

Dans mon expérience (non référencée), Asp.Net peut certainement rivaliser (et dans certains domaines dépasser) PHP en termes de vitesse brute. Mais similaire à beaucoup d'autres questions liées au choix de la langue, le la déclaration suivante est (dans ce cas) valide (à mon avis):

  • Il existe des sites lents et bogués en langage x (que ce soit PHP ou Asp.Net)
  • Il existe d'excellents sites rapides en langage x (que ce soit PHP ou Asp.Net)

Ce que j'essaie de dire: les (talents du) développeur influenceront la vitesse globale plus qu'un choix entre deux technologies (à peu près équivalentes dans une certaine mesure abstraite).

Vraiment, une comparaison de `` vitesse globale '' n'a pas beaucoup de sens car les deux peuvent se rattraper d'une manière ou d'une autre à moins que vous ne soyez dans un créneau spécialisé très spécifique (dont vous ne nous avez pas informé).

20
ChristopheD

Je dirais ASP.net

Choses à considérer:

  • ASP.net est précompilé
  • ASP.net est généralement écrit en C #, qui devrait s'exécuter plus rapidement que PHP

Certes, les différences sont très mineures. Il y a des avantages à tous les deux, je pense que PHP est beaucoup plus facile à déployer et peut fonctionner sur n'importe quel serveur et pas seulement sur IIS. Cependant, j'aime beaucoup ASP.net MVC.

14
bbedward

J'ai fait un test de performance.

Programme: somme de 10000000 numéros

enter image description here

enter image description here

La sortie donnée prouve que php est plus lent que C # ............

13
Hitesh Modha

Sans aucune optimisation, une application compilée .net s'exécuterait bien sûr "plus vite" que php. Mais vous avez raison, c'est un argument stupide et non pertinent car il n'a aucune incidence sur le monde réel au-delà des droits de vantardise.

5
pbreitenbach

Généralement, ASP.Net fonctionnera mieux sur un matériel donné que PHP. ASP.Net MVC peut faire encore mieux (peut être le mot opérationnel ici). La plupart de la plate-forme est conçue pour le développement d'entreprise. Code testable, séparation des préoccupations, etc. Une grande partie du ballonnement dans ASP.Net provient de la pile d'objets dans la page (contrôles imbriqués). La précompilation rend cela plus performant, mais cela peut être un problème clé. MVC a tendance à permettre moins d'imbrication, en utilisant le moteur de vue basé sur les formulaires Web (d'autres sont disponibles).

Lorsque les ralentissements les plus importants des applications Web se produisent, ce sont généralement les services distants, en particulier la persistance des bases de données. PHP est programmé sans l'avantage du regroupement de connexions ou de l'état de session en mémoire. Cela peut être surmonté avec memcached et d'autres couches de service plus performantes (également disponibles pour .Net).

Cela se résume vraiment aux spécificités d'un site/d'une application. il se trouve que ce site exécute assez bien MVC sur un matériel assez modeste. Un site similaire sous PHP tomberait probablement sous son propre poids. Autres choses à considérer. IIS vs Apache vs LightHTTPD etc. Honnêtement, le php vs asp. net est bien plus que des différences de performances brutes. PHP ne se prête pas bien aux grandes applications complexes presque autant qu'à asp.net mvc, c'est aussi simple que cela ... Cela a plus à voir avec VS + SCC que toute autre chose.

3
Tracker1

Je suis un développeur expert sur les deux technologies (ASP.Net c # et PHP5). Après des années et des années de travail et de comparaison dans des environnements de production réels, voici mes impressions:

  • Tout d'abord, je ne peux pas les comparer en faisant une boucle d'ajout de valeurs 1.000.000, ce n'est pas un cas réel.

  • N'est-ce pas la même comparaison dans mon environnement de développement qu'un véritable environnement de production. Par exemple: En développement, ASP.Net n'utilise pas IIS par défaut, utilisez un serveur de développement interne qui a différentes optimisations. En développement, il n'y a pas de concurrence.

Donc mon avis est le suivant:

  • Boucler 1.000.000 fois c # va être plus rapide. (Pas de sens)

  • Servir une vraie page, qui accède à la base de données, montre des images, a des formes etc .... ASP.Net est plus lent que PHP.

  • Le poids des pages ASPX est x10 plus lourd que PHP, ce qui fait que l'utilisateur final attend plus de temps pour obtenir la page.

  • ASPX est plus lent à développer que PHP, c'est important car à la fin c'est de l'argent. Nous développons 35% plus rapidement en PHP que ASP.Net, car nous devons compiler et redémarrer chaque fois que vous voulez vérifier smthg.

  • Dans les grands projets, ASP.Net à long terme est préférable pour éviter les erreurs et avoir une architecture complexe.

  • En raison des serveurs Windows, IIS, .... à la fin, vous avez besoin d'un serveur puissant pour contenir le même nombre d'utilisateurs sur ASP que PHP. Par exemple: Nous servons avec ASP.net autour de 20.000 utilisateurs simultanés et en PHP, le même serveur peut obtenir environ 30 000 utilisateurs.

La seule chose importante n'est pas de boucler lequel est le plus rapide. La chose est quand le site Web est réel et en production, combien d'utilisateurs ils peuvent contenir, quelle est la page (plus lourd == plus de temps d'attente des utilisateurs, plus de charge nette du serveur, plus de charge de disque du serveur, plus de charge de mémoire de serveur). Essayez les heures de vérification avec accès simultané et vous verrez.

J'espère que ça aide.

2
Christian

J'aurais tendance à être d'accord avec vous (que ASP.NET MVC est plus rapide), mais pourquoi ne pas faire un pari amical avec votre ami et partager les résultats? Créez une page DYNAMIQUE vraiment simple, dérivée d'une base de données MySQL, et chargez la page plusieurs fois.

Par exemple, créez une table avec 1 000 000 lignes contenant une clé primaire séquentielle, puis un # aléatoire dans la deuxième colonne. Chacun de vos sites peut accepter la clé primaire dans un GET, récupérer le # aléatoire en fonction de la clé transmise et afficher le # aléatoire dans un type de code HTML généré dynamiquement.

J'adorerais connaître les résultats ... et si vous avez un blog ou similaire, le reste du monde le ferait aussi (cette question est posée TOUT LE TEMPS).

Ce serait encore mieux si vous pouviez créer cette petite application simple en ASP aussi. Heck, je vous paierais même pour ces résultats si le test était bien conçu. Sérieusement - exprimez simplement votre intérêt ici et je vous enverrai mon e-mail.

1
Beep beep

Besoin de noter que la question est .NET MVC vs PHP, pas .NET (Web Forms) vs PHP. Je n'ai pas les faits, mais le sentiment général est PHP fonctionnent plus rapidement que les sites de formulaires Web .NET (et je le fais .NET uniquement). Les formulaires Web .NET malgré leur compilation vs leur interprétation = PHP est généralement lent, car tout le morceau de code généré automatiquement par le moteur .NET pour rendre le code HTML de chaque <asp: control> que vous utilisez en mode conception. Obtenir un formulaire Web .NET pour rivaliser en vitesse avec PHP est une odisea complète qui commence par la définition de EnableViewState = false, et peut finir par utiliser chaque contrôle html avec runat = server ... fou euh?

Maintenant, MVC est une histoire différente, j'avais créé deux sites Web en utilisant .NET MVC2 et le sentiment est bon, vous pouvez sentir la vitesse maintenant! et le code est aussi propre que n'importe quel PHP site Web. Donc, maintenant, MVC vous permet d'écrire du code propre comme PHP le fait, et MVC est compilé avec PHP interprété, cela ne peut conduire qu'à une chose, MVC plus rapide que PHP ... le temps le prouvera, quand le sens général est "les sites Web MVC fonctionnent plus vite que PHP" alors nous aurons raison sur ce que je dis ici aujourd'hui.

à plus/!

1
Nestor