Encontrar bloqueos en el código de WordPress


Hace unos meses, Iain escribió sobre cómo nuestro equipo se presiona mutuamente para convertirse en mejores desarrolladores, lo que incluía información sobre cómo mejoramos la calidad del código utilizando herramientas como Xdebug, pruebas unitarias y revisiones de código. Aunque estas herramientas pueden reducir significativamente el número de errores ingresados ​​en una base de código, no siempre resaltan problemas más sutiles que pueden causar problemas aún más, especialmente en términos de rendimiento y uso de recursos. En este artículo, quiero probar algunas formas en que puede identificar posibles problemas de rendimiento en la base de código, que esperamos que le permita remediarlos antes de que se conviertan en problemas reales. Comencemos con el monitor de consultas antes de ir al código usando Blackfire.
Consuly Monitor Consult Monitor es un solucionador de problemas de John Blackbourn y proporciona una multitud de información útil sobre la solicitud de página actual, como:
Uso de tiempo y memoria de la generación de páginas
Interrogations a la base de datos realizada y el tiempo requerido
Consultas lentas o duplicadas en la base de datos
Solicitudes HTTP realizadas con API de WordPress HTTP
Ganchos dibujados durante la solicitud y las acciones adjuntas a cada gancho
También agrega valores importantes a la barra de administración para que pueda ver rápidamente el tiempo de generación de páginas, el uso de la memoria, el tiempo de consulta de la base de datos y las bases de datos totales sin tener que abrir ninguna herramienta externa. En mi opinión, esta es una de las formas más simples en que usted, como desarrollador, puede asegurarse de que los cambios que realice no introduzca ningún rendimiento potencial. Use en el mundo real para tomar un ejemplo de un ejemplo del lanzamiento reciente de la descarga de WP S3 Activos 1.2, que cambiaron fundamentalmente cómo se administraron los activos. Los cambios estuvieron sujetos al proceso de revisión del código ordinario y las cosas se veían bien. Todo funcionó de acuerdo con las expectativas y no se activaron errores, sin embargo, una mirada rápida en la barra de administración mostró un posible bloqueo. Verá que cuando se mueva de la versión 1.1.2 a 1.2 del suplemento de activos, el número de consultas en la base de datos casi se duplica:
Al abrir la superposición de solución de problemas, puede ver que hay una gran cantidad de consultas como ‘wpos3_process-assets_batch_%’. El monitor de consulta incluso enfatiza que están duplicados y que todos se llaman desde el método get_batches de la clase AS3CF_Background_Process:

Esto es similar al problema n+1, por el hecho de que para cada complemento activo hacemos un ‘wpos3_process-assets_batch_%’. Aunque al igual que los interrogatorios son generalmente malos, en este ejemplo no hay consultas lentas debido a la opción en la columna Option_Name, pero debemos esforzarnos por reducir el número de llamadas a MySQL siempre que sea posible. La solución es simple: tenemos que memorizar los resultados de get_batches en el método To_process: más allá del monitor de consulta MySQL es excelente para encontrar bases de datos lentas o darulares, pero ¿qué sucede si el bloque no es causado por MySQL? Aquí puede ser útil para el perfil de código. El perfil del código le permite medir la frecuencia y la duración de cada función de la función en su aplicación. Este nivel de perspectiva puede ser invaluable para identificar los bloqueos de rendimiento y puede ser iluminador si es completamente nuevo en el perfil.

Tome el siguiente tweet, que muestra que casi el 25% de la demanda se gastó analizando sonrisas (para las cuales no existían). Puede ver que esto se debe al hecho de que la función preg_replace_callback se ha llamado un total de 2,119 veces, ¡lo cual es una locura! ¿Crees que las sonrisas no afectan el rendimiento de WordPress? Deshabilitarlos y ver solo. Tiempo de carga de 1.22 s a 971 ms. #wordpress #Webperf pic.twitter.com/3xGugb4nd2

– Ashley Rich (@a5hleyrich) 19 de octubre de 2016 Black Fire Hay muchos perfiles de PHP para elegir, pero soy un gran fanático de Blackfire, debido a su configuración, facilitando su fácil interfaz de uso. Los resultados del perfil se presentan en un gráfico de llamadas que muestra la ruta de ejecución de su aplicación y le brinda valores detallados de consumo de recursos, como el tiempo de pared (tiempo en el mundo real), el tiempo de E/S, el tiempo de la CPU, la memoria y red. Las versiones pagas también muestran llamadas HTTP y solicitudes SQL y ofrecen recomendaciones definidas de expertos en rendimiento. Entregando para tomar otro ejemplo del reciente lanzamiento de los activos de descarga S3 de WP 1.2. El siguiente gráfico de apelación es completamente interactivo y se puede explorar tirando del cursor: sucede muchos debido a la complejidad de WordPress, pero en general, cualquiera de los gráficos de llamadas que es rosa debe investigarse. En este ejemplo, hay dos áreas de interés: mysqli_query y sinsular. MySQLI_Query atribuye aproximadamente el 28% del tiempo total de pared, lo que puede parecer excesivo, pero debido a que esta es una máquina de desarrollo local que ejecuta MAMP, no es inusual que MySQL funcione mal. Puede confirmar que MySQL es el bloqueo verificando la función de E/S del tiempo de espera para la función MySQLI_Query, que representa el 99.5% del tiempo total de pared.
Unirorialize solo se atribuye a aproximadamente el 8% del tiempo total de pared, pero lo que es más preocupante es que se llama un total de 653 veces. Si sigue la ruta de ejecución en la tabla de llamadas, verá que get_files llame a get_files_by_location 460 veces en total. ¡No parece estar bien!

La solución es simple nuevamente, debemos memorizar los resultados de get_files, como lo hemos hecho anteriormente: ahora, si perfilamos el código nuevamente, los resultados se ven mucho más agradables: ni anislyles ni get_files_by_location no aparecen en el gráfico de llamadas ( Debido al bajo tiempo de pared), pero si está buscando funciones, verá que se les llama en un total de 213 y 20 veces respectivamente. ¡Es una mejora bastante grande!
La conclusión, como puede ver, tanto el monitor de consulta como el Blackfire son herramientas poderosas que debe tener en su arsenal, ya que le permiten verificar rápidamente la base del código para cualquier bloqueo, con poco o ningún esfuerzo. Aunque las optimizaciones que hemos demostrado en este artículo pueden parecer triviales, pueden tener un impacto profundo en los sitios con alto tráfico o, aquellas en las que el almacenamiento de la página no es una opción. Cuando me desarrollo, siempre me aseguro de que el monitor de consulta se active, ya que me permite ver de un vistazo si los cambios que he introducido han afectado el tiempo de carga o aumentar la cantidad de consulta en la base de datos. Sin embargo, no se requiere realizar un perfil de código completo en cada cambio, pero definitivamente se realiza cuando se cumplen cualquiera de los siguientes criterios:

Grandes cambios en el código

Bucles sobre grandes conjuntos de datos o bucles vestidos

Uso de funciones preg_ o en el procesamiento de cadenas grandes
Uso de la apelación
Ingresar llamadas API (para asegurarse de que las respuestas se almacenen en el caché correctamente)

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *