2013-01-16 26 views
1

免责声明:不要让“打开哪种语言比别的更好”的地狱门。
我喜欢PHP和Java。
Drupal引导每个请求和性能

我刚开始挖掘Drupal,发现一些看起来很奇怪的东西。 从index.php文件的外观看来,Drupal似乎需要引导来自客户端的每个Http请求。
与像Spring这样的Java框架(是的,我有java背景)相比,这看起来像是开销,如果它意味着Drupal必须阅读必要的whatevery配置。我不太了解任何框架,但不会在启动时加载配置一次?

我的问题是
如果Drupal有来引导为每个请求,它是如何处理大量的请求? 由于PHP的性质,这是否会给Drupal带来性能上的劣势?

回答

4

PHP本质上是非持久性语言。请求之间你没有分享。

持续性总是在外面管理,即会话由通信中的cookie处理,加载持久性会话存储(通常是一个文件,但它是Drupal的数据库存储)。并且该应用程序的内容位于数据库,文件等上。

使用PHP,您无法创建持久性服务器,为多个请求重复使用对象。事实上,你现在可以使用PHP的一些高级用法来尝试它,但它不是语言的本质,它不是为此而构建的。所有事情都必须首先加载,并且在请求处理结束后所有内容都会被终止。

因此,所有PHP CMS或框架以及Drupal都是其中之一,它们都是以巧妙的方式处理这一事实。其主要策略是加快缓存环境重建的时间(一如既往,管理PHP以外的持久性)。要管理使用Drupal高负荷应用程序,你必须调整高速缓存管理:

  • 激活缓存(当然)
  • 使用多个高速缓存层,例如像APC对于某些类和路径缓存,内存缓存或mongodb用于某些其他缓存,MySQL(默认)用于其他缓存等等。您还可以使用诸如Session proxy或其他模块来在redis服务器上调度会话管理,或者使用mongodb,memcache,redis等。
  • 使用像varnish之类的反向代理缓存来管理公共页面缓存,甚至可以使用varnish ESI来页面部分。

如果您将其与持久性应用程序服务器(如Java或C#)进行比较可能会产生问题,这似乎是一个坏处。但是有些时候,早期的约束可以帮助开发人员找到更好的方法(我不是说Drupal总是使用最好的方式来做事情:-))。许多重负载网站使用PHP(使用缓存)。所以这只是一个不同的网站做法。

+0

我非常喜欢你的答案。谢谢 ! – Ascendant

+0

哦,你能给我一些关键字,这将导致'先进的PHP的用法'请吗?我想尝试持久服务器的事情:) – Ascendant

+1

php-cli,http://verens.com/2008/01/31/persistent-web-apps-in-php/,http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process,http://andytson.com/blog/2010/05/daemonising-a-php-cli-script-on-a-posix-system/,http: //www.funphp.com/?p=33等,但要准备好内存泄漏:-) – regilero