Je construisez des sites Web pilotés par la base de données. Auparavant, j'ai utilisé Perl ou PHP avec MySQL. P>
Maintenant, je commence un gros nouveau projet et je tiens à le faire dans la manière dont cela entraînera le site J'ai vu plusieurs pages ici lorsque des questions sur la manière d'optimiser PHP sont critiquées avec diverses versions de "Il ne vaut pas la peine d'être passée à de grandes longueurs pour optimiser php puisqu'il s'agit d'une langue interprétée et qu'elle ne fera pas cette différence". / p>
J'ai également entendu diverses discussions (en particulier sur le SO Podcast) sur les avantages de En plus de la vitesse, un avantage que je renseme est la possibilité de trouver des bogues
7 Réponses :
IMHO C'est tout à fait un sens d'écrire une application Web complexe à l'aide d'une langue compilée, car elle ne donne pas d'avantages à un certain nombre de problèmes de facilité de gestion. P>
Il existe de nombreuses façons de monter des performances et de l'évolutivité dans une langue scriptée, à la fois au niveau linguistique et au niveau du système, étant les performances mineures de gain offrent finalement avec une langue compilée totalement influente. P>
De l'autre côté, je trouve très utile d'être possible de suivre un schéma d'agilité de développement et de chasse à un bogue, simplement de changer votre code et de voir les résultats. p>
Si vous alliez construire une nouvelle langue ... et vous avez proposé toute la sémantique et que vous avez terminé, et vous avez eu une boîte magique qui avait un commutateur entre faire de la langue compilée vs interprété, la version compilée serait plus rapide que la version interprétée. P>
pourquoi? Parce que compilant fort> apporte votre sémantique à un niveau inférieur sur la machine, ce qui signifie qu'il peut être exécuté beaucoup plus rapidement, alors que interprétation forte> signifie que la sémantique de votre langue sera traduite par certains chose em> (c'est-à-dire l'interpréteur) lorsque l'utilisateur utilise réellement votre site. P>
Ayant dit que ... cela ne signifie pas nécessairement que votre site fonctionne à 100% plus rapidement sur une langue compilée et une langue interprétée. Il y a des interprètes là-bas qui sont très rapides de nos jours pour différentes langues (c'est-à-dire PHP), et il existe même des optimiseurs pour les langages interprétés qui les rendent encore plus rapides. P>
Il y a beaucoup d'autres choses qui entrent dans la performance de votre site qui sont agnostiques de la langue que vous choisissez. Configuration matérielle, Configuration de la base de données, Topologie du réseau, etc. Ces choses peuvent avoir un impact plus important sur vous. Je suggérerais de mesurer pour être sûr. P>
Pour moi, trouver des bugs au moment de la compilation est un économiseur de temps
QUIBBLE: Il reste la possibilité que un JIT fonctionnant sur une langue interprétée puisse faire des optimisations dans un en cours d'exécution particulier i> qu'un compilateur ne pouvait pas faire parce qu'ils ne sont pas universellement fiables. J'ai vu certaines affirmations que Java parfois. réussit à être plus rapide que les langues compilées à cause de cela.
@dmckee Je dirais que si j'avais un java compilé et que je me suis dit Java que ma compilée Java va toujours courir plus vite. Je n'ai pas encore vu une circonstance où cela peut être faux. Cependant, je ne fais pas l'affirmation selon laquelle un Java a été toujours plus lent qu'un C # compilé, que pour moi comparer des pommes et des oranges dans ce cas.
Considérer pour (...) {... si (cond) {...} else {...} ...} code> où
ond code> est connu pour fixer Dans cette course, mais pourrait être variable sur la boucle en général. Le compilateur JIT pourrait chuter le chèque et raccourcir la boucle, tandis que le compilateur général ne peut pas. Jamais vu cela, moi-même non plus, mais je l'ai entendu dire.
En général, la JIT devrait être plus rapide que la compilation due à des instances spécifiques à la machine. Le JIT peut tirer parti des instructions spécifiques à la machine, optimiser les chemins de codes très utilisés, etc. J'ai vu des études qui montrent que Jit'd Java peut être plus rapide que compilée C, en particulier dans le cas d'un code parallèle où le JIT peut optimiser pour le Nombre correct de cœurs. Pour des langues comme Java et C #, Jit'd devrait être plus rapide que la pré-compilée (comme Ngen, où vous forcez la compilation de bytecode au code de la machine pour arriver à l'avance) car ces langues ont été conçues avec JIT à l'esprit.
@dmckee & @james je vois ce que vous dites. Je vais garder mes réservations jusqu'à ce que je fasse assister à cela dans la nature, même si je peux certainement voir pourquoi ces scénarios produiraient de meilleurs résultats pour la compilation classique.
Alors, pourquoi est-ce que cela compilait des implémentations de Python ne sont presque jamais plus rapides que Pythonc?
Perl n'est pas une langue interprétée: elle est compilée à bytecode, de sorte que vous payez le prix de l'interprétation uniquement lorsque l'exécutable PERL est lancé. Donc, lorsque vous l'utilisez avec Apache, n'utilisez pas CGI mais mod_perl. P>
Quoi que vous fassiez, le temps de développement deviendra probablement largement dépassé la durée de réponse si vous choisissez une langue qui ne convient pas à la programmation Web ou ne dispose pas de bonnes bibliothèques pour soutenir ce que vous devez faire. Par exemple. Je ne choisirais jamais c ou c ++. Vous ne voulez pas d'une application Web qui est cloquante rapide mais de buggy et 6 mois de retard. P>
L'exécution d'une machine virtuelle n'est toujours pas exactement la même chose que fonctionnant sur le matériel. Certes, il est plus rapide que d'analyser le texte du programme en continu, mais toujours ... c'est un cas intermédiaire entre l'interprétation pure et le code natif.
PHP est, comme Perl, compilé au bytecode. Par défaut, il est fait sur EACK Charge, mais vous pouvez utiliser un cache OPCODE pour contrer cela.
Ce que vous pouvez faire est ce que plusieurs sites Web de trafic lourde font (comme Facebook ou Twitter), aka écrit votre algorythm "CPU consommant" dans un plug-in C. P>
Par exemple, vous pouvez écrire un Extension PHP si vous envisagez d'utiliser php, ou un Extension Ruby Si vous prévoyez d'utiliser Ruby / Ruby sur des rails, etc. P>
De cette façon, vous pouvez conserver votre code Streamline simple et facile à entretenir (il peut être difficile de gérer la demande de C plutôt que de PHP), tout en ayant un noyau de fond fort et solide (car il est compilé et le compilateur vous dit quelles sont les problèmes à la compilation) p>
Vous pouvez même écrire un module Apache si vous souhaitez optimiser encore plus
"(Parce que c'est compilé et que le compilateur vous dit quelles sont les problèmes à la compilation)" lol. À moins que vous ne parliez d'ADA, la plupart des autres langues n'ont pas de compilateurs particulièrement stricts. De plus, C n'a même pas de manipulation des exceptions. Au moins la plupart des langues de script vous protégeront contre un comportement indéfini.
tomcat est un moyen courant d'utiliser des langues compilées vers déployer des pages Web, mais avant d'aller trop loin, considérez sérieusement ce que vos goulots d'étranglement de vitesse seront em>. Il y a quelques sources principales de ralentissement dans les applications Web: P>
1 et 5 n'ont pas vraiment beaucoup à voir avec cette question. P>
2 sera pertinent si vous avez de nombreuses images qui varient d'une page à la page. Si tel est le cas, les navigateurs clients ne feront pas une si bonne mise en cache d'emploi, et chaque charge de page prendra du temps. Dans ce cas, il est très probable que votre langue côté serveur ne soit pas remarquée, car les frais généraux des médias statiques domineront. P>
3 est susceptible d'être un facteur plus important que 4 pour beaucoup d'applications. Si vous avez très peu de données, mais vous faites beaucoup de traitement, alors 4 peut dominer, mais sinon, 3 domineront même si vous utilisez une langue interprétée. P>
Les gens peuvent demander "pourquoi optimiser php?" Parce que les 2 et 3 sont souvent plus importants de toute façon. Souvent, un bon Frame de mise en cache de base de données va être une optimisation meilleure (et plus facile). p>
Il y a beaucoup de pièces qui vont dans une application Web. Le temps pris par la couche d'application n'a pas besoin d'être grand. Pour une application typique, les plus grands porcs seraient dans le serveur Web et dans la base de données. Remplacer PHP avec un CGI binaire ne va pas changer cela. P>
En outre, tandis que les parties interprétées de PHP peuvent être quelque peu lentes, ce n'est qu'une petite partie de ce qui se passe dans l'exécution d'un script PHP. Toutes les fonctions fournies dans le cadre de la langue sont implémentées dans un code natif. Par exemple, lorsque vous appelez une fonction comme Il peut y avoir des cas où l'utilisation d'une langue différente que de PHP pourrait en valoir la peine, mais ce sont des cas particuliers. En général, il n'y a rien à gagner ici. P> preg_match code>, il appelle une bibliothèque de code natif et le laissera faire son travail. Cela signifie qu'il y a moins d'interprétation réelle que vous pourriez penser. P>
La latence du réseau est de loin le plus grand facteur déterminant de cet argument. En fait, la latence du réseau est tellement un facteur qu'il rend les considérations linguistiques plutôt sans importance d'une question de performance. Alors ... allez avec ce que vous savez. Utilisez la langue que vous êtes la plus à l'aise et la plus productive avec et d'autres considérations peuvent être élaborées au fur et à mesure. Maintenant, cela dit, il est toujours amusant d'essayer de nouvelles choses et d'apprendre de nouvelles choses peut devenir une obsession, de sorte que si le projet est personnel qui vous permet d'expérimenter, bien, de tous les moyens ..... p >
Merci pour votre réponse, mais je ne suis pas sûr d'être d'accord. Si j'ai une centaine de visiteurs à la fois en utilisant la CPU de mon serveur, cela peut faire une grande différence si l'exécution est rapide ou non. J'ai posé cette question après avoir entendu à plusieurs reprises que PHP est lente. Il est également vrai dans mon expérience que la vitesse de PHP n'a presque aucun impact comparé aux problèmes de base de données - la conception MySQL incorrecte peut vraiment ralentir tout.