Dlaczego niektóre wtyczki WordPress pozostawiają osierocone tabele w bazie danych
Opublikowany: 2016-06-23Recenzje wtyczek WordPress w katalogu mają różne kształty i rozmiary. Niektóre są naprawdę pomocne, podczas gdy inne są krótkie i na temat. Na przykład ta recenzja od niedawnego użytkownika WP eCommerce: „Odinstalowałem i pozostawiłem osierocone tabele, które muszę teraz wyczyścić ręcznie. Źle zrobione.
Ten rodzaj recenzji można łatwo zlekceważyć, ale Justin Sainton, współzałożyciel WP eCommerce, odpowiedział w najlepszy możliwy sposób. Przyjmuje do wiadomości skargę użytkownika i przyznaje, że porusza on ważną kwestię, którą zespół mógłby lepiej udokumentować.
„Podejmujemy bardzo celową decyzję, aby NIE usuwać tabel z bazy danych, gdy ludzie odinstalowują lub dezaktywują WP eCommerce” – powiedział Sainton.
„Z wielu powodów, które napotkaliśmy przez lata, ktoś dezaktywował i odinstalował swoją wtyczkę. Mimo że WordPress jasno pokazuje (jeśli masz procedurę dezinstalacji), że usuwasz dane – jest to powiadomienie, które bardzo łatwo zignorować, gdy masz misję, aby coś zrobić.
„Z tych powodów celowo podjęliśmy decyzję, aby nie usuwać żadnych danych (z których duża część byłaby MASYWNIE szkodliwa dla firmy, gdyby została usunięta nieumyślnie) po odinstalowaniu”.
Co to są tabele osierocone?
Tabele osierocone to te pozostawione przez wtyczki, które po odinstalowaniu nie wykonują czyszczenia tabeli. Tabele te często zawierają dane, w tym formularze, wpisy, ustawienia itp. Na przykład, kiedy zainstalowałem GravityForms 2.0 na stronie testowej Tavern, odkryłem, że formularze, które stworzyłem sześć lat temu, wciąż znajdowały się w bazie danych. Byłem nie tylko zaskoczony, ale i wdzięczny, że nie powiedziałem GravityForms, aby usunął dane tyle lat temu.
Dezaktywacja wtyczki nie powinna usuwać danych
Istnieje wyraźna różnica między dezaktywacją wtyczki a jej odinstalowaniem. Proces dezaktywacji wtyczki zdarza się częściej niż odinstalowywanie, głównie z powodu procesu rozwiązywania problemów. Dezaktywacja wtyczki nie powinna usuwać żadnych danych z bazy danych. Zastanów się, jak frustrujące byłoby dezaktywowanie wtyczki, a następnie ponowne skonfigurowanie jej ustawień?
Usuwanie danych powinno być jawne
Zamiast tego usunięcie danych powinno być wyraźnym działaniem użytkownika. Twórcy wtyczek, którzy chcą dać użytkownikom możliwość usuwania danych podczas dezinstalacji, mogą zarejestrować zaczep dezinstalacyjny i dodać plik Uninstall.php. Z przewodnika dla programistów WordPressa dotyczącego Uninstall.php.
Jeśli wtyczki nie można napisać bez uruchamiania kodu we wtyczce, wtyczka powinna utworzyć plik o nazwie „uninstall.php” w podstawowym folderze wtyczki. Ten plik zostanie wywołany, jeśli istnieje, podczas procesu deinstalacji z pominięciem zaczepu deinstalacji. Wtyczka, podczas korzystania z 'uninstall.php' powinna zawsze sprawdzić stałą 'WP_UNINSTALL_PLUGIN' przed wykonaniem.
Deweloperzy korzystający z tej metody powinni zapewnić użytkownikom jasne i zwięzłe potwierdzenie, że dane zostaną usunięte. Świetnym przykładem wtyczki, która robi to dobrze, jest GravityForms. Procedura dezinstalacji jest oddzielona od procesu dezaktywacji, a ostrzeżenie wyraźnie pokazuje użytkownikowi, że dane zostaną utracone.

