Techniques Communes D'Exécution d'Api


  Share  
|

Des sites Web sont conçus pour être consultés par des individus, et en tant que tels tendent à compter sur la vitesse relativement réduite de l'utilisateur pour éviter tous les goulots d'étranglement d'exécution. Cette technique échoue malheureux avec APIs parce qu'ils vont être consommés par d'autres serveurs avec les raccordements à grande vitesse, souvent conçus seulement avec leur propre exécution à l'esprit (ils ne cacheront pas vos réponses pour vous, et feront à la place exactement la même demande à maintes reprises). Concevoir votre api avec l'exécution à l'esprit peut aider à maintenir le serveur rapide même lorsque beaucoup de demandes sont faites, et aidera à s'assurer que les futures mises à niveau de matériel peuvent accomplir le leur désiré charge.

Note

Beaucoup de sites Web sont conçus mal ou semblent manquer de n'importe quelle sorte de conception quelque. J'ai vu un emplacement qui a exigé de 10 questions de base de données de commencer la page, puis une question additionnelle pour chaque article dans leur base de données. Avec plus de 40 articles dans leur base de données, il y avait approximativement 50 questions étant faites chaque fois que la page d'index a chargé. Cette technique échouait terriblement pour un site Web recevant relativement peu de coups. Elle n'aurait pas duré des minutes si elle était consommée automatiquement, et je doute qu'elle ait duré plus que quelques secondes sous l'effet de Slashdot. Toutes ces questions de base de données étaient fondamentalement injustifiées aussi bien ; le inventaire de l'entreprise a changé lentement, ainsi une page statique s'est produite une fois par semaine du même manuscrit aurait fonctionné aussi bien pour l'utilisateur, mais aurait été plusieurs ordres de grandeur plus rapidement.

Cacher Des Données

Souvent des sites Web et des données de la demande d'APIs de la base de données chaque heure une demande est faits, quoique les données peuplassent les changements de réponse rarement. Ceci, combiné avec les techniques de normalisation de base de données a enseigné depuis le début du temps, signifie que chacune de ces demandes est probable faisant au moins des résultats se joignants d'une question à partir des tables multiples, probablement des questions de multiple. Si vos données ne changent pas cela souvent, considérez cacher la réponse.

Par exemple, prenez le site Web visuel de Bob fictif. Chaque fois quelqu'un regarde des informations détaillées sur un film sur son site Web ou les demande par son api, son serveur court trois questions : une une question qui trouve le pleins titre du film, ligne de parcelle de terrain, et évaluation, une question différente qui court une question jointive pour rechercher l'information détaillée sur chacun des membres de fonte, et une question finale pour déterminer le statut de location du film. C'est un gaspillage de ressources colossal ; une fois qu'un film est libéré, la seule réponse qui changera est son statut de location. Cependant, chaque heure où la page est chargée, les données est demandée encore à la base de données. Elle ferait à bien plus de sens ou à l'utilisation une page statique pour les films libérés (peuplant le statut de location dynamiquement), ou pour le moins cachez l'information de tout le film et recherchez le statut de location dynamiquement.

Notez

Vous avez probablement noté que, parce que la cachette finira probablement vers le haut dans une base de données, j'ai vraiment seulement ramené le compte de question de 3 à 2. Il ne ressemble pas à une amélioration énergique, mais il est. La question jointive recherchant l'information détaillée pour les membres de fonte va un ordre de grandeur plus lent qu'une consultation basée sur une clef primaire, tellement il y a une grande économie là. Vous pouvez également cacher les données de film sous une forme près de sa forme finale d'enchaînement, économisant sur tout le traitement généralement requis pour aller de la base de données à la page Web. Vous aurez besoin de deux cachettes dans cet exemple, d'une pour le site Web et d'une pour l'api.

Une utilisation plus futée des questions de base de données

