【问题标题】:loading the cached file takes longer than not caching - and reading the cache file isn't the problem, its outputting it加载缓存文件比不缓存需要更长的时间 - 读取缓存文件不是问题,它会输出它
【发布时间】:2010-09-18 05:07:29
【问题描述】:

我有一个站点,有几个数据库查询和很多访问者,所以我想 id 缓存它。

这是在 php 中,所以我使用 ob_start() 等来获取内容并保存文件。这很快。

需要 0.05 秒。 (我什至不需要缓存)。

问题在于加载文件。

如果我这样做:

 readfile($cache_file)

需要 0.43 秒。

如果我这样做了

$c= fread(fopen($cache_file,'r',filesize($cache_file)) 

(即读取文件,不输出)它比 0.05 快。

如果我那么做

echo $c

再次需要 0.4 秒。

有什么想法可以加快速度吗?似乎基本上一次性回显(或者不管 readfile 这样做)整个缓存比仅仅动态生成页面需要更长的时间。

ps 缓存文件的文件大小约为 41 KB。我已经进行了全面测试,以确保问题在于大文件的加载。做一个 readfile($smallfile);很快。只有当缓存文件很大时输出缓存文件才会慢

edit - 我也在另一个站点上使用这个脚本,缓存文件要小得多(非常基本的页面),它可以加快速度。需要大缓存文件,因为它在页面上有很多数据,所以我无法从 40kb 下载它。

【问题讨论】:

    标签: php unix fread readfile


    【解决方案1】:

    为什么不直接提供缓存页面而不是通过 PHP 传递呢?将缓存文件另存为 [request_name]_cache.html,然后使用 mod_rewrite 直接提供缓存的 HTML(如果存在):

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI}_cache.html -f
    RewriteRule ^(.*)$ $1_cache.html
    

    如果您已经直接使用 mod_rewrite,您可能需要对此进行调整。

    另外,如果你更改数据库中的数据,别忘了删除缓存页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多