Pourquoi certains plugins WordPress laissent des tables orphelines dans la base de données
Publié: 2016-06-23Les critiques des plugins WordPress sur le répertoire sont de toutes formes et tailles. Certains sont vraiment utiles tandis que d'autres sont courts et précis. Par exemple, cette critique d'un utilisateur récent de WP eCommerce, "J'ai désinstallé et il a laissé des tables orphelines que je dois maintenant nettoyer manuellement. Mal fait. »
Ce type d'avis peut être facile à ignorer, mais Justin Sainton, co-fondateur de WP eCommerce, a répondu de la meilleure façon possible. Il prend acte de la plainte de l'utilisateur et admet qu'ils soulèvent un point important que l'équipe pourrait mieux documenter.
"Nous prenons la décision très intentionnelle de NE PAS supprimer les tables de la base de données lorsque les gens désinstallent ou désactivent WP eCommerce", a déclaré Sainton.
"Toutes les raisons que nous avons rencontrées au fil des ans ont conduit quelqu'un à désactiver et à désinstaller son plugin. Même si WordPress indique clairement (si vous avez une routine de désinstallation) que vous supprimez des données, il s'agit d'un avis très facile à ignorer lorsque vous êtes en mission pour faire quelque chose.
"Pour ces raisons, nous avons pris la décision intentionnelle de ne supprimer aucune des données (dont une grande partie serait MASSIVEMENT préjudiciable à une entreprise si elle était supprimée involontairement) lors de la désinstallation."
Que sont les tables orphelines ?
Les tables orphelines sont celles laissées par les plugins qui n'effectuent pas de nettoyage de table lorsqu'ils sont désinstallés. Ces tables contiennent souvent des données, y compris des formulaires, des entrées, des paramètres, etc. Par exemple, lorsque j'ai installé GravityForms 2.0 sur le site de test de la taverne, j'ai découvert que les formulaires que j'avais créés il y a six ans étaient toujours dans la base de données. Non seulement j'ai été surpris, mais reconnaissant de ne pas avoir dit à GravityForms de supprimer les données il y a toutes ces années.
La désactivation d'un plugin ne devrait pas supprimer les données
Il y a une nette différence entre désactiver un plugin et le désinstaller. Le processus de désactivation d'un plugin se produit plus fréquemment que la désinstallation, principalement en raison du processus de dépannage. La désactivation d'un plugin ne doit pas supprimer les données de la base de données. Pensez à quel point il serait frustrant de désactiver un plugin et de devoir ensuite reconfigurer ses paramètres ?
La suppression de données doit être explicite
Au lieu de cela, la suppression des données doit être une action explicite de l'utilisateur. Les développeurs de plugins qui souhaitent donner aux utilisateurs la possibilité de supprimer des données lors de la désinstallation peuvent enregistrer un crochet de désinstallation et ajouter un fichier Uninstall.php. Du guide de référence du développeur WordPress concernant Uninstall.php.
Si le plugin ne peut pas être écrit sans exécuter de code dans le plugin, alors le plugin doit créer un fichier nommé 'uninstall.php' dans le dossier du plugin de base. Ce fichier sera appelé, s'il existe, pendant le processus de désinstallation en contournant le crochet de désinstallation. Le plugin, lors de l'utilisation de 'uninstall.php' doit toujours vérifier la constante 'WP_UNINSTALL_PLUGIN', avant de s'exécuter.
Les développeurs qui utilisent cette méthode doivent fournir une invite de confirmation claire et concise aux utilisateurs pour les avertir que les données seront supprimées. GravityForms est un excellent exemple de plugin qui le fait bien. La routine de désinstallation est distincte du processus de désactivation et l'avertissement indique clairement à l'utilisateur que les données seront perdues.

Dans un commentaire publié à la taverne en 2013, Carl Hancock, fondateur de RocketGenius, a expliqué pourquoi ils utilisent leur propre processus de désinstallation plutôt que l'utilisation suggérée de Uninstall.php.

Par exemple, il est courant pour nous de désactiver et de supprimer des versions de GF et des add-ons sur nos propres machines de test via le gestionnaire de plugins, puis de télécharger et d'installer différentes versions. Cela ne signifie pas que nous voulons perdre toutes nos données. Nous ne voulons donc certainement pas que cela se produise lorsque nous supprimons le plugin dans le gestionnaire de plugins.
C'est pourquoi nous avons choisi d'implémenter notre propre version d'une désinstallation complète dans la zone Paramètres de Gravity Forms qui indique très clairement à l'utilisateur final qu'il supprimera TOUTES les données et TOUTES les tables de la base de données.
Les tables orphelines n'ont généralement pas d'incidence sur les performances du site
Certaines personnes pensent que trop de tables orphelines peuvent avoir un impact négatif sur les performances d'un site. J'ai demandé à Sainton si c'était vrai, "En général, non", a répondu Sainton.
"Il y a certainement des cas où le nombre de tables qui existent dans votre base de données pourrait potentiellement avoir un impact sur les performances de certaines requêtes - mais ces types de requêtes ne devraient jamais vraiment être exécutés dans la plupart des contextes - certainement pas dans la plupart des contextes qui intéresseraient les développeurs WordPress. .”
Les tables orphelines et les données qu'elles contiennent sont contenues dans la base de données WordPress, ce dans quoi la plupart des utilisateurs moyens plongent rarement. La plupart ne sont probablement pas conscients de la quantité de données et de tables qui se trouvent dans leur base de données et qui occupent des octets d'espace. Il est bon de savoir que dans la plupart des cas, les tables orphelines ne dégradent pas les performances d'un site et ne sont pas trop préoccupantes.
Nettoyer les tables orphelines
Il existe un certain nombre de plugins qui optimisent et nettoient les tables orphelines de la base de données. Une recherche rapide dans le répertoire du plugin fournit les résultats suivants.
- WP-Optimiser
- P3 (Profileur de performances de plug-in)
- WP-DBManager
- Pack de performances WP
Il y a plus de plugins que ce que j'ai listé ici mais chacun interagit et manipule la base de données WordPress. J'ai appris par expérience qu'avant d'utiliser un plugin de nettoyage et d'optimisation de base de données, vous devez créer une sauvegarde complète de votre site.
J'ai déjà utilisé un plugin de nettoyage de base de données et bien qu'il ait fait le travail, il a supprimé des choses auxquelles je ne m'attendais pas, comme les statuts de publication personnalisés générés par Edit Flow.
Le processus de désinstallation devrait-il être une directive sur le répertoire des plugins ?
Comme le lien des paramètres sur la page de gestion des plugins, un certain nombre de plugins dans le répertoire n'utilisent pas Uninstall.php ou n'enregistrent pas de hook de désinstallation. Je crois fermement que tout plugin qui ajoute des données à la base de données devrait fournir un moyen simple de les supprimer. C'est une ligne directrice qui, si elle était appliquée, profiterait aux utilisateurs en aidant à maintenir des bases de données plus propres.
Développeurs, faites-nous savoir dans les commentaires ce que vous faites pour permettre aux utilisateurs de supprimer des données de la base de données après leur ajout par votre plugin.
