Podczas edytowania postu lub strony zauważyliśmy naprawdę długi czas ładowania. Za pomocą Monitora zapytań stwierdziliśmy, że to podstawowe zapytanie WP zajmuje 15-20 sekund.
SELECT meta_key
FROM wp_postmeta
GROUP BY meta_key
HAVING meta_key NOT LIKE '\\_%'
ORDER BY meta_key
LIMIT 30
caller:
meta_form()
post_custom_meta_box()
do_meta_boxes()
Używamy dużo postmeta, ponieważ jeden z naszych typów postów używa około 20 niestandardowych pól. Powiedziałbym, że może zbytnio polegamy na postmeta, ale wydaje się to bardzo przydatne, ponieważ nie wybiera nawet identyfikatora posta.
Czy to powszechny problem? Czy istnieje sposób na wyłączenie tej funkcji przez filtr? Dzięki za wszelkie uwagi.
meta_form()
funkcję i jest to rzeczywiście wygenerowane zapytanie SQL z tej podstawowej funkcji. Możesz spróbować dodać własny niestandardowy metaboks ze zmianami w kodziemeta_form()
i użyć tam sugerowanego zapytania SQL. Znalazłem ten zamknięty bilet trac # 8561 . Mógłbyś stworzyć kolejny bilet lub spróbować otworzyć go ponownie? PS: Zauważ, że strona nadrzędna wybierająca metaboks jest również problematyczna. Jeśli masz 1 milion stron, wszystkie z nich pojawią się jako wybrane opcje!meta_form()
funkcję. Zaktualizowałem odpowiedź - podstawowe zapytanie SQL zostało dostosowane w WP 4.3. Czy widzisz wzrost wydajności dzięki temu nowemu zapytaniu SQL w porównaniu do naszego dodatkowegopost_id
ograniczenia?Odpowiedzi:
Jeśli chcesz przetestować niestandardowy kod SQL, aby zobaczyć, jak wpływa on na czas ładowania, możesz wypróbować tę zamianę zapytania:
Tutaj używamy
add_meta_boxes_{$post_type}
haka, gdzie$post_type = 'post'
.W tym miejscu zamieniliśmy całe zapytanie, ale mogliśmy je również dostosować do obsługi limitu dynamicznego.
Mam nadzieję, że możesz to dostosować do swoich potrzeb.
Aktualizacja:
To potencjalnie wolne podstawowe zapytanie SQL zostało teraz dostosowane w wersji WP 4.3 od
do:
Sprawdź bilet podstawowy # 24498, aby uzyskać więcej informacji.
źródło
Jeśli przejrzysz kod źródłowy funkcji, znajdziesz to:
Za pomocą
postmeta_form_keys
haka możesz ręcznie określić klucze, aby całkowicie nie wywoływać tego nieefektywnego zapytania:źródło
Czy możesz to wypróbować? To nie jest rozwiązanie, ale tymczasowe obejście.
źródło
Usunięcie metaboksów zapobiega również powolnemu zapytaniu.
źródło