编辑:这是因为我的代码中的错误(可能),经过调试并在我的测试中添加了对正确响应的检查,测试证明没有区别(什么让我感到烦恼),更多在我自己的答案中 / EDIT
您好,
我为自己编写了一个用于PHP的SASS的CSS包装程序,并将其编程为在运行之前接受文件名和可能的标志(如果没有标记,可能还有缓存)我的SASS文件。
我也进行了一些测试和版本nr。 2 是 2x - 4x 比版本nr慢的东西。 1 ,虽然版本 1 必须运行更多代码,然后版本 2 (它直接包含在磁盘中,而不是首先解析URL的标记)
我不明白为什么真的和测试有点过于一致,无法在磁盘访问开销上调用它。
以下是速度测试:
首先 - 生成文件,然后 - 只需要来自缓存
版本1总计: 10.886 平均值: 10.886 ms /文件首先: 466.42 ms
版本2总计: 21.235 平均值: 21.235 ms /文件优先: 14.54 ms只需要缓存
版本1总计: 7.886 平均值: 7.886 ms /文件优先: 2.93 ms
版本2总计: 21.657 平均值: 21.657 ms /文件优先: 6.98 ms带有readfile而不是require的版本 版本1运行1:总计: 7.915 平均值: 7.915 ms /文件优先: 2.49 ms
版本2运行1:总计: 9.508 平均: 9.508 ms /文件首先: 3.23 ms
版本1运行2:总计: 1:17.137 平均值: 7.714 ms /文件优先: 4.61 ms
版本2运行2:总计: 1:15.717 平均值: 7.572 ms /文件首先: 2.69 ms * - 第2次运行 10,000 来电。
/* HELPER FUNCTIONS */
function is_option($opt) { global $url_options; return in_array($opt,$url_options); }
function fail($message) { echo $message; die(); }
//prepare options array
$options=array();
$url_options = @explode('_',basename($_GET['f']));
if (!is_array($url_options))
{ fail('Wrong parameters given (or parameter can\'t be accepted)'); }
$loadfile = array_shift($url_options);
if (!file_exists('source/'.$loadfile.'.sass'))
{
if (!file_exists('source/'.$loadfile.'.scss'))
fail('Wrong parameters given (file doesn\'t exist)');
else
$options['property_syntax']='scss';
}else{
$options['property_syntax']='sass';
}
$src_file = 'source/'.$loadfile.'.'.$options['property_syntax'];
$css_file = 'cache/'.$loadfile.'.css';
if (file_exists($css_file) && !is_option('no-cache'))
{
header('content-type: text/css');
require($css_file);
die(); //ALL OK, loaded from cache
}
//quick! load from cache if exists!
if (file_exists('cache/'.($cachefile=basename('/',$_GET['f']))))
{
header('content-type: text/css');
require('cache/'.$cachefile);
die(); //ALL OK, loaded from cache
}
/* HELPER FUNCTIONS */
function is_option($opt) { global $url_options; return in_array($opt,$url_options); }
function fail($message) { echo $message; die(); }
//prepare options array
$options=array();
$url_options = @explode('_',basename($cachefile));
if (!is_array($url_options))
{ fail('Wrong parameters given (or parameter can\'t be accepted)'); }
$loadfile = array_shift($url_options);
if (!file_exists('source/'.$loadfile.'.sass'))
{
if (!file_exists('source/'.$loadfile.'.scss'))
fail('Wrong parameters given (file doesn\'t exist)');
else
$options['property_syntax']='scss';
}else{
$options['property_syntax']='sass';
}
$src_file = 'source/'.$loadfile.'.'.$options['property_syntax'];
$css_file = 'cache/'.$loadfile.'.css';
我可能会使用版本1,我只是想了解为什么v2确实较慢,尽管它运行的代码较少...
编辑:似乎readfile
比require
快一点,两个版本在统计上相同,但版本 1 仍然更快(但1000和10000次呼叫只有2秒,所以这可能只是随机磁盘使用)
答案 0 :(得分:1)
你是什么意思,“版本2必须运行更多代码”?
版本2首先检查缓存,如果找到缓存文件则跳过所有其余缓存。
当然,它也完全忽略了所有“网址选项”。
答案 1 :(得分:1)
似乎
中存在错误 if (file_exists('cache/'.($cachefile=basename('/',$_GET['f']))))
或者
explode
想要使用basename
未按原样使用 - 即basename($_GET['f'])
代替basename('/', $_GET['f'])
因此$cachefile
为空,if
始终为 true ,require
适用于cache
目录。
答案 2 :(得分:1)
因此,主要区别在于我的代码中的错误,由ring0指出(谢谢)。
修复错误后,编辑测试以在 n 迭代中的每个(n / 10)情况下显示响应并同时运行两个测试,结果是这些:
版本1的结果(带有 需要):强>
处理 10000 次 4:56.806 [ 1292676882 - 1292677179 ]
平均 时间: 29.681 毫秒版本1的结果(带有 ReadFile的):强>
处理 10000 次 4:35.242 [ 1292677437 - 1292677712 ]
平均 时间: 27.524 毫秒版本2的结果(带有 需要):强>
处理 10000 次 4:55.760 [ 1292676879 - 1292677175 ]
平均 时间: 29.576 毫秒版本2的结果(带有 ReadFile的):强>
处理 10000 次 4:32.336 [ 1292677433 - 1292677706 ]
平均 时间: 27.234 毫秒
<强>图形:强>
因此,新版本/版本2(其中,需求/读取文件位于顶部的那个)现在更快,尽管不是那么显着。我可能会使用那个,以及readfile增强(感谢Emil)。
谢谢大家,如果你没有正确测试会发生这种情况:)
这就是发生的事情