我正在尝试减少网站上的请求数量(以提高网页速度)。在一个文件中,我有10个单独的php require语句调用10个不同的php文件。
我的问题是,这10个要求的陈述是否被视为10个单独的请求?通过将require语句替换为来自被调用的php文件的实际内容,我可以减少请求的数量吗?
如果有人能够澄清这份表格,我将不胜感激。请注意,我不是一名经验丰富的程序员或网页设计师。谢谢!
答案 0 :(得分:3)
正如第一条评论所述; 请求仅在响应客户时提供; PHP的任何语言结构都不应被描述为请求。
就像我能做到的那样简单......
执行是一个三阶段过程:
缓存通过篡夺通常负责从磁盘加载文件并将其编译为Zend的中间表示的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.php
或my_awesome_code.php
,它会调用它所篡夺的Zend部分;导致从磁盘正常加载并将这些代码编译成Zend的中间表示。缓存拦截生成的中间代码,并在允许第一次执行之前将其存储在共享内存中。
答案 1 :(得分:0)
与我的评论一样,这取决于PHP的安装方式。
如果您使用PHP作为Mod(mod_php),您的Web服务器只会创建一个PHP进程。所有请求都将在此处理。
但是如果你已经将PHP实现为CGI-Wrapper,那么每个请求都会启动一个PHP实例。
要执行加载时间,请使用Opcode-Caches,如eAccelerator
,APC
或其他PHP脚本。其他解决方案是以正确的方式处理请求:缓存静态文件文件,如样式表,Javascripts,图像,..
修改强>
另一个解决方案是:优化您的PHP脚本。一个好的检查员是New Relic
,在这里你可以看到,哪些脚本的执行时间非常长。我创建了一个New Relic
的博客帖子及其功能,但它仅限于德语:http://hovida-design.de/php-die-macht-der-performance/