Dan*_*ugg 3 php caching eval include
有没有办法include有效地缓存PHP 以便重用,没有APC,等等?
简单(尽管很愚蠢)的例子:
// rand.php
return rand(0, 999);
// index.php
$file = 'rand.php';
while($i++ < 1000){
echo include($file);
}
Run Code Online (Sandbox Code Playgroud)
同样,虽然荒谬,但这对脚本会丢弃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);
}
}
Run Code Online (Sandbox Code Playgroud)
一个更现实,更不愚蠢的例子:
当包含用于视图生成的文件时,给定视图文件在给定请求(窗口小部件或其他东西)中被多次使用是否有一种现实的方法来捕获和重新评估视图脚本而没有文件系统命中?
如果通过网络访问包含文件,这只会有意义.
我没有遗漏任何继承缓存功能,有吗?
所有操作系统都经过高度优化,可以减少物理I/O的数量并加快文件操作.在大多数情况下,在正确配置的系统上,系统很少会恢复到磁盘以获取PHP代码.如果每个文件都必须从磁盘中获取,请使用电子表格进行思考并考虑处理PHP代码需要多长时间 - 这很荒谬,例如假设您的脚本位于/ var/www/htdocs/index中. php并包含/usr/local/php/resource.inc.php - 这是8个寻找操作来找到文件 - 每个@ 8ms,找到文件的时间是64ms!在你的测试用例上运行一些时间 - 你会发现它的运行速度远远超过它.