缓存Drupal引导程序


10

我很好奇是否有人试图在Drupal中“缓存”引导过程。

通常,Drupal将在每个请求上运行7个引导阶段,但是也许在已部署的生产系统上,可以“销毁”其中的一些或全部?

我想到的可能的建议可能是

  1. 序列化引导状态并将其粘贴到内存缓存中
  2. 脚本可以为bootstrap.inc生成补丁,该补丁会将某些信息硬编码到文件中。
  3. 我相信David Strauss试图使引导过的Drupal在libevent上运行。
  4. 其他疯狂吗?

那里进行了哪些尝试,哪些已知((某种程度上)可靠)?


这在某种程度上与我有关编译Drupal的问题有关:drupal.stackexchange.com/q/11738/2916
Refineo 2012年

Answers:


12

PHP是一种无共享的体系结构。那有其优点和缺点。

一个缺点是做这样的事情并不容易。没有什么状态可以存储在某个地方。

我进行了一些快速测试,并且登录后,boostrap似乎占用了大约17%的总时间,而其中50%以上的时间实际上是在加载所有.module和.inc文件。那不是您可以存储在内存缓存中的东西。另外,如果我使用内存缓存或数据库缓存,似乎也没有多大关系。

启用页面缓存时,我试图获得一些结果,但是Xhprof似乎并没有返回可靠的结果。整个事情似乎太快了。但是即使如此,最大的部分仍然涉及执行init / exit挂钩并加载看起来似乎的文件。我在那里发现了一个有趣的问题:用户模块似乎严重降低了缓存的页面响应的速度,因为由于.module文件中的实体控制器,它触发了注册表。

也就是说,David Strauss在哥本哈根展示了一些实验性工作,他在引导后创建了一个内存快照,然后在页面被提供后又返回该快照。他确实为此使用了Drupal 6。看完上面的数字后,我认为在Drupal 7中这样做的性能提升会小很多。这样做的一个原因是数据库连接是延迟加载的(并且在需要执行第一个查询之前使用例如Memcache时,您会在引导程序中走得很远),并且缓存了很多内容。

什么是真正的坏在Drupal 7与这些巨大的阵列和无穷的递归和循环渲染层。那几乎消除了进入Drupal 7的所有性能工作。如果Twig成为核心,让我们看看它在Drupal 8中的外观。

最后,关于上述优点。一个很大的优点是,内存韭葱无关紧要,因为在每个请求之后所有内容都被释放。我见过许多Java应用程序,它们的内存使用量不断增加,需要定期重新启动。


4
非常喜欢在网站@Berdir上拥有您;)
Letharion,2012年

亚历克斯·布朗斯坦(Alex Bronstein)在sprint中提到,即使使用APC包含tpl.php文件也需要一些统计信息,这有些慢-但是Twig编译为类,因此在诸如node +许多注释的页面上将是一个胜利。我们会看到。

我想您可以创建一个系统,在该系统中,对于缓存的页面,您会生成一堆重写规则,并将其放在.htaccess中,并伴以html页面,以完全绕过PHP。可能不值得麻烦:IIS,nginx,已登录用户,...
Bart 2012年

1
@Bart:您刚刚重新发明了Boost:drupal.org/project/boost :)
伯迪(Berdir)2012年

5

不,是大卫·斯特劳斯(David Strauss)在https://code.launchpad.net/~fourkitchens/pressflow/6-evented上进行kargo-event(现在称为Kellner)的实验,但我怀疑会发生什么严重的问题。

Drupal 7 确实已经缓存了很多引导程序,cache_bootstrap为此有一个垃圾箱。您可以将其粘贴到memcached中。

您可以通过将一些/很多Drupal代码移到C中来大刀阔斧地减少代码负载。Damien和dhthwy在http://drupal.org/project/drupal_php_ext创建了PHP扩展,但并没有完成太多工作。或做嘻哈。我不知道hiphop和Drupal 7的当前状态。

但是,到最后,您需要认真考虑一下工程成本,例如,使hiphop与Drupal 7(以及所有贡献者)一起工作,并将其与租用更多服务器进行比较。如果您可以保存,例如说节省了5%的服务器,并且您有10万台服务器,那就去做,但是您是Facebook吗?优化时要小心且经济。


谢谢,我已经更新了问题,并从中删除了您的名字。:)我意识到,在许多情况下,还有许多处理性能的有效方法,我对此很好奇。
Letharion

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.