最近在看 Rails world 2023 的视频,这里谈到了 Turbo 的进一步的未来,有事件的朋友可以看下这个
https://www.youtube.com/watch?v=m97UsXa6HFg
看了之后,我觉得 Rails 的前端继续在邪路上偏离主流一发不可收拾了
另付补充文字
https://dev.37signals.com/a-happier-happy-path-in-turbo-with-morphing/
大致说下视频的内容:
Jorge 总结了下 现有的 Turbo Stream 和 Turbo frame 的问题:兔子洞,到处都是代码片段,还需要对不同的 View 的情况下考虑,这让程序员很不开心。
他认为程序员写页面的时候,最开心的就是 给出请求,之后服务器给出整个返回 就行了。但是这么的话对展现力确实有很大的影响,不会保持浏览器滚动条、其他 dom 节点状态,会有白屏,位置视口变动等问题
那么有没有解决方案,既可以解决程序员写的爽(即只写全部渲染页面),又保留浏览器滚动条、其他 dom 节点状态的方式呢?
答案是有,他参考了其他框架(phoenix 的 Liveview?)采取的 morphing 的技术,即使用浏览器将服务器返回的整个页面的的 dom 树,对比请求之前页面之前的 dom 树,之后将 dom 树的不同的东西更新上就行了。其实这个就比较类似 react 的 虚拟节点更新,只不过这里不是虚拟节点,而是真实的 dom 树,无所谓,现在的浏览器都可以很快很好完成这个工作
利用 morphing 技术,浏览器会找到不同的 dom,更新它,并保持之前的 scrollbar 位置等信息了。大家就可以不写兔子洞,就只管整体渲染一次页面就好了。
视频演示了下在 basecamp 的 类似看板的地方,将滚动条拉到了面板的最右侧,点击添加新的面板,页面的滚动条并未消失,而是直接在原来最右侧的地方又新增了一个,整个效果就如同使用 react 那种感觉一样。然而这种使用 morphing 的技术则不需要重新写任何代码,就用之前的 render 整个页面的那个即可。
之后另外使用 broadcast 也实现了类似的效果,即不需要重新写其他 view,就复用即可
总结下:就是就前端方面 rails 就只写最普通的 view 爽就完了,剩下的靠 morph 来更新页面的同时,保持之前的浏览器状态,获得 One Page Application 的体验,与主流前端那套是 say goodbye 了。
我自己的感觉是浪费的拿点传输大小和 CPU 消耗,对比现在的 网络和计算机性能,真的无所谓了。只不过国内的各路卷王,怕是不会用在生产环境的。