<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>伍拾柒</title><link>https://www.efu.me/</link><description>Recent content on 伍拾柒</description><generator>Hugo</generator><language>zh-CN</language><managingEditor>o@efu.me (伍拾柒)</managingEditor><webMaster>o@efu.me (伍拾柒)</webMaster><lastBuildDate>Fri, 05 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://www.efu.me/index.xml" rel="self" type="application/rss+xml"/><item><title>Friends：用 RSS 聚合友链动态</title><link>https://www.efu.me/p/super-for-friends/</link><pubDate>Fri, 05 Jun 2026 00:00:00 +0800</pubDate><author>o@efu.me (伍拾柒)</author><guid>https://www.efu.me/p/super-for-friends/</guid><description>&lt;h2 id="朋友圈聚合"&gt;朋友圈聚合&lt;/h2&gt;&#10;&lt;p&gt;相信大家在看博客主题的朋友圈实现时，都见过这种思路：给一个友链页地址，让程序爬取页面上的站点链接，再尝试寻找每个站点的 Feed，最后把文章聚合起来。&lt;/p&gt;&#10;&lt;p&gt;这套方案当然能跑，&lt;a href="https://github.com/Rock-Candy-Tea/hexo-circle-of-friends"&gt;Hexo circle of friends&lt;/a&gt; 就是一个很典型的实现。&lt;/p&gt;&#10;&lt;h3 id="从友链页抓取还是手动维护-feed"&gt;从友链页抓取，还是手动维护 Feed&lt;/h3&gt;&#10;&lt;p&gt;本站采用的是更朴素的方案：在 &lt;code&gt;src/data/feeds.ts&lt;/code&gt; 里手动维护友链和 Feed 地址。&lt;/p&gt;&#10;&lt;figure class="code-block" data-code-block data-language="typescript"&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;typescript&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;pre class="code-block__fallback" tabindex="0"&gt;&lt;code class="language-typescript"&gt;{&#10; author: &amp;#39;Antfu&amp;#39;,&#10; sitenick: &amp;#39;Antfu&amp;#39;,&#10; link: &amp;#39;https://antfu.me/&amp;#39;,&#10; avatar: &amp;#39;https://cdn.lightxi.com/cloudreve/uploads/2025/08/02/wQRfFIj8_antfu.svg&amp;#39;,&#10; archs: [&amp;#39;Vue&amp;#39;, &amp;#39;Vercel&amp;#39;],&#10; date: &amp;#39;2024-01-29&amp;#39;,&#10; feed: &amp;#39;https://antfu.me/feed.xml&amp;#39;,&#10;}&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;这里的 &lt;code&gt;feed&lt;/code&gt; 是 Friends 页的数据入口。配置了 &lt;code&gt;feed&lt;/code&gt;，服务端就会去拉取这个站点的 RSS / Atom；没有配置，就只作为普通友链展示。&lt;/p&gt;&#10;&lt;p&gt;这对吗？对于大规模聚合平台，当然不够自动化；但对个人博客，这是一个很稳的取舍。数据源在哪里、站点是谁、头像用哪个、技术栈怎么写，全都在一份配置里，坏了也好查。&lt;/p&gt;&#10;&lt;p&gt;本站当前没有爬取友链页，也没有自动发现 Feed 地址。Friends 页的数据源就是 &lt;code&gt;feedGroups&lt;/code&gt; 中配置了 &lt;code&gt;feed&lt;/code&gt; 的友链。&lt;/p&gt;&#10;&lt;h3 id="渐进增强没有-feed-也能做普通友链"&gt;渐进增强：没有 Feed 也能做普通友链&lt;/h3&gt;&#10;&lt;p&gt;友链页和 Friends 页不应该强绑定。没有 Feed 的朋友仍然可以出现在 &lt;code&gt;/links&lt;/code&gt;，只是不会进入 &lt;code&gt;/friends&lt;/code&gt; 的动态时间线。这样一来，Feed 聚合只是友链功能的渐进增强，而不是友链存在的前提。&lt;/p&gt;&#10;&lt;p&gt;头像也是同理。Feed 里的作者信息经常不完整，所以本站不会依赖远程 Feed 提供头像，而是使用友链配置里的数据：&lt;/p&gt;</description></item><item><title>在 Solitude 上优雅的使用 CDN 加速静态资源文件</title><link>https://www.efu.me/p/cdn-for-solitude/</link><pubDate>Tue, 02 Dec 2025 00:00:00 +0800</pubDate><author>o@efu.me (伍拾柒)</author><guid>https://www.efu.me/p/cdn-for-solitude/</guid><description>&lt;h2 id="什么是-cdn-"&gt;什么是 CDN ？&lt;/h2&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;CDN（Content Delivery Network）是一种分布式的网络架构，旨在通过将内容存储在多个地理位置分散的服务器上来加速内容的传输。CDN 可以显著提高网站的加载速度和可靠性，尤其是对于静态资源文件如图片、CSS 和 JavaScript 文件。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="在-solitude-上配置-cdn"&gt;在 Solitude 上配置 CDN&lt;/h2&gt;&#10;&lt;p&gt;以下是完整的配置项：&lt;/p&gt;&#10;&lt;figure class="code-block" data-code-block data-language="yaml"&gt;&#10; &lt;figcaption class="code-block__toolbar"&gt;&#10; &lt;span class="code-block__language"&gt;yaml&lt;/span&gt;&#10; &lt;button class="code-block__copy" type="button" data-code-copy&gt;复制&lt;/button&gt;&#10; &lt;/figcaption&gt;&#10; &lt;div class="code-block__viewport"&gt;&#10; &lt;pre class="code-block__fallback" tabindex="0"&gt;&lt;code class="language-yaml"&gt;# --------------------------- start ---------------------------&#10;# 非必要请勿修改&#10;CDN:&#10; internal: local # local / cdnjs / jsdelivr / unpkg / custom&#10; third_party: cdnjs # cdnjs / jsdelivr / unpkg / custom&#10; version: true # 是否使用版本号&#10; custom_format: https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/${cdnjs_name}/${version}/${min_cdnjs_file}&#10; # 直接覆盖默认 CDN 链接（优先级最高）&#10; options:&#10; # algolia_search&#10; # aplayer_css&#10; # aplayer_js&#10; # artalk_css&#10; # artalk_js&#10; # blueimp_md5&#10; # busuanzi_js&#10; # chart_js&#10; # color_thief&#10; # fancyapps_css&#10; # fancyapps_ui&#10; # fontawesome&#10; # instantsearch&#10; # katex&#10; # katex_copytex&#10; # lazyload&#10; # medium_zoom&#10; # mermaid_js&#10; # meting_js&#10; # pace_js&#10; # pjax&#10; # qrcode&#10; # snackbar&#10; # swiper_css&#10; # swiper_js&#10; twikoo: https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/twikoo/1.6.40/twikoo.all.min.js&#10; # typeit_js&#10; # valine&#10; # waline_css&#10; # waline_js&#10;# --------------------------- end ---------------------------&lt;/code&gt;&lt;/pre&gt;&#10; &lt;/div&gt;&#10; &lt;button class="code-block__expand" type="button" data-code-expand hidden&gt;展开全部&lt;/button&gt;&#10;&lt;/figure&gt;&#10;&lt;h2 id="internal"&gt;Internal&lt;/h2&gt;&#10;&lt;p&gt;此部分代表 Solitude 内部文件使用的 CDN 配置，通常不需要修改。&lt;/p&gt;</description></item><item><title>相册</title><link>https://www.efu.me/album/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>o@efu.me (伍拾柒)</author><guid>https://www.efu.me/album/</guid><description>&lt;p&gt;镜头把时间留在原地。&lt;/p&gt;&#10;&lt;h2 id="daily"&gt;Daily&lt;/h2&gt;&#10;&lt;div class="solitude-tag tag-gallery gallery-container" data-columns="2"&gt;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/daily.jpg" alt="日常" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="landscape"&gt;Landscape&lt;/h2&gt;&#10;&lt;div class="solitude-tag tag-gallery gallery-container" data-columns="2"&gt;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/landscape.jpg" alt="风景" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="portrait"&gt;Portrait&lt;/h2&gt;&#10;&lt;div class="solitude-tag tag-gallery gallery-container" data-columns="3"&gt;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/portrait.jpg" alt="人物相册封面" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/portrait-1.jpg" alt="四兄弟" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/portrait-2.jpg" alt="朋友合照" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/portrait-3.jpg" alt="朋友合照" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/portrait-4.jpg" alt="演讲" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/portrait-5.jpg" alt="橘子洲头" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="food"&gt;Food&lt;/h2&gt;&#10;&lt;div class="solitude-tag tag-gallery gallery-container" data-columns="2"&gt;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/food.jpg" alt="美食" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;h2 id="travel"&gt;Travel&lt;/h2&gt;&#10;&lt;div class="solitude-tag tag-gallery gallery-container" data-columns="3"&gt;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/travel.jpg" alt="旅行相册封面" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/travel-1.jpg" alt="鄱阳湖畔" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;div class="solitude-tag tag-gallery-item gallery-item"&gt;&lt;img class="nolazyload" src="https://www.efu.me/media/album/travel-2.jpg" alt="武功山" loading="lazy"&gt;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;p&gt;&lt;em&gt;鄱阳湖畔 · OnePlus Ace 5 · 2025-09-30 18:15&lt;/em&gt;&lt;/p&gt;</description></item><item><title>最近看过</title><link>https://www.efu.me/watched/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>o@efu.me (伍拾柒)</author><guid>https://www.efu.me/watched/</guid><description>&lt;h2 id="片单"&gt;片单&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;片名&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: right"&gt;评分&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;信息&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;日期&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;给阿嬷的情书&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;9.2 / 10&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026 / 中国大陆 / 剧情 家庭&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-04-30&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;浪浪山小妖怪&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;8.5 / 10&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2025 / 中国大陆 / 剧情 喜剧 动画 奇幻&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2025-08-02&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;海上钢琴师&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: right"&gt;9.3 / 10&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2019 / 意大利 / 剧情 音乐&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2019-11-15&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;</description></item></channel></rss>