前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何定时更新或者缓存Feed订阅的RSS数据?

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

作者头像
目的地-Destination
发布2023-03-06 15:40:17
1.4K0
发布2023-03-06 15:40:17
举报
文章被收录于专栏:目的地-Destination

  本站的友链页面,增加显示了部分站长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);替换为下方的代码。
我几乎每一句都加了注释,方便阅读。也是怕自己突然懵了😳
代码语言:javascript
复制
//缓存目录 - 这里注意上面建立缓存目录的路径
$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聚合页面,查看缓存目录下的文件是否有生成。再次刷新后,是否速度有变快呢? 当然,如果订阅的不多的话,感受微乎其微。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023年02月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 建立缓存目录
    • 当然,随意目录都行,只不过在下面查找缓存目录路径时,请确认好自己的实际文件路径。
    • 修改插件源码
      • simplexml_load_file函数就是将Feed源的XML文件解析成一个对象,对象是键值对的方式。
        • 我几乎每一句都加了注释,方便阅读。也是怕自己突然懵了😳
        • 测试
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档