cakephp资产管理速度

时间:2013-07-17 23:05:34

标签: cakephp plugins themes dispatch

我是cakephp的新手,我在手册中找到了这个:

  

众所周知,通过PHP提供资产是有保证的   在不调用PHP的情况下比服务这些资产要慢。而且   核心团队已采取措施制作插件和主题资产服务   尽可能快地,可能会出现性能更高的情况   需要。在这些情况下,建议您使用符号链接   或者将插件/主题资源复制到app / webroot中的目录   与CakePHP使用的路径匹配。

app/Plugin/DebugKit/webroot/js/my_file.js 
   becomes app/webroot/debug_kit/js/my_file.js
app/View/Themed/Navy/webroot/css/navy.css 
   becomes app/webroot/theme/Navy/css/navy.css

插件/ webroot / asset中的文件是否需要由PHP读取然后插入HTML而不是由服务器本身直接提供,因为真的不是http模块可以访问的webroot目录?

手册说软链接会加快这个过程。 cakephp首先查看/ app / webroot / asset然后调用调度程序在plugin / webroot / asset中找到它并读取并提供服务吗?

或者该文件的查找/读取方式相同,但是如果资产不在app / webroot / asset位置,则必须使用调度程序来查找资产?

1 个答案:

答案 0 :(得分:1)

用于提供文件......

网络服务器最快

default rewrite rules如下:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

这意味着如果请求是针对网络服务器可以看到的文件 - 不要与php交谈,只需回复文件的内容(或适当的标题)。在这种情况下,没有“cakephp首先查看/ app / webroot / asset ...”,因为根本没有CakePHP(或PHP)参与处理请求。

所以,简而言之:

Request 
-> webserver 
  -> check if file exists
    -> response (file contents)

如果使用不同的Web服务器(不是apache),CakePHP需要等效的重写规则。它永远不会检查是否存在等效的app/webroot/<the current url> - 因为网络服务器应该自己这样做。

PHP很慢

如果请求是针对webroot中存在 not 的文件,那么事情要慢得多,因为很简单,涉及的流程更多。甚至像这样的PHP脚本:

<?php
// example app/webroot/index.php
$path = 'server/this/file.html';
echo file_get_contents($path);
exit;

比网络服务器直接处理的等效请求慢,如下所示:

Request 
-> webserver 
  -> check if file exists
    -> invoke php 
      -> get file contents 
    -> respond to webserver 
  -> response

另外,php并非专为服务文件而设计(就像网络服务器一样或应该是这样),因此本身就比单独的网络服务器慢。

CakePHP较慢

CakePHP项目可以直接通过网络访问的唯一路径是'app / webroot`。

对于CakePHP处理的请求,即使使用Asset dispatch filter(这是一个精简的调度过程) - 显然涉及更多的逻辑,所以它比使用php服务文件所需的最低逻辑要慢。简而言之,请求变为:

Request 
-> webserver 
  -> check if file exists
    -> invoke php 
      -> Bootstrap CakePHP
      -> Dispatch Request
        -> Check Dispatch filters
          -> check if request matches a configured plugin/theme file path
            -> check if file exists
          -> generate response
        -> output response
    -> respond to webserver 
  -> response

与让网络服务器处理静态文件can be very significant的请求相比,性能上的差异。

结论

在没有必要的情况下使用php提供文件是浪费资源,如果可能的话,允许响应来自更高的请求 - 网络服务器,代理或最好是用户自己的浏览器缓存(~0延迟!)