The menu_links table doesn't have a language column or a node ID column. This is fine in principle but becomes a massive performance issue when looking at large sites.
I recently added an additional 8 languages to a site of mine which already had 15 languages and noticed a massive performance hit. Each language site has around 700 nodes with menu links and this table was the cause of the issue.
After lots of debugging we found the issue as each menu link is selected, un-serialized (to get the language) and then processed in PHP. Now this is fine for small sites and single language sites but on large site the performance hit is HUGE 95% of my processing time is in generating the menu! An option is to create a separate menu for each language and this helps drastically.
Drupal 7 has fixed this and I have attempted a few patches for D6 such as adding a language field to the menu links table and adjusting the functions that read this table, however I wondered if anyone else had a better idea of if this should just be forgotten for D6?
Comments