有没有办法缓存 PHPinclude
有效地重复使用,无需 APC 等?
Simple (尽管愚蠢) 例子:
// rand.php
return rand(0, 999);
// index.php
$file = 'rand.php';
while($i++ < 1000){
echo include($file);
}
同样,尽管很荒谬,这对脚本转储了 1000 个随机数。然而,对于每次迭代,PHP 都必须访问文件系统(正确的?我没有错过任何继承缓存功能,不是吗?)
基本上,如何防止前面的场景导致文件系统出现 1000 次点击?
到目前为止我唯一考虑的是一个愚蠢的想法,而且它可能根本不起作用(还没有测试过,写在这里,容易出错,但你明白了):
// rand.php
return rand(0, 999);
// index.php
$file = 'rand.php';
$cache = array();
while($i++ < 1000){
if(isset($cache[$file])){
echo eval('?>' . $cache[$file] . '<?php;');
}else{
$cache[$file] = file_get_contents($file);
echo include($file);
}
}
一个更现实且不那么愚蠢的例子:
当包含用于视图生成的文件时,给定视图文件在给定请求中使用多次(一个小部件或其他东西)是否有一种现实的方法可以在不影响文件系统的情况下捕获并重新评估视图脚本?
仅当通过网络访问包含文件时,这才有意义。
我没有错过任何继承缓存功能,不是吗?
所有操作系统都经过高度优化,可减少物理 I/O 量并加快文件操作速度。在大多数情况下,在正确配置的系统上,系统很少会恢复到磁盘来获取 PHP 代码。坐下来拿着电子表格,想一想如果每个文件都必须从磁盘中获取,那么处理 PHP 代码需要多长时间 - 这将是荒谬的,例如假设您的脚本位于 /var/www/htdocs/index.php 中并包含 /usr/local/php/resource.inc.php - 这是 8 个查找操作来定位文件 - 每个 @8ms,查找文件需要 64ms !在您的测试用例上运行一些计时 - 您会发现它的运行速度比这快得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)