Durante los últimos meses, sentimos que nuestro propio sitio (wpml.org) se estaba ralentizando. Primero, adoptamos el enfoque drástico de mejorar el servidor. Como esto no ayudó, nos concentramos y analizamos realmente el problema. El resultado es la versión de hoy, que redujo nuestra carga de CPU y el tiempo de respuesta en un 70 %.
Lo que hemos aprendido sobre el análisis de rendimiento
El rendimiento también ha sido muy importante para nosotros. Llevamos años probando la memoria, las consultas y el tiempo de CPU de WPML y mejorándolo en cada versión. Lo que aprendimos de esta ronda de desarrollo es que las pruebas estáticas no siempre revelan los problemas reales.
El método que utilizábamos hasta ahora para probar el rendimiento consistía en:
- Crear una gran base de datos con muchas entradas, metadatos de entradas, categorías y usuarios
- Producir una lista de las páginas más «pesadas»
- Cargarlas muchas veces, medir el tiempo que tardan en cargar y hacer un análisis de rendimiento
Esto nos mostró las páginas del front-end y del panel de administración que necesitábamos depurar y optimizar. Nos aseguramos de reducir el número de consultas, evitar las consultas largas y escribir código PHP eficiente.
Entonces, ¿qué falta?
WordPress y WPML son un poco más complejos que «solicitar una página y esperar a que cargue». Todo ocurre a través de la base de datos, que es un recurso compartido. Una cosa que el visitante A hace con la base de datos puede afectar a la experiencia que recibe el visitante B.
Para entender estos cuellos de botella, instalamos una herramienta llamada Appoptics en nuestro sitio de producción. Nos permitió medir qué funciones y consultas consumen tiempo, para poder analizar el porqué.
La mejora real de rendimiento
Descubrimos que una operación aparentemente inofensiva en Traducción de cadenas tenía un conflicto de recursos significativo con una consulta frecuente a la tabla de opciones desde otro plugin. Si solo ejecuta esa llamada 1 millón de veces, no nota ningún problema. Sin embargo, cuando otras páginas necesitan acceder a la tabla de opciones, tienen que esperar hasta que las cadenas no estén accediendo a ella. La lista de peticiones pendientes crece, desborda la base de datos y se desata el caos.

Al observar el gráfico, puede ver que la mayor parte del esfuerzo de nuestro servidor se dirigía a la base de datos (esa tabla que se bloqueaba y desbloqueaba continuamente). Probablemente pueda adivinar a qué hora aplicamos la solución.
Pero tengo otros problemas de rendimiento, ¿pueden solucionarlos?
Lo que descubrimos definitivamente ayudará no solo a wpml.org, sino a muchos otros sitios con mucho tráfico que utilizan WPML. Si tiene un sitio con una carga muy pequeña, apenas notará esta mejora. Solo afecta a los sitios con mucha concurrencia y personas que hacen muchas cosas diferentes.
Es posible que otros sitios puedan utilizar otras optimizaciones de rendimiento. Ahora hemos aprendido que la mejor manera de hacer este trabajo es instalando herramientas de análisis de rendimiento en el sitio de producción real que sufre de bajo rendimiento. Incluso si recibimos una copia de su base de datos, no podemos simular su tráfico. Es por eso que todas nuestras rondas anteriores no detectaron este problema específico.
Por cierto, nuestra ronda de mejoras de rendimiento no reveló cuellos de botella solo en WPML. Corregimos lo que encontramos en WPML, pero notamos problemas drásticos en otros lugares. Algunos los parcheamos nosotros mismos y otros los optimizamos a través de la base de datos.
Si le interesa, avísenos y le ayudaremos a instalar un análisis de rendimiento en sus sitios de producción. Luego, estaremos encantados de ayudarle a analizar los resultados. Si encontramos algo en WPML, lo solucionaremos. Hay muchas posibilidades de que los sitios con problemas de rendimiento encuentren una serie de problemas provenientes de fuentes sorprendentes.
Qué más hay de nuevo en WPML 4.2.6
Núcleo de WPML 4.2.6
- Añadido el filtro wpml_post_edit_meta_box_priority para cambiar la prioridad de la caja de metadatos de edición de entradas de WPML
- Corregido el problema al actualizar plugins en caso de instalaciones en subcarpetas (usando siempre las URL del sitio)
- Guardar los avisos solo cuando sea necesario para reducir escrituras adicionales en la tabla wp_options
- Corregido un problema de seguridad con los enlaces del selector de idiomas
WPML Traducción de cadenas 2.10.4
- Corregido un problema con la importación de archivos mo de ST para que la tabla wp_option no se actualice innecesariamente
Gestión de traducción de WPML 2.8.5
- Mejorado el estilo de los controles de paginación en la página de Trabajos de traducción
- Corregido un problema con la asignación de traductores en la página de Trabajos de traducción cuando el idioma del panel de administración es distinto al inglés
- Corregido el contenido incorrecto de la columna «Traducido por» cuando el idioma del panel de administración es distinto al inglés
WPML Media Translation 2.5.2
- Guardar los avisos solo cuando sea necesario para reducir escrituras adicionales en la tabla wp_options
WPML CMS Nav 1.5.1
- Mejorado el rendimiento borrando la caché solo cuando corresponde
Descargar y actualizar
Como siempre, recibirá esta actualización automáticamente para todos sus sitios registrados. Siempre puede acceder a su cuenta de WPML para descargar e instalar manualmente.
Le recomendamos hacer copias de seguridad antes de actualizar cualquier cosa en su sitio.
¿Comentarios? ¿Preguntas? ¿Sugerencias?
Nuestros sitios funcionan mucho más rápido ahora, pero nos encantaría saber sobre los suyos. Por favor, deje sus comentarios y le responderemos.

