Put menus into separate file for better handling caching with expires
There are several ways to achieve this - maybe more.


Ajax call and include the menu via jquery / javascript from drupal at runtime
Ajax call and iclude the menu via jquery / javascript from a static generated file by cron
SSI or ESI include at proxy level of a static file generated by cron


At the moment my favorite is 2. Option as the First option has a major performance drawback because the menu has to be generated for each page visit

Number 2. and 3. inlcude the menu within under 10 milliseconds 
but 3. would be perfect as it makes the least problems with SEO.
As I do not yet have nginx as reverse proxy available in production I stick at 2. as I could not get to work SSI and PHP with apache and php virtual() is not cached by the drupal page cache (in fact it breaks it)

There is a module which helps with SSI and ESI called https://www.drupal.org/project/esi