2010-01-05 7 views
5

Selon this page, il semble que Perl, PHP, Python est 50 fois plus lent que C/C++/Java. Par conséquent, je pense que Perl, PHP, Python ne peuvent pas gérer les applications critiques (telles que> 100 millions d'utilisateurs,> xx millions de requêtes par seconde). Des exceptions existent, par exemple. facebook (il est dit que Facebook est écrit avec PHP entièrement), wikipeida. En outre, j'ai entendu google utiliser Python intensivement.Quel langage de programmation convient au développement d'applications critiques sur le Web?

Alors pourquoi est-ce le matériel le plus rapide qui remplit le grand écart de vitesse entre C/C++/Java et Perl/PHP/Python?

merci.

+3

Étape 1. Déterminez les cas qui vous intéressent. Étape 2. Concevoir des systèmes pour recueillir des chiffres pour ces cas dans diverses langues. Étape 3. Comparer, choisir une langue et mettre en œuvre. –

+3

Il est communément dit que les bons programmeurs peuvent coder de super programmes dans un langage merdique, et qu'un programmeur merdique peut coder des programmes merdiques dans un langage génial. donc ce qui compte le plus, c'est comment vous le codez, le choix du langage est secondaire. ;) – Lukman

+2

Si vous avez besoin de choisir un langage rapide pour implémenter un algorithme connu, les repères de fusillades ont un sens. Si vous devez choisir une langue pour écrire une application métier, les critères ne signifient pas squat. Le problème n'est pas "quelle langue peut faire X plus vite", car il n'y a pas de X simple pour "votre entreprise". La performance et la robustesse dépendent en grande partie de la qualité de vos programmeurs, pas du langage. – Schwern

Répondre

5

La page que vous liez dit que la moitié de la vérité. Bien sûr, les langues natives sont plus rapides que les langues dynamiques, mais cela est essentiel pour les applications ayant des besoins informatiques élevés. Pour la plupart des applications Web, ce n'est pas si important. Une requête Web est généralement servie rapidement. Il est plus important d'avoir un framework efficace, qui gère correctement les ressources et démarre de nouveaux threads pour répondre rapidement aux requêtes. De plus, le comportement temporel n'est pas le seul aspect critique. Des applications fiables et sans erreur sont probablement mieux réalisées avec des langages dynamiques.

Et non, le matériel plus rapide n'est pas une solution. En fait, Google est célèbre pour l'utilisation d'un groupe de machines bon marché.

+0

Le matériel plus rapide est une solution; Google vient de décider qu'il était plus rentable d'utiliser du matériel de base avec de larges tolérances de chaleur. –

+0

Le matériel plus rapide est une solution permettant de faire tourner une application correctement conçue plus rapidement et de servir plus d'utilisateurs. Ce n'est pas une solution pour améliorer le fonctionnement d'une application mal conçue. – kgiannakakis

+1

kgiannakakis + Robert Grant ergo, Google est une application mal conçue –

2

il n'y a pas de compilateur JIT en php qui compilent le code en code machine

Une autre grande raison est typage dynamique de PHP. Un langage typé dynamiquement va toujours être plus lent ..

cliquez ci-dessous et lire la suite

What makes PHP slower than Java or C#?

+0

pourquoi le vote vers le bas? !! – Hiyasat

+4

Lors d'un downvoting, veuillez ajouter un commentaire expliquant pourquoi vous avez effectué une downvotation, afin que l'utilisateur qui a répondu puisse avoir une chance de se corriger et de s'améliorer dans le futur. –

+0

La question n'est pas de savoir pourquoi une langue est plus lente que l'autre, la question est de savoir laquelle est la meilleure pour le développement web, donc sa réponse à la mauvaise question. En outre, le PO est confus que la performance brute fait pour un meilleur langage et cette réponse ne fait qu'alimenter cela. – Schwern

3

(par exemple> 100 millions utilisateur,> xx millions demande à chaque seconde)

Pour réaliser ce genre de performance, vous allez devoir concevoir et mettre en œuvre le site web/application en tant que système multiniveau évolutif avec réplication à travers (probablement) tous les niveaux. À ce stade, le fait qu'un langage de programmation soit plus rapide/plus lent qu'un autre affecte probablement le nombre de machines dont vous avez besoin dans votre batterie de serveurs. La conception de l'architecture du système est beaucoup plus significative.

0

Google utilise Python pour GAE et Windows Azure fournit PHP. L'architecture LAMP est idéale pour l'évolutivité des applications.

Je pense aussi que le langage de programmation n'est pas si important en ce qui concerne les performances. Le plus important est de regarder l'architecture de votre application.

J'espère que cela aide

0

Pour servir une page Web, vous devez:

  1. Recevoir et analyser la demande. Décidez ce que vous souhaitez faire avec la demande.
  2. Lecture/écriture de données persistantes (base de données, cache, système de fichiers)
  3. Données HTML de sortie.

La "vitesse" du langage côté serveur ne s'applique qu'aux étapes deux et quatre. Étant donné que la plupart des scripts s'efforcent de réduire au minimum l'étape 2 et que la plupart des langages Web (y compris PHP) optimisent autant que possible l'étape 4, le temps de traitement des demandes sera dépensé à l'étape 3.

Et le temps passé à l'étape 3 est indépendant du langage côté serveur que vous utilisez ... sauf si vous implémentez votre propre base de données et votre cache distribué.

7

Le code de calcul est le moindre de mes soucis dans la plupart des applications Web à usage intensif.

