php - 缓存包含在 PHP 中以供迭代重用

标签 php caching include eval

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

简单(尽管很愚蠢)示例:

// 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);
    }
}

一个更现实而不那么愚蠢的例子:

当包含用于 View 生成的文件时,给定 View 文件在给定请求(小部件或其他东西)中使用了多次,是否有一种现实的方法来捕获和重新评估 View 没有文件系统命中的脚本?

最佳答案

只有通过网络访问包含文件时,这才有意义。

There is no inherit caching functionality I've missed, is there?

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

关于php - 缓存包含在 PHP 中以供迭代重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6451732/

相关文章:

javascript - 当网页将要关闭时,浏览器会做什么?

php - 对于高度变化的网站,memcache 或 memcached 有什么好处?

c - 在 C 头文件中使用定义?

php - 迭代 mongodb 查询返回的数组

javascript - html5缓存,每次用户在线时更新

google-app-engine - 使用 Go 管理和包含多个文件的最佳方法是什么?

c# - LINQ To Entities Include + Where 方法

php - 如何在 php 中访问私有(private)范围的命名空间数组数据?

javascript - html 表单数据到 MySQL db

php - 如何格式化日期 Carbon :now() in Laravel PHP