你好!
我对这个新功能感到非常兴奋。我期待像这样的解决方案已经很久了,我们 Tecnoblog 的读者给出的初步反馈也非常棒——他们非常喜欢社区集成。
然而,经过一些实际测试,我发现了一些技术障碍,我们需要克服这些障碍,才能让这个系统感觉像一个真正的原生评论系统,更重要的是,让它能够适应高流量网站的需求。
以下是我目前的发现:
1. 性能与服务器负载
嵌入完整应用后,我们的服务器负载显著增加。查看 Cloudflare 数据,我们的请求量增加了 10 倍。以下是一些优化建议:
- 懒加载: 对 JS 实现懒加载有很大帮助(我已经在使用一个变通方法)。
<script type="text/javascript">
DiscourseEmbed = {
discourseUrl: '<?php echo esc_url($discourse_url); ?>',
<?php if ($use_topic_id): ?>
// ID 模式:主题保存在数据库中,不受 URL 变化影响
topicId: <?php echo intval($topic_id); ?>,
<?php else: ?>
// URL 模式:当通过 API 创建失败时的后备方案
discourseEmbedUrl: '<?php echo esc_url($permalink); ?>',
<?php endif; ?>
fullApp: true,
embedHeight: '800px',
};
(function() {
var container = document.getElementById('discourse-comments');
// 检查浏览器是否支持 IntersectionObserver
if ('IntersectionObserver' in window) {
var observer = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
// 当 div 进入屏幕时加载脚本
loadDiscourse();
observer.unobserve(entry.target);
}
});
}, { rootMargin: "1500px" }); // 在到达 div 前 1500px 时加载
observer.observe(container);
} else {
// 旧浏览器的后备方案
loadDiscourse();
}
function loadDiscourse() {
var d = document.createElement('script');
d.type = 'text/javascript';
d.async = true;
d.src = window.DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
}
})();
</script>
在这里你可以看到实现懒加载后请求数量下降的情况(网站的部分内容仍然被缓存,所以这不是最终结果):
-
精简负载: 我们能否减少嵌入内容中加载的资源?例如,我注意到有对聊天 URL 和 AI 积分检查的查询——这些在嵌入视图中是必需的吗?
-
请求频率: 实时 POST 请求有点过于频繁。也许我们可以降低嵌入版本的轮询频率?
-
缓存: 改进嵌入主题的缓存管理,以应对流量高峰。
2. 分析数据混乱
目前,嵌入内容正在触发 Google Analytics/GTM 脚本。这导致我们的页面浏览量翻倍(一次点击对应帖子,另一次对应 iframe),从而扰乱了我们的数据。理想情况下,系统应该能够检测到它处于 iframe 中,并自动禁用所有跟踪脚本(包括 Discourse 的分析脚本)。
3. iframe 高度问题
这可能是用户体验方面最大的障碍。如果帖子没有评论,会出现一个奇怪的空白区域。如果有一个长线程,iframe 会在前 2 或 3 条评论处被截断,迫使用户“滚动中滚动”,这在移动设备上尤其糟糕。
要真正与 Disqus 等产品竞争,我们需要高度是动态的(根据评论数量调整),并且还需要一个“加载更多”按钮,在达到一定数量的回复后展开线程。
4. 插件冲突
由于嵌入内容会加载所有活动的插件,我们遇到了一些奇怪的行为。例如,“Google One Tap”会在博客帖子中弹出。当用户登录时,iframe 会刷新并将他们带到社区主页,而不是评论线程。能够手动禁用嵌入视图中的特定插件将是一个巨大的帮助。
5. 登录摩擦
当前的流程有点影响转化率:用户点击登录 → 打开新标签页 → 登录完成 → 用户留在社区主页。回到博客帖子时,iframe 仍然显示未登录状态,直到用户手动刷新整个页面。这是一个令人困惑的循环,导致人们在评论前放弃并离开。
自从启用新的嵌入功能以来,我们的每日注册量增加了两倍多,这很好。然而,我们的参与度指标没有任何变化。事实上,我们的DAU/MAU 下降了——我们有更多登录用户,但他们没有互动。像“每日活跃用户”、“新贡献者”和“发帖数”这样的指标都没有增加。
这证明了人们想要参与讨论,但他们在登录循环中迷失了方向,在真正发表评论之前就放弃了帖子。
6. 移动 UI
在移动设备上,回复窗口占据了整个屏幕,因此你会失去正在回复的对话的所有上下文。感觉有点压抑——任何能让它更紧凑的改进都会是一个巨大的胜利。
我真的很希望将这个系统作为 Tecnoblog(以及我们拥有的另一个网站)的默认系统。如果你希望深入探讨其中任何一点,请告诉我!