Les goulots d'étranglement dans une application web availablility typique de haute sont (non nessecarility dans cet ordre, mais le plus probable):

  1. Base de données (IO et CPU)
  2. fichiers réseau IO
  3. Bande passante
  4. mémoire sur le serveur d'applications
  5. Votre Java/C++/PHP/code Python

Vos principales préoccupations pour rendre votre application évolutive sont:

  1. Réduire l'accès à la base de données (mise en cache, avec le regroupement à l'esprit, Quering intelligent)
  2. Distribuez votre application (cluster)
  3. Éliminez les verrous de synchronisation inutiles entre les fils (voir communes piscine 1.3)
  4. Créer les indices DB corrects, modèle de données et la réplication pour soutenir de nombreux utilisateurs
  5. Réduire la taille de vos réponses, à l'aide des mises à jour incrémentales (AJAX)

seulement après que tous les ci-dessus sont mises en œuvre, optimisez votre code

S'il vous plaît ne hésitez pas à ajouter à la liste si je manqué quelque chose

1

C est facilement la langue la plus rapide là-bas. C'est si rapide que nous écrivons d'autres langues. Personne n'écrit sérieusement des sites web en C. Pourquoi? Il est très facile de bousiller C de manière très difficile à détecter et il ne fait presque rien pour vous aider. En bref, il mange des programmeurs et génère des bugs.

La construction d'une application robuste et rapide ne consiste pas à sélectionner la langue la plus rapide, c'est-à-dire A) la maintenabilité et B) l'évolutivité. La maintenance signifie qu'il n'y a pas beaucoup de bogues. Cela signifie que vous pouvez rapidement ajouter de nouvelles fonctionnalités et modifier celles qui existent déjà. Vous voulez une langue qui fait le plus de travail possible pour vous et qui ne vous gêne pas. C'est pourquoi des choses comme Perl, Python, PHP et Ruby sont si populaires. Ils ont tous été écrits avec la commodité du programmeur à l'esprit sur la performance brute ou la propreté. C a été écrit pour la performance brute. Java a été écrit pour la propreté conceptuelle. L'évolutivité signifie que vous pouvez passer de 10 utilisateurs à 10 000 utilisateurs sans réécrire le tout. Cela signifiait que vous avez écrit le code le plus serré que vous puissiez gérer, mais le code hautement optimisé est généralement difficile à maintenir le code.Cela signifie généralement faire des choses pour le bénéfice de l'ordinateur, pas l'humain et l'entreprise. Cela sacrifie la maintenabilité et vous devez dire à votre patron qu'il faudra 3 mois pour ajouter une nouvelle fonctionnalité.

Évolutivité ces jours-ci est le plus souvent réalisé en jetant le matériel à et parallélisation. Combien de processus et de processeurs et de machines pouvez-vous exploiter votre travail? Si vous pouvez y parvenir, vous pouvez lancer un autre ordinateur cloud bon marché comme vous en avez besoin. Bien sûr, vous allez vouloir en optimiser certains, mais à cette échelle, vous obtenez beaucoup plus de mettre en œuvre un meilleur algorithme que de resserrer votre code.

Par exemple, je pris une application PHP atone qui a du mal à gérer 50 utilisateurs à la fois, sont passés de Apache avec mod_php à lighttpd avec charge équilibrée à distance FastCGI processus permettant parallélisation avec un minimum de changement de code. Certains profils de base ont révélé que le framework PHP qu'ils utilisaient pour prototyper était lent, donc il a été retiré. Le profilage a également suggéré quelques index pour accélérer l'exécution des requêtes de base de données. Le résultat final était un système capable de gérer des milliers d'utilisateurs et une plus grande capacité pouvait être ajoutée en fonction des besoins tout en laissant intacte la majeure partie du code implémentant la logique métier. Ça m'a pris quelques semaines, et je ne connais pas très bien PHP.

Il peut être bénéfique pour réimplémenter petites pièces tranchantes dans une langue très rapide, mais le plus souvent pour vous a déjà été fait sous la forme d'une bibliothèque ou un outil optimisé. Par exemple, votre serveur Web. Pour la complexité et les besoins en constante évolution de la logique métier, l'important est la facilité de maintenance et la qualité de vos programmeurs. Vous trouverez que la plupart du web est écrit en PHP, Perl et Python parce qu'ils sont faciles à écrire, avec des petits morceaux tranchants écrits dans des choses comme C, Java et exotiques comme Scala (par exemple, Twitter) . Wikia, par exemple, est un Mediawiki modifié qui est écrit en PHP mais il est performant (entre autres raisons) en faisant un heroic amount of caching.

+0

"C'est si rapide que nous y écrivons d'autres langages" - c'est beaucoup plus à faire avec l'attente que, quel que soit le matériel existant, un compilateur C supportera ce matériel. – igouy

0

Pour php, il y a beaucoup de choses que vous pouvez faire pour augmenter les performances. Par exemple

  • Php Accelerator
  • Mise en cache des requêtes
  • optimiser les requêtes
  • l'aide d'un profileur pour trouver des pièces plus lentes et d'optimiser

Ces choses certainement aider à réduire l'écart entre les langues de niveau inférieur. Donc, pour répondre à votre question, il y a d'autres choses que vous pouvez faire dans le code pour l'optimiser et le faire tourner plus vite

0

Je suis d'accord avec luc. C'est l'architecture qui importe vraiment et pas le langage de programmation.

Questions connexes