Bien que cacher des données est une excellente méthode de réduire le nombre de questions que vous employez, il n'est pas toujours approprié. Assurez-vous juste que vous obtenez les la plupart hors de chaque question que vous courez. Beaucoup de données doubles de périodes sont demandées tout en manipulant une demande simple ; ceci se produit souvent quand les différentes fonctions ont besoin des mêmes données, mais elles ne s'appellent pas ainsi elles ne partagent pas leurs résultats. Considérez l'un ou l'autre qui retouche votre manuscrit pour obtenir tous les eus besoin elle-même, puis passez outre des données aux fonctions qui l'exigent, ou à créer une couche d'abstraction avec un objet qui prend soin d'obtenir l'information de la base de données seulement une fois requis.

Une fois que vous employez vos questions de base de données à leur plus plein, commencez le travail sur améliorer la vitesse des questions elles-mêmes. Ne commencez jamais les questions avec CHOISI * — de la demande seulement les champs vous avez besoin réellement. Examinez en outre vos questions et votre base de données. Essayez de s'assurer que les champs que vous basez votre choix sont allumés des clefs primaires ou au moins classé par le serveur de base de données.

Cacher De Réponse

Considérez un cas d'un magasin visuel api, qui permet à des utilisateurs de demander l'information sur des films. Avec un petit changement de conception (statut de location mobile à sa propre question, plutôt que d'à lui fournir chaque demande), beaucoup de nouvelles occasions cachantes se présentent. Puisque la réponse ne change pas indépendamment de qui la demande, un proxy server peut être côté utilisé de serveur pour manipuler la réponse (c'est beaucoup plus facile avec le REPOS APIs qu'avec du SAVON). Le réglage des en-têtes appropriés pendant la vie de cachette (24 heures pour des films, et 30 minutes pour le statut de location) permettra à l'api d'écarter la majeure partie de son travail au proxy server.

Accélérateurs de PHP

Il y a quelques accélérateurs de PHP disponibles, qui peuvent avoir un effet énergique sur la vitesse de vos manuscrits. Chaque fois qu'un manuscrit de PHP est exécuté, il est analysé et compilé dans le code de byte par le moteur scripting de PHP's. Puisque, d'une manière générale, le manuscrit n'a pas changé entre les exécutions, c'est une perte énorme de durée de la transformation. Les accélérateurs de PHP cachent la version de code de byte des manuscrits, et s'exécutent que copie (être conscient de en change en le manuscrit original). Ceci sauve les étapes d'analyse et de compilation chaque fois que le manuscrit est exécuté parce que votre api s'appellera avec la grande fréquence, et a changé rarement ceci peut être l'épargne significative.

Il est important de se rendre compte comment les accélérateurs de PHP travaillent pour éviter d'avoir des espérances anormales pour leurs résultats. Considèrent analyse et compilation heure pour manuscrit en tant que fixe coût — chaque fois que le manuscrit est consulté, indépendamment de la vitesse d'autres ressources (bases de données, par exemple) ou combien de traitement du manuscrit fini exige, ce coût doit être payé. En cachant le byte codez la copie du manuscrit économise seulement sur ce coût ; il n'expédiera pas vos questions de base de données ou d'autres processus de CPU-intensive.

Un des accélérateurs de PHP les plus répandus est de Zend, dévoué a intitulé le 4/5 ] accélérateur de Zend PHP [. Je l'ai trouvé facile à installer et étais relativement heureux avec ses résultats. Après avoir amélioré à PHP5 peu de temps après son dégagement, je ne pouvais pas examiner d'autres accélérateurs qui ont depuis lors devenu disponibles. Un des autres accélérateurs que je suis parvenu à essayer le sigfault'd le processus appelant d'Apache sur une variété de mes manuscrits, soit ainsi sûr vous essai n'importe quel accélérateur vous employez intensivement avant de le mettre sur le système de production.

c'est un article supplémentaire par Emanuela Hedrick


Share  

© 2005-2010 E-articles.info All Rights Reserved - Terms and conditions