Rails 7.0 发布:实现了真正的全栈 Web 开发原创
12月15日,Rails官方发布了博文《Rails 7 fulfilling a vision》,不仅介绍了Rails 7的最新功能特性,同时也表明Rails 7 实现了一个愿景,即一种真正的全栈 Web 开发方法,以同样的力度应对前端和后端的挑战。
事实上,这个愿景已经提出很多年了,但前几年几乎不可能实现。因为之前没有能够掌握核心技术,但随着浏览器对ES6/ESM支持的进步,HTTP/2的广泛采用,以及令人振奋的import maps新标准,这一愿景才能得以实现。Rails 站在这些技术进步的肩膀上,为前端提供了一种无节点的默认方法--在此过程中既不牺牲对npm包的访问,也不牺牲现代JavaScript。
Hotwire将Turbo和Stimulus结合在一起,提供了制作出色的用户体验所需的所有工具,与单页应用程序相比,几乎没有任何遗漏,而且复杂程度很低。它是新的Rails应用程序的默认选择,取代了Turbolinks和Rails UJS的有限选择。
虽然考虑到这些默认选项,大多数Rails应用都不需要依赖Node,但我们仍然设法为那些需要依赖Node的Rails 7 用户大幅改善了集成。
与Webpacker紧密耦合的Webpack已不复存在,取而代之的是与任何JavaScript捆绑器松散耦合的拥抱。无论你喜欢esbuild还是rollup.js,甚至Webpack,都可以通过新的jsbundling-rails集成来使用,可以用--javascript esbuild为新的应用程序预先配置。
对依赖Node的CSS捆绑器也采取了同样的方法。在Rails 7中,只需要能够产生一个编译好的application.css文件,就可以完美地整合。从Tailwind CSS到Bootstrap,从Dart驱动的Sass到PostCSS。如果你愿意接受Node依赖的复杂性,就可以预先配置新Rails应用程序,使用任何一个-css bootstrap,它就会使用cssbundling-rails。(针对于Tailwind,甚至有一个不依赖Node的版本!)
Rails的其它功能和更新包括:
- Active Record支持工作加密
Active Record添加了加密属性,所以应用程序除了传统的静态和传输中的覆盖之外,还可以提供工作中的加密。
这个更新的直接好处是为加密敏感属性增加了一个额外的安全层。例如,如果一个攻击者获得了对你的数据库、数据库的快照或你的应用程序日志的访问权,他们将无法理解加密的信息。即使不考虑恶意行为者,出于合法原因检查应用日志也不应该暴露客户的个人信息。
但更重要的是,通过使用该加密,你可以在代码层面上定义什么是应用程序中的敏感信息。这样就可以控制这些信息的访问方式,并围绕它建立服务。
- 使用 Marginalia 样式标记跟踪查询来源
十年前,Marginalia从Basecamp中提取出来,用SQL注释标签追踪查询源头。现在,这个外部工具已经作为QueryLogs上传到了Active Record。
- 异步查询加载
当一个控制器动作需要加载两个不相关的查询时,现在可以通过Relation#load_async并发进行。如果有三个复杂的查询,每个需要100毫秒,之前必须花300毫秒逐一执行,但现在可以并行运行,总共只花费100ms。
- Zeitwerk
Rails中自动加载是一种很神奇的存在,它常被认为是理所当然的,但是之前 const_missing 方法其实有很多缺失的功能,现在,它终于被 Zeitwerk 代码加载器完全取代。
- 其他亮点
Spring不再是默认开启的;
ActionController::Live#send_stream可以轻松传输在控制器 action中即时生成的文件;
并行测试可以比较CPU核心数和测试数,并相应地扩展并行化;
Active Storage使用更快和更安全的libvips作为其默认变体处理器。
来源:稀土掘金
原文链接:https://juejin.cn/news/7042628854707388452