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
We can no longer add contrib projects in the Tugboat sandboxes that we use for core PR's? Can this be fixed or is there a reason for this? We can add contrib projects to demo...
Apr 25th Weekly Meetings
The Mail System and MimeMail modules are now installed. I'll let you know if they solve the problem. Edit: Using Mail System with MimeMail I was able to send plain text emails. There is...
HTML Email treated as plain text
If you haven't already I recommend installing Mail System and MimeMail. The latter will help format emails as HTML and first helps with configuring which module will handle the formatting...
HTML Email treated as plain text