Opened 8 years ago
Last modified 5 years ago
#36891 new enhancement
Saving large menus is super slow
Reported by: | pento | Owned by: | |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | |
Component: | Menus | Keywords: | |
Focuses: | administration, performance | Cc: |
Description
When saving menus, wp-admin/includes/nav-menu.php
calls wp_update_nav_menu_item()
for every menu item. This function call can take 0.1-0.4s, when multiplied by 50 (or more!) menu items, is a less than pleasant experience.
Because of the length of time this takes, it's also quite likely that an interrupted connection could cause the menu to be saved in a weird state.
Change History (3)
#2
@
8 years ago
if a menu item hasn't changed, it doesn't need to be updated.
If you chase it down the rabbit hole, it'll probably come to wp_insert_post()
which runs regardless of if things have changed.
Bailing early in the menu's code if nothing has changed will help greatly, bailing in the post update handlers if nothing has changed would also help in general.
#3
@
8 years ago
I'm inclined to bail early in wp_update_nav_menu_item()
- that way, we get to avoid all of the update_post_meta()
calls, too.
Alternatively, it might be useful to check if each post meta item has changed before updating it - that way, even menu items that have changed update faster.
As wp_update_post()
already retrieves the post before updating, we could probably do a similar sanity check there.
I'm guessing the slow part is the number of queries. Bulking
UPDATE
s aren't possible, so the next option might be to investigate avoiding queries in the first place - if a menu item hasn't changed, it doesn't need to be updated.