主要观点:
- 构建 Little CRM 需让其具备尽可能强的弹性,通过网络栈实现渐进增强,涵盖无 JS 加载、部分 JS 加载、JS 加载但 WebSockets 故障、WebSockets 正常提供实时更新等情况,网络栈需支持标准 HTTP 请求/响应、提供客户端 API 处理 fetch/AJAX 请求、使用轻量级 WebSockets 实时更新层。
- 批判 Hotwire/Turbo,认为其重实现浏览器核心,引入大量问题,如依赖 DOM 变形、History API 导致失败点多,处理页面加载和历史方式复杂;Turbo Streams 协议不易理解和调整,而 CableReady 协议简单易懂、可扩展,使用同一协议可避免重复代码和认知负担。
- 强调设计良好的 HTML 回退机制,以确保普通 HTTP 请求时应用仍能正常工作,如在复杂行为中也能设计好 HTTP 回退,Rails 可帮助解决此问题,且 HTML 回退无需完美,只需让用户能继续前进。
- 肯定 UJS(现 Mrujs)的设计,它轻巧、利用浏览器优势,注重增强而非依赖 JS,大量使用事件派发,是 Evergreen 设计。
- 进行不科学调查及与 Konnor Rogers 交流,认为多数应用最佳方式是从底层编写渐进增强的请求/响应,以智能控制器设计等实现 Websocket 更新,多数功能无需真正实时更新。
- 指出抛弃 UJS 是浪费时间,CableReady 协议优于 Turbo Streams,Turbo 和 Hotwire 晚于 CableReady 出现且未解决其问题,应选择更好的工具,社区共识也是一种标准化。
关键信息:
- 网络栈各部分的功能及实现方式,如使用 Mrujs 增强表单和链接、利用 Rails 的
respond_to
方法提供理想和回退响应、使用 CableReady 作为响应协议等。 - Hotwire/Turbo 的问题,如重实现浏览器核心、Turbo Streams 协议的局限性等。
- 设计 HTML 回退机制的方法和示例,包括控制器代码、视图代码等。
- UJS(Mrujs)的优势和设计理念。
- 关于应用是否需要真正实时更新的讨论及相关观点。
重要细节:
- 各种代码示例,如 Microposts 控制器代码、表单代码、CableCar 相关代码等,详细展示了网络栈各部分的实现细节。
- 与 Konnor Rogers 的交流内容,包括对 morphing 的看法、Turbo 的问题等。
- 关于不同情况下应用的表现,如 JS 工作和不工作时的表单提交错误处理、实时更新的实现等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。