我对cakephp很陌生,我在手册中发现了这一点:
众所周知,通过PHP提供资产的速度肯定比不调用PHP的服务要慢。虽然核心团队已经采取措施使插件和主题资产尽可能快地提供服务,但在某些情况下可能需要更多的性能。在这种情况下,建议您使用与CakePHP使用的路径匹配的路径,将插件/主题资产复制到app/webroot中的目录中。 app/Plugin/DebugKit/webroot/js/my_file.js变成app/webroot/debug_kit/js/my_file.js应用/View/主题/海军/webroot/css/Navy.css成为app/webroot/theme/Navy.css
是否需要PHP读取插件/ webroot /asset中的文件,然后插入到HTML中,而不是直接由服务器本身提供服务,因为http模块不能访问webroot目录吗?
手册说,软链接将加快这一进程。cakephp首先查看/app/webroot/asset,然后调用dispatcher在plugin/webroot/asset中找到它,并读取并服务它吗?
或者,如果文件不在app/webroot/资产位置,那么进程是否与文件的查找/读取方式相同,除了蛋糕必须使用dispatcher定位资产?
发布于 2013-07-18 21:56:24
为了提供文件..。
网络服务器是最快的
默认重写规则如下:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]这意味着如果请求是针对see服务器可以看到的文件-不要与php对话,只需响应文件的内容(或适当的标题)。在这种情况下,没有“cakephp首先查看/app/webroot/asset .”因为在处理请求时根本不涉及CakePHP (或PHP )。
所以,简单地说,那就是:
Request
-> webserver
-> check if file exists
-> response (file contents)如果使用的是不同的not服务器(而不是apache),CakePHP需要等效的重写规则。它永远不会检查是否存在相当于app/webroot/<the current url>的内容--因为the服务器本身就应该这样做。
PHP是慢的
如果请求是针对webroot中不存在的文件,则速度要慢得多,因为很简单,涉及的进程更多。甚至像这样的php脚本:
<?php
// example app/webroot/index.php
$path = 'server/this/file.html';
echo file_get_contents($path);
exit;比由that服务器直接处理的等效请求慢,因为:
Request
-> webserver
-> check if file exists
-> invoke php
-> get file contents
-> respond to webserver
-> responsePlus php并不是专门为文件服务而设计的(就像webserver是或应该是这样),因此在这样做的过程中比webserver本身慢得多。
CakePHP比较慢
对于CakePHP项目来说,唯一可以直接通过网络访问的路径是‘app/webroot`’。
对于CakePHP处理的请求,甚至使用资产调度过滤器 (这是一个精简的调度过程)--显然涉及更多的逻辑,因此它比使用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与让for服务器处理静态文件可能非常重要的请求相比,性能上的差异。
结论
在没有必要的情况下使用php提供文件是浪费资源,如果有可能的话,允许响应来自更高的请求-- when服务器、代理或者最好是用户自己的浏览器缓存(~0延迟!)。
https://stackoverflow.com/questions/17711779
复制相似问题