History
In Drupal 6 there were big changes with the menu_router system. As far as I can tell, it was a performance based decision. It was a time of low performance (compare to SSD) SATA drives. So storing router items in the database was a good idea, due to better performance. But it was not fast enough. menu_local_tasks started to be stored in cache_menu (per tab_root) Actions were added in Drupal 7 and were stored in cache_menu as well. Backdrop added context_links but this data was not cached. As a result, there was around +10% response time added to each page.
Ideas in patch
My first assumption based on SSD popularity. There is no significant performance difference between a reading file and selecting a record from the database.
Menu_router is hierarchy based data. Instead of selecting the database to match path variable, I decided to read JSON file by path.
Tabs, actions and context items can be prepared on menu_rebuild phase. I added tabs.json, action.json and context.json files. It's kinda a cache that updates on menu_rebuild call.
Result
- no significant changes on tests performance.
- some performance boost when context links are in use. But not big one.
- no need to cache local_tasks anymore, as a result, there is less pressure on cache_menu table and fewer queries per page request.
- step forward to remove MENU_MAX_PARTS (9) limitation.
Backward compatibility
I did not remove _menu_router_save() function. menu_rebuild call it to update menu_router table. Any contrib module that requires records from menu_router table is not going to be broken.
Need help & review
I am not good with documentation and function name. Please help me to properly update documentation and rename functions.
Recent comments
Hi ian, so, in your case all the other admin pages work fine, including the status page, only admin/reports/updates fails? But you can access admin/reports? Weird... I...
Update Report thows "Access denied You are not authorized to access this page."
The File (Field) Paths module should be able to move existing files. I've not tested it, but the module description says: Retroactive updates - rename and/or move...
Moving from /files into subdirectories
Yes indeed. We are exploring a few other more costly options, but as we are a low-resource start-up, we could save a lot of money by integrating Backdrop, CiviCRM and Ubercart for our membership...
UberPOS for Backdrop?