Sessions比运行处理器密集型功能更快吗?

时间:2010-12-16 16:44:30

标签: wordpress php

我使用原生Wordpress函数wp_nav_menu()来创建我的网站的导航菜单。这个函数真的需要很长时间才能工作,特别是如果导航菜单像我的那样大。所以我想解决这个问题的方法如下:

session_start();
if(isset($_SESSION['topTranslucent']))
    echo $_SESSION['topTranslucent'];
else {
    // ob necessary because wp_nav_menu() echos it's results
    ob_start();
    wp_nav_menu(array('menu'=>'Top Translucent','container'=>'','menu_id'=>'topMenu'));
    $_SESSION['topTranslucent'] = ob_get_contents();
    ob_end_flush();
}

我的想法是,打印存储在会话变量中的html比在每个页面加载时重新运行该函数要快得多。但是对于PHP会话没有太多经验,我想在StackOverflow上从你那些可爱的神童中获得一些专家的观点。问题是:会议实际上只是在做他们似乎正在做的事情吗? (即将文本数据存储在cookie中以跨页面使用),还是不仅仅满足于眼睛?

1 个答案:

答案 0 :(得分:1)

会话将序列化数据存储在服务器上;他们只使用cookies进行识别。例如:

Client:
  cookie { PHPSESSID => '1234567890a' }

Server:
  cookie { PHPSESSID => '1234567890a' }
  => session 1234567890a {
     topTranslucent => '<yourcode>whatever</yourcode>'
  }

你的方法可行;请注意,整个会话将在加载时被反序列化(因此过度使用会降低系统速度,因为它会加载大量数据。使用这个来处理几个小片段应该没问题。)

可能更好的方法是使用不同的机制作为缓存,但是session-as-a-cache有些可用。