由于在另一个主题上收到的建议,我刚开始从 Ember 文档中学习 Glimmer 组件。实际上,它们使用起来非常愉快,而且在我看来比 React 更好。我很惊讶 Ember 不那么受欢迎。无论如何,我的问题是,据我所知,您可以使用 Glimmer 组件在 Discourse 中构建任何主题插件,并且您似乎可以开箱即用地访问 Ember 的所有内容。那么,您是否不能在理论上通过创建 Glimmer 组件来自定义 Discourse 的任何部分?这里的限制是什么?Ember/Glimmer 的所有功能是否都可以在 Discourse 中使用,然后您只需要找到一个组件的插件出口并正确初始化它?例如,我需要在我的社区中用来自外部电子商务网站的相关产品数据来补充我的一些主题。所以我的想法是创建一个 Glimmer 主题组件在 Discourse 中运行一个 fetch 来获取产品数据,然后在帖子末尾显示它。用 Glimmer 来做这件事很简单,但我不知道通过这条路线在 Discourse 中是否是正确的方法,因为我不确定 Ember/Glimmer 组件能走多远。感谢任何反馈。
您理解得很正确。
只要跨站脚本设置允许,您就可以从远程站点提取数据(并且您不需要使用用户可以获取到的密钥 API)。
这可以奏效,
但您应该意识到,这会在每次页面加载时从外部网站获取产品数据,这可能不是您——或他们——想要的。因此,最好创建一个插件,让它从您自己的控制器请求数据,并让该控制器从远程站点请求数据。这样就可以缓存结果,还可以让您使用任何非公开的 API。
如果有一个产品链接且数据已过时,您还可以创建一个“onebox”该产品并在此处添加额外数据的插件。
谢谢。我当时在想 EmberData 是否可用,它似乎内置了缓存。我还没有在 Discourse 中测试过 EmberData,但有什么理由它不能工作吗?
这将是客户端(即特定于用户)的,并且可以解决一个用户发出(相同)请求 1000 次的问题。
但如果您有 1000 个用户,每个用户仅发出一次请求,那么它将不起作用,因为他们都有单独的缓存。
感谢您的澄清。是的,我更关心的是客户端,因为 API 有基于 IP 地址的限制。所以只要客户端本身被缓存,我就应该没问题,因为我没有多少并发用户会影响外部 API 的 API 限制。
我对 Ember 唯一的顾虑是,除了 Discourse 之外,似乎没有人真正使用它了。我之所以学习它,仅仅是因为 Discourse 越来越受欢迎,并且该平台不断改进。但是,Ember 在 Discourse 之外还有未来吗?Discourse 会长期依赖它吗?Ember 不够流行,这让我觉得很奇怪。我开发 React 已经很多年了,前几天安装了 Ember 之后,我惊讶于它的出色。拥有一个有主见的框架确实非常有用。
只有 CDCK 能完全回答这个问题,但我的看法是:
- 它看起来已完全投入。
- 它是一个出色的全功能框架。
- 重写它将非常昂贵(而且几乎肯定没有商业意义)。
- 它已经使用了 Ember 十多年了,可以下注了。
大量企业使用 EmberJS:
Discourse 不使用 EmberData。
虽然它以前更受欢迎,当时苹果、LinkedIn 和 Twitch 等公司都在使用它,但它仍然有像我们、Intercom、Hashicorp、CrowdStrike 这样的用户。
我们加入了 https://mainmatter.com/ember-initiative/,因为 Discourse 完全投入其中。
回到这个主题的标题。我认为 Glimmer 组件的可扩展性很强,因为 CDCK 最终乐于允许将组件添加到主题列表中,这要求框架能够大规模运行,请参阅:Upcoming topic-list changes - how to prepare themes and plugins
最初,扩展依赖于现已弃用的 widget 系统,该系统是为了应对渲染大量主题列表项的挑战而创建的,即使是在旧的 Android 手机上。