【问题标题】:automatically pre-caching webpages自动预缓存网页
【发布时间】:2015-08-30 11:36:42
【问题描述】:

目前,我的网站采用缓存系统,在该系统中生成新请求的页面,然后动态缓存以供将来更快地执行。总体格式是这样的伪代码:

See if cached page exists.
If cached page exists then
         Load cached page
         Exit
If cached page does not exist then
         Generate page
         Save output to cache file
         Exit

每个新请求的页面需要 250 到 500 毫秒的加载时间,每个缓存的页面需要 100 到 200 毫秒的加载时间。

我想要做的是在每次手动更新网站时,我想预先缓存页面(我认为它称为缓存启动)。

我的缓存系统是用 PHP 完成的,我想制作一个包装 PHP 脚本,该脚本调用主脚本来生成加载了适当参数的网页。在代码中,这是我的想法:

<?php
//wrapper script to pre-cache 500 pages
for ($sect=1;$sect<500;$sect++){
    $_GET['param1']="sectiontocache";
    $_GET['sectionno']=$sect;
    include "index.php";
}
?>

和 index.php(需要大量内存)根据输入参数输出正确的 HTML。

我觉得如果我这样做,我要么给服务器带来巨大负担,要么收到内存不足错误,因为在每次网站更新时,至少需要缓存 100 到 500 个页面才能提供最佳性能任何客户提出的每个请求。

如果我可以这样做:

<?php
//wrapper script to pre-cache 500 pages
for ($sect=1;$sect<500;$sect++){
    $_GET['param1']="sectiontocache";
    $_GET['sectionno']=$sect;
    include "index.php";
    declude "index.php";
}
?>

那我就开心了。

是的,我知道 declude 不是一个有效的关键字,但我想说的是,我想在处理完索引脚本后从索引脚本中释放内存,这样我就不会遇到错误。

我只是想知道我是否应该仍然使用我展示的第一个 php 脚本并祈祷服务器不会崩溃,或者在我的情况下是否有更好的官方方法来预缓存页面。

【问题讨论】:

  • 不要自行查看一些现有的服务器缓存选项
  • 何必呢? 在那种情况下,第一个访问新更新页面的人必须再等待 200-300 毫秒。他们不会注意到的。有些页面在更新之间不会被访问,所以没有问题。这看起来像是寻找问题的解决方案。
  • 我的页面包含 Adsense 代码,我注意到谷歌查看的一件事是页面速度。如果一个页面太慢,它在搜索索引中的位置就会降低,这意味着更少的人会看到它,这反过来意味着较低的展示次数=较低的点击次数=较低的收入。
  • 如果你有这方面的证据,你会是第一个

标签: php html caching memory include


【解决方案1】:

我建议你这个解决方案:

创建一个包含 javascript 计时器的页面(假设您需要 1 秒来生成一个页面):

每隔 1 秒,通过 javascript 刷新页面,包括下一个 $sect 作为 GET 参数。

在你的php代码中获取参数值,生成页面。

在 Javascript 中,添加一个条件来停止进程 if $sect if > 500

我希望我的解释清楚。

【讨论】:

  • 此解决方案需要您在浏览器中加载页面,例如不能与 cron 任务一起使用。
  • 所以要始终打开浏览器窗口 - 认真吗?
  • @Dagon 好吧,这取决于。如果他需要每周重建一次缓存,这可以满足他的需要。如果是每 20 分钟一次,那肯定是没有意义的。
  • 我也不是这方面的专家,但看看ob_flush功能
  • Zeflex,您的答案实际上需要向服务器发出多个请求,如果我使用它,这最多会减慢网站更新时间,而 ob_flush 是我在新(未缓存)页面之前在我的 PHP 代码中使用的被建造。我宁愿有一个可以在服务器上执行的解决方案,而不需要客户端不断连接到服务器来预先缓存每个页面。抱歉,如果我不清楚的话,zeflex。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多