PHP中的缓存包括迭代重用

PHP中的缓存包括迭代重用,php,caching,include,eval,Php,Caching,Include,Eval,有没有一种方法可以有效地缓存PHPinclude以便重用,而无需APC等 简单(尽管愚蠢)的例子: //rand.php 返回兰特(0999); //index.php $file='rand.php'; 而($i++

有没有一种方法可以有效地缓存PHP
include
以便重用,而无需APC等

简单(尽管愚蠢)的例子:

//rand.php
返回兰特(0999);
//index.php
$file='rand.php';
而($i++<1000){
包括($文件);
}
同样,尽管荒谬,这对脚本转储1000个随机数。然而,对于每一次迭代,PHP都必须命中文件系统(正确吗?我没有错过继承缓存功能,是吗?)

基本上,我如何防止前面的场景对文件系统造成1000次点击

到目前为止,我唯一考虑的是一个愚蠢的问题,它可能根本没有被证明是有效的(没有测试,在这里写下,容易出错,但你明白了):

//rand.php
返回兰特(0999);
//index.php
$file='rand.php';
$cache=array();
而($i++<1000){
if(isset($cache[$file])){

echo eval(“?>”.$cache[$file]。只有通过网络访问包含文件时,这才有意义

没有我错过的继承缓存功能,是吗


所有操作系统都经过高度优化,以减少物理I/O量并加快文件操作。在大多数情况下,在正确配置的系统上,系统很少会恢复到磁盘以获取PHP代码。坐下来看电子表格,想想如果必须获取每个文件,处理PHP代码需要多长时间从磁盘读取数据-这太荒谬了,例如,假设您的脚本位于/var/www/htdocs/index.php中,并包含/usr/local/php/resource.inc.php-这是8个查找操作,只需查找文件即可-每个@8ms,查找文件需要64ms!在您的测试用例上运行一些计时-您将看到它的运行速度比这快得多。

我认为最好使用de标志应该是这样的:

// rand.php
function get_rand() {
    return rand(0, 999);
}

// index.php
$file = 'rand.php';
include($file);

while($i++ < 1000){
    echo get_rand();
}
//rand.php
函数get_rand(){
返回兰特(0999);
}
//index.php
$file='rand.php';
包括($文件);
而($i++<1000){
echo get_rand();
}

正如Sabeen Malik的回答一样,您可以使用输出缓冲捕获include的输出,然后将它们全部合并,然后将其保存到一个文件中,每次包含一个文件

通过检查文件的mod time,然后每小时仅重写和重新包含一次include,这一集合include可以保留一个小时。

另一个选项:

while($i++ < 1000) echo rand(0, 999);
while($i++<1000)echo rand(0999);

如果您的代码需要这样的算法-您的系统设计完全错误。不知何故,“错误”似乎是主观的,没有帮助的回答。这是一个评论,而不是回答。会有帮助的。@OZ\u我感谢您的建议。
包括一次
要求一次
怎么样?谢谢symcbean;我假设是这样的(在这种情况下,我引用的是inherit PHP缓存功能)我们可以称之为过早优化,但我希望将瓶颈保持在较低的水平。感谢Karolis;当然,此应用程序在处理包含的文件时利用了
return
。感谢问号;这对于渲染输出的更高级别缓存是可行的,但我更感兴趣的是解决以下问题:它涉及从包含的文件返回值,而不是生成输出。
// rand.php
function get_rand() {
    return rand(0, 999);
}

// index.php
$file = 'rand.php';
include($file);

while($i++ < 1000){
    echo get_rand();
}
while($i++ < 1000) echo rand(0, 999);