Por qué algunos complementos de WordPress dejan tablas huérfanas en la base de datos

Publicado: 2016-06-23

Las revisiones de los complementos de WordPress en el directorio vienen en todas las formas y tamaños. Algunos son realmente útiles, mientras que otros son breves y van al grano. Por ejemplo, esta revisión de un usuario reciente de WP eCommerce, “Desinstalé y dejó tablas huérfanas que ahora tengo que limpiar manualmente. Mal hecho.

Este tipo de revisión puede ser fácil de ignorar, pero Justin Sainton, cofundador de WP eCommerce, respondió de la mejor manera posible. Reconoce la queja del usuario y admite que mencionan un punto importante que el equipo podría documentar de mejor manera.

“Tomamos una decisión muy intencional de NO eliminar tablas de la base de datos cuando las personas desinstalan o desactivan WP eCommerce”, dijo Sainton.

“Cualquier cantidad de razones que hemos encontrado a lo largo de los años dan como resultado que alguien desactive y desinstale su complemento. Aunque WordPress deja en claro (si tiene una rutina de desinstalación) que está eliminando datos, este es un aviso que es muy fácil de ignorar cuando tiene la misión de hacer algo.

“Por esas razones, hemos tomado la decisión intencional de no eliminar ninguno de los datos (muchos de los cuales serían MASIVAMENTE perjudiciales para una empresa si se eliminaran sin querer) al momento de la desinstalación”.

¿Qué son las tablas huérfanas?

Las tablas huérfanas son las que dejan los complementos que no limpian la tabla cuando se desinstalan. Estas tablas a menudo contienen datos, incluidos formularios, entradas, configuraciones, etc. Por ejemplo, cuando instalé GravityForms 2.0 en el sitio de prueba de Tavern, descubrí que los formularios que creé hace seis años todavía estaban en la base de datos. No solo me sorprendió, sino que agradecí no haberle dicho a GravityForms que eliminara los datos hace tantos años.

Desactivar un complemento no debería eliminar datos

Hay una clara diferencia entre desactivar un complemento y desinstalarlo. El proceso de desactivación de un complemento ocurre con más frecuencia que la desinstalación, principalmente debido al proceso de resolución de problemas. La desactivación de un complemento no debería eliminar ningún dato de la base de datos. Piense en lo frustrante que sería desactivar un complemento y luego tener que volver a configurar su configuración.

La eliminación de datos debe ser explícita

En cambio, la eliminación de datos debe ser una acción explícita del usuario. Los desarrolladores de complementos que quieran dar a los usuarios la capacidad de eliminar datos al desinstalar pueden registrar un enlace de desinstalación y agregar un archivo Uninstall.php. De la guía de referencia para desarrolladores de WordPress sobre Uninstall.php.

Si el complemento no se puede escribir sin ejecutar el código dentro del complemento, entonces el complemento debe crear un archivo llamado 'uninstall.php' en la carpeta base del complemento. Se llamará a este archivo, si existe, durante el proceso de desinstalación sin pasar por el enlace de desinstalación. El complemento, al usar 'uninstall.php', siempre debe verificar la constante 'WP_UNINSTALL_PLUGIN', antes de ejecutar.

Los desarrolladores que utilizan este método deben proporcionar un aviso de confirmación claro y conciso a los usuarios que advierta que se eliminarán los datos. Un gran ejemplo de un complemento que hace esto bien es GravityForms. La rutina de desinstalación es independiente del proceso de desactivación y la advertencia ilustra claramente al usuario que se perderán los datos.

Proceso de desinstalación de GravityForms
Proceso de desinstalación de GravityForms

En un comentario publicado en Tavern en 2013, Carl Hancock, fundador de RocketGenius, explicó por qué utilizan su propio proceso de desinstalación en lugar del uso sugerido de Uninstall.php.

Por ejemplo, es común que desactivemos y eliminemos versiones de GF y complementos en nuestras propias máquinas de prueba a través del administrador de complementos y luego carguemos e instalemos diferentes versiones. Eso no significa que queramos perder todos nuestros datos. Así que ciertamente no queremos que eso ocurra cuando eliminamos el complemento en el administrador de complementos.

Es por eso que elegimos implementar nuestra propia versión de una desinstalación completa dentro del área de configuración de Gravity Forms que deja muy claro al usuario final que eliminará TODOS los datos y eliminará TODAS las tablas de la base de datos.

Las tablas huérfanas generalmente no afectan el rendimiento del sitio

Algunas personas creen que demasiadas tablas huérfanas pueden afectar negativamente el rendimiento de un sitio. Le pregunté a Sainton si esto es cierto, "En términos generales, no", respondió Sainton.

“Ciertamente, hay casos en los que la cantidad de tablas que existen en su base de datos podría afectar potencialmente el rendimiento de ciertas consultas, pero ese tipo de consultas nunca deberían ejecutarse en la mayoría de los contextos, ciertamente no en la mayoría de los contextos en los que los desarrolladores de WordPress estarían interesados. .”

Las tablas huérfanas y los datos dentro de ellas están contenidos en la base de datos de WordPress, algo en lo que la mayoría de los usuarios promedio rara vez se sumergen. La mayoría probablemente no sea consciente de la cantidad de datos y tablas que se encuentran en su base de datos que ocupan bytes de espacio. Es bueno saber que, en la mayoría de los casos, las tablas huérfanas no degradan el rendimiento de un sitio y no es algo de lo que deba preocuparse demasiado.

Limpieza de mesas huérfanas

Hay una serie de complementos que optimizan y limpian las tablas huérfanas de la base de datos. Una búsqueda rápida en el directorio de complementos proporciona los siguientes resultados.

  • WP-Optimizar
  • P3 (Perfilador de rendimiento de complementos)
  • Administrador de WP-DB
  • Paquete de rendimiento de WP

Hay más complementos de los que he enumerado aquí, pero cada uno interactúa y manipula la base de datos de WordPress. Aprendí por experiencia que antes de usar cualquier complemento de limpieza y optimización de bases de datos, debe crear una copia de seguridad completa de su sitio.

Una vez usé un complemento de limpieza de base de datos y, aunque funcionó, eliminó cosas que no esperaba, como estados de publicación personalizados generados por Edit Flow.

¿Debería el proceso de desinstalación ser una guía del directorio de complementos?

Al igual que el enlace de configuración en la página de administración de complementos, varios complementos en el directorio no usan Uninstall.php ni registran un enlace de desinstalación. Creo firmemente que cualquier complemento que agregue datos a la base de datos debería proporcionar una manera fácil de eliminarlos. Es una directriz que, de aplicarse, beneficiaría a los usuarios al ayudar a mantener bases de datos más limpias.

Desarrolladores, háganos saber en los comentarios qué hacen para permitir que los usuarios eliminen datos de la base de datos después de que su complemento los agregue.