目的地-Destination 前程似锦、未来可期、寻得良人、共赴白头,祝你也祝我。
博主 目的地-Destination
沪ICP备16003146号-2沪公网安备 31010702004922号萌ICP备20238488号博主 昨天 17:25 在线自豪地使用 Typecho 建站搭配使用 🌻Sunny 主题当前在线 19 人
歌曲封面 未知作品

沪ICP备16003146号-2

沪公网安备 31010702004922号

萌ICP备20238488号

网站已运行 7 年 342 天 1 小时 1 分

Powered by Typecho & Sunny

20 online · 51 ms

Title

如何定时更新或者缓存Feed订阅的RSS数据?

Chrison

·

烂笔头

·

Article
⚠️ 本文最后更新于2023年02月20日,已经过了610天没有更新,若内容或图片失效,请留言反馈

  本站的友链页面,增加显示了部分站长RSS订阅聚合数据。采用的插件是Lopwon Feed
  但是呢,该插件并不包含缓存功能,以至于每次打开RSS聚合页面时,都会循环访问一遍所有的Feed订阅源。那么,当自己站点添加了大量Feed订阅源后,页面加载会变得异常缓慢。
  正好网友荒野孤灯遇到了同样的问题,我就索引度娘了一番,查询如何定时的缓存订阅数据,以减少加载时间。不过查出来的一般都是Redis,TPCache之类的。Redis我熟,是单独的一个类似缓存数据库的东西;而TPCache又是一个插件。我也不想插件套插件了。干脆搜搜网页,弄个最简单的就好了。

建立缓存目录

网站根目录下,新建了一个文件夹cache

当然,随意目录都行,只不过在下面查找缓存目录路径时,请确认好自己的实际文件路径。

修改插件源码

  1. 找到插件目录下/plugins/LopwonFeed/Plugin.php文件,打开编辑它!
  2. 找到里面的函数function render()代码里面$feed = simplexml_load_file($link);的位置。

simplexml_load_file函数就是将Feed源的XML文件解析成一个对象,对象是键值对的方式。

  1. 将找到的代码$feed = simplexml_load_file($link);替换为下方的代码。

我几乎每一句都加了注释,方便阅读。也是怕自己突然懵了😳

♾️ php 代码:
//缓存目录 - 这里注意上面建立缓存目录的路径
$cacheDir = './cache/';
//缓存名称 - 这里我采用了去除掉http之后的域名作为缓存文件名(因为也没有其他唯一值可以用了😂)
$cacheName = str_replace('/','',preg_replace('(^https?://)','',$link.'.xml.cache'));
//缓存时间 1小时 - 下面写秒
$ageInSeconds = 3600;
//清除文件状态缓存
clearstatcache();
//重新生成缓存文件的判定
//1.文件不存在时,生成
//2.当前时间-文件最后修改时间>=1小时,生成
if(!file_exists($cacheDir.$cacheName) || time() - filemtime($cacheDir.$cacheName) >= $ageInSeconds) {
  $contents = file_get_contents($link);
  file_put_contents($cacheDir.$cacheName, $contents);
}
//解析本地xml文件
$feed = simplexml_load_file($cacheDir.$cacheName);

测试

这里就已经好了。刷新下自己的RSS聚合页面,查看缓存目录下的文件是否有生成。再次刷新后,是否速度有变快呢?
当然,如果订阅的不多的话,感受微乎其微。
缓存文件XML

现在已有 252 次阅读,14 条评论,0 人点赞
Comment:共14条
发表
  1. 头像
    @

    好友

    Teacher Du
    我的是部署时,自动刷新!
    · Chrome · 中国北京市中国移动北京分公司

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @
      自动的也好啊。我的也算是个自动吧,哈哈,超过设置时间,就会取一次新数据。
      我这就是个补救措施吧。也比较简单。
      · 火狐浏览器 · 中国江苏省苏州市电信

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
      1. 头像
        @
        你用什么工具抓取feed啊?
        · Chrome · 中国北京市中国移动北京分公司

        👍

        💖

        💯

        💦

        😄

        🪙

        👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
        1. 头像
          @
          插件Lopwon Feed。文章一开始写的。
          · Safari · 中国江苏省苏州市电信

          👍

          💖

          💯

          💦

          😄

          🪙

          👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
  2. 头像
    @
    海角七号
    ୧(๑•̀⌄•́๑)૭>
    · Chrome · 中国江苏省苏州市电信

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @
      ٩(ˊᗜˋ*)و
      · 火狐浏览器 · 中国江苏省苏州市电信

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
  3. 头像
    @
    海角七号
    特别好,有用有用~
    · Chrome · 中国江苏省苏州市电信

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @
      必须滴~
      · 火狐浏览器 · 中国江苏省苏州市电信

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
  4. 头像
    @
    正好拿来借鉴一下
    · Chrome · 中国江西省赣州市移动

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @
      欢迎欢迎👏🏻
      · 火狐浏览器 · 中国江苏省无锡市电信IDC机房

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
  5. 头像
    @
    踩踩 顺便学习了
    · Safari · 中国广西联通

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @

      博主

      Chrison
      @Haths
      常来逛逛。
      · Safari · 中国江苏省苏州市电信

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
  6. 头像
    @

    好友

    荒野孤灯
    大佬,请收下我的膝盖
    · Chrome · 中国湖北省武汉市联通

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
    1. 头像
      @
      弄了吗?可以吗?
      · 火狐浏览器 · 中国江苏省苏州市电信

      👍

      💖

      💯

      💦

      😄

      🪙

      👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主 不再显示
博主