W komentarzu opublikowanym w Tavern w 2013 roku Carl Hancock, założyciel RocketGenius, wyjaśnił, dlaczego używają własnego procesu dezinstalacji zamiast sugerowanego użycia Uninstall.php.

Na przykład często dezaktywujemy i usuwamy wersje GF i Add-Ons na naszych własnych maszynach testowych za pomocą menedżera wtyczek, a następnie przesyłamy i instalujemy różne wersje. To nie znaczy, że chcemy stracić wszystkie nasze dane. Więc na pewno nie chcemy, aby tak się stało, gdy usuniemy wtyczkę w menedżerze wtyczek.
Dlatego zdecydowaliśmy się zaimplementować naszą własną wersję pełnej deinstalacji w obszarze Ustawienia formularzy grawitacyjnych, co jasno pokazuje użytkownikowi końcowemu, że usunie WSZYSTKIE dane i WSZYSTKIE tabele bazy danych.
Osierocone tabele zazwyczaj nie wpływają na wydajność witryny
Niektórzy uważają, że zbyt wiele osieroconych tabel może negatywnie wpłynąć na wydajność witryny. Zapytałem Saintona, czy to prawda: „Ogólnie rzecz biorąc, nie” — odpowiedział Sainton.
„Z pewnością istnieją przypadki, w których liczba tabel istniejących w Twojej bazie danych może potencjalnie wpłynąć na wydajność niektórych zapytań – ale tego typu zapytania nigdy nie powinny być uruchamiane w większości kontekstów – z pewnością nie w większości kontekstów, którymi byliby zainteresowani programiści WordPress ”.
Osierocone tabele i zawarte w nich dane są zawarte w bazie danych WordPressa, co większość przeciętnych użytkowników rzadko zagłębia. Większość prawdopodobnie nie zdaje sobie sprawy z ilości danych i tabel znajdujących się w ich bazie danych zajmujących bajty miejsca. Warto wiedzieć, że w większości przypadków osierocone tabele nie obniżają wydajności witryny i nie należy się tym zbytnio martwić.
Sprzątanie osieroconych stołów
Istnieje wiele wtyczek, które optymalizują i czyszczą osierocone tabele z bazy danych. Pobieżne przeszukanie katalogu wtyczek daje następujące wyniki.
- Optymalizacja WP
- P3 (Profil wydajności wtyczek)
- Menedżer WP-DB
- Pakiet wydajności WP
Jest więcej wtyczek niż wymieniłem tutaj, ale każda z nich współdziała i manipuluje bazą danych WordPress. Z doświadczenia nauczyłem się, że przed użyciem jakiejkolwiek wtyczki do czyszczenia i optymalizacji bazy danych, należy wykonać pełną kopię zapasową witryny.
Kiedyś użyłem wtyczki do czyszczenia bazy danych i chociaż wykonała swoją pracę, usunęła rzeczy, których się nie spodziewałem, takie jak niestandardowe statusy postów generowane przez Edit Flow.
Czy proces dezinstalacji powinien być przewodnikiem dotyczącym katalogu wtyczek?
Podobnie jak link do ustawień na stronie zarządzania wtyczkami, wiele wtyczek w katalogu nie używa Uninstall.php ani nie rejestruje zaczepu dezinstalacyjnego. Głęboko wierzę, że każda wtyczka, która dodaje dane do bazy danych, powinna zapewniać łatwy sposób na ich usunięcie. Jest to wskazówka, która przyniesie korzyści użytkownikom, pomagając w utrzymaniu czystszych baz danych.
Deweloperzy daj nam znać w komentarzach, co robisz, aby umożliwić użytkownikom usunięcie danych z bazy danych po ich dodaniu przez wtyczkę.
