Los Web site se diseñan para ser alcanzados por los individuos, y como tal tienden para confiar en la velocidad relativamente reducida del usuario para evitar cualquier embotellamiento del funcionamiento. Esta técnica falla desgraciadamente con APIs porque van a ser consumidos por otros servidores con las conexiones de alta velocidad, diseñadas a menudo solamente con su propio funcionamiento en la mente (no depositarán sus respuestas para usted, y en lugar de otro harán exactamente la misma petición repetidamente). Diseñar su API con funcionamiento en mente puede ayudar a mantener el servidor rápido incluso cuando se están haciendo muchas peticiones, y ayudará a asegurarse de que las mejoras futuras del hardware pueden lograr sus tareas deseadas.
| Nota |
Muchos Web site se diseñan mal o aparecen carecer cualquier clase de diseño cualesquiera. He visto un sitio que requirió 10 preguntas de la base de datos comenzar la página, después una pregunta adicional para cada artículo en su base de datos. Con más de 40 artículos en su base de datos, había aproximadamente 50 preguntas que eran hechas cada vez que la página del índice cargó. Esta técnica fallaba horriblemente para un Web site que recibía relativamente pocos golpes. No habría durado minutos si fuera consumida automáticamente, y dudo que habría durado más que algunos segundos bajo efecto de Slashdot. Todas estas preguntas de la base de datos eran básicamente insustanciales también; el inventario de la firma cambió lentamente, así que una página estática generada una vez por semana de la misma escritura habría funcionado del mismo modo que para el usuario del extremo, pero habría sido varias órdenes de la magnitud más rápidamente. |
A menudo se hace los Web site y los datos de la petición de APIs de la base de datos cada hora una petición, aunque los datos poblaban los cambios de la respuesta raramente. Esto, combinado con las técnicas de la normalización de la base de datos enseñó desde el principio del tiempo, significa que cada uno de esas peticiones es probable haciendo por lo menos resultados que ensamblan de una pregunta de las tablas múltiples, posiblemente las preguntas del múltiplo. Si sus datos no están cambiando eso a menudo, considere el depositar de la respuesta.
Por ejemplo, tome el Web site video del Bob ficticio. Alguien visión la información detallada sobre una película en su Web site o la solicita cada vez con su API, su servidor funciona tres preguntas: una pregunta que encuentra el título de la película, la línea del diagrama, y el clasificación completos, otra pregunta que funciona una pregunta unida para recuperar la información detallada sobre cada uno de los miembros del molde, y una pregunta final para determinar el estado de alquiler de la película. Ésta es una pérdida de recursos gigantesca; una vez que se lance una película, la única respuesta que cambiará es su estado de alquiler. Todavía, cada hora que se carga la página, los datos se pregunta otra vez la base de datos. Haría lejos más sentido o al uso una página estática para las películas lanzadas (que pueblan estado de alquiler dinámicamente), o por lo menos deposite la información de toda la película y recupere el estado de alquiler dinámicamente.
| Observe | Usted ha notado probablemente que, porque el escondrijo terminará probablemente para arriba en una base de datos, he reducido realmente solamente la cuenta de la pregunta a partir del 3 a 2. No parece una mejora drástica, sino que es. La pregunta unida que mira encima de la información detallada para los miembros del molde va una orden de la magnitud más lenta que las operaciones de búsqueda basadas en una llave primaria, tan allí son un ahorro grande allí. Usted puede también depositar los datos de la película en una forma cerca de su forma final de la tela, ahorrando en todo el proceso necesitado generalmente para ir de base de datos al Web page. Usted necesitará dos escondrijos en este ejemplo, uno para el Web site y uno para el API. |
Aunque depositar datos es un método excelente de reducir el número de preguntas que usted utiliza, él no es siempre apropiado. Apenas cerciórese de que usted esté consiguiendo el la mayoría de cada pregunta que usted funciona. Se solicitan muchos datos duplicados de las épocas mientras que manejan una sola petición; esto sucede a menudo cuando diversas funciones necesitan los mismos datos, pero no se llaman así que no comparten sus resultados. Considere cualquiera que vuelve a trabajar su escritura para obtener todos los datos requeridos sí mismo, después pase de datos a las funciones que la requieren, o a crear una capa de la abstracción con un objeto que tome el cuidado de obtener la información de la base de datos solamente cuando está requerido.
Una vez que usted esté utilizando sus preguntas de la base de datos a su más lleno, comience el trabajo sobre mejorar la velocidad de las preguntas ellos mismos. Nunca comience las preguntas con SELECTO * — de la petición solamente los campos usted necesita realmente. También examine sus preguntas y su base de datos. Intente asegurarse de que los campos que usted basa su selección encendido son llaves primarias o puesto en un índice por lo menos por el servidor de la base de datos.
Considere un caso de un almacén video API, que permite que los usuarios soliciten la información sobre las películas. Con un cambio pequeño del diseño (estado de alquiler móvil a su propia pregunta, más bien que a proveer de ella cada petición), muchas nuevas oportunidades que depositan se presentan. Porque la respuesta no cambia sin importar quién la solicita, un proxy server puede ser lado usado del servidor para manejar la respuesta (esto es mucho más fácil con el RESTO APIs que con el JABÓN). Fijar los jefes apropiados para la vida del escondrijo (24 horas para las películas, y 30 minutos para el estado de alquiler) permitirá que el API encoja de la mayoría de su trabajo al proxy server.
Hay algunos aceleradores de PHP disponibles, que pueden tener un efecto drástico en la velocidad de sus escrituras. Cada vez que se ejecuta una escritura de PHP, es analizada y compilada en código del octeto por el motor scripting de PHP. Porque, generalmente hablando, la escritura no ha cambiado entre las ejecuciones, ésta es una pérdida enorme de tiempo de transformación. Los aceleradores de PHP depositan la versión del código del octeto de las escrituras, y se ejecutan que copia (el ser atento de cualesquiera cambia a la escritura original). Esto ahorra los pasos del análisis y de la compilación cada vez que la escritura se ejecuta porque su API será llamado con gran frecuencia, y cambió raramente esto puede ser los ahorros significativos.
Es importante realizar cómo los aceleradores de PHP trabajan para evitar de tener expectativas indebidas para sus resultados. Considera análisis y compilación tiempo para escritura como fijo coste — cada vez que la escritura está alcanzada, sin importar la velocidad de otros recursos (bases de datos, por ejemplo) o cuánto proceso de la escritura acabada requiere, este coste debe ser pagado. Depositando el octeto cifre la copia de la escritura ahorra solamente en ese coste; no apresurará sus preguntas de la base de datos u otros procesos de CPU-intensive.
Uno de los aceleradores más frecuentes de PHP es de Zend, dutifully tituló el 4/5 ] acelerador de Zend PHP [. Encontré fácil instalar y estaba relativamente contento con sus resultados. Aumentando a PHP5 poco después su lanzamiento, no podía probar otros aceleradores que tienen desde llegado a estar disponibles. Uno de los otros aceleradores que manejé intentar el sigfault'd el proceso de Apache que llamaba en una variedad de mis escrituras, sea tan seguro usted prueba cualquier acelerador usted utiliza extensivamente antes de ponerlo en el sistema de producción.
Online: 555 users browsing the articles directory
|
|