2014-03-26 43 views
0

我正在尝试减少我网站上的请求数(以提高页面速度)。在一个文件中,我有10个独立的php require语句调用10个不同的php文件。每个php是否需要单独的请求?

我的问题是,这10个要求陈述被视为10个单独的请求?通过用被调用的php文件中的实际内容替换require语句,我可以减少请求的数量吗?

如果有人能澄清此表格,我将不胜感激。请注意,我不是一位体验程序员或网页设计师。谢谢!

+1

Web浏览器触发的每个URL都会引发HTTP请求。每个加载的脚本都意味着在一个正在运行的PHP实例中访问文件。 – mario

+0

不完全正确。这取决于PHP的安装方式。 –

回答

0

像我的评论,这取决于如何安装PHP。

如果您使用PHP作为Mod(mod_php),您的Web服务器只创建一个PHP进程。所有请求将在这里处理。

但是,如果您将PHP作为CGI包装器实现,则每个请求都会启动一个PHP实例。

要执行加载时间,请使用类似eAcceleratorAPC或其他脚本的Opcode-Caches。另一个解决办法是处理与正确的方式请求:如样式表,javascripts和图片,缓存静文件..

编辑

另一个解决方法是:优化你的PHP脚本。一个好的检查员是New Relic,在这里你可以看到,哪些脚本有非常大的执行时间。我创建了一个博客文章New Relic及其功能,但仅限于德语版:http://hovida-design.de/php-die-macht-der-performance/

+0

PHP默认包含一个操作码缓存。 http://stackoverflow.com/questions/17224798/how-to-use-php-opcache – PeeHaa

3

正如第一条评论所述; 请求仅适用于客户端;没有一个PHP的语言结构应该被描述为请求。

这么简单,我可以把它...

执行是一个三个阶段的过程:从磁盘

  • 加载文件
  • 编译为Zend的中间形式
  • 执行中间形式

缓存通过篡改Zend的那些部分来提高性能通常情况下响应sible从磁盘加载文件并将其编译为Zend的中间表示;这样,如果可能的话,可以绕过执行的加载和编译阶段,从而提高性能。

如果没有一个操作码缓存

当做出请求时,如

GET /index.php HTTP/1.1 

Web服务器服务所述请求以正常的方式,这继而调用PHP解释被调用。解释器然后从磁盘加载index.php,将其编译到Zend的中间表示中,并开始执行代码。

当脚本包含的

include "my_awesome_code.php"; 

的(下同)解释负荷my_awesome_code.php从磁盘这样一个说法,其编译为Zend的中间表示并执行它。

随着操作码缓存

当做出请求时,如

GET /index.php HTTP/1.1 

Web服务器服务所述请求以正常的方式,这继而调用PHP解释被调用。缓存从磁盘中加载index.php,而不是从存储器中检索代码,它存储在非常接近Zend中间表示形式的东西中。准备执行的高速缓存代码(意味着从共享内存复制并最终确定其形式)比从磁盘加载并首先编译为该代表快得多。

当脚本包含的语句,如

include "my_awesome_code.php"; 

的代码再次从缓存中检索,绕过编译一次。

如果缓存无法在共享内存中找到index.phpmy_awesome_code.php,它会调用它被篡改的Zend部分;导致磁盘正常加载并将这些代码编译到Zend的中间表示中。缓存拦截生成的中间代码并将其存储在共享内存中,然后才允许它第一次执行。

相关问题