sam
(Sam Saffron)
5
在这里使用 wasm 绝对不可行,负载会大得多,而且在配合 CSP(内容安全策略)运行时存在大量安全问题(以及 CORS 相关顾虑)。markdown.it 的实现极其快速且可扩展,支持大量插件,并拥有庞大的现有生态系统。
再补充一些关于 mini_racer 的背景信息。从 Discourse 创立之初,我们就坚持采用单一管道来处理 Markdown,这彻底消除了我在 Stack Overflow 经历过的某一类棘手 bug,即服务器端和客户端使用了略有不同的方言。对于 Discourse 而言,这一点更为重要,因为插件可以修改该管道。例如:
是通过插件实现的(对 [] 的解析)
我们使用 Unicorn 并依赖其 fork 机制,获得了一些“提升生活质量”的功能,详见:
具体来说,我们在主进程中监控并管理 Sidekiq 子进程。
不过……Truffle 没有 GIL(全局解释器锁),一旦 mini_racer 正常工作,Puma 就会出现在 Gemfile 中。我们可以合作构建一个节省内存的 Truffle 配置,将 Sidekiq 和 Puma 保留在同一个进程中。或者,人们也可以手动启动 Sidekiq 进程。Puma 当然可以工作,我们广泛使用了 Rack.hijack,而该功能在 Puma、Unicorn 和 Passenger 中均已实现。