百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Ruby 之 Rails 7 的一些新特性

toyiye 2024-06-21 12:08 8 浏览 0 评论

Rails7 的新理念几年前就开始了。这是我们愿景的实现,真真正正的全栈 Web 开发框架,完美将前端和后端的技术挑战进行了融合和平衡。其中包括了全方位的开箱即用的点菜单,从餐前开胃菜到餐后甜点都有。

这个理念其实几年前就有,但之前无法启动。主要是我们没有足够的相关技术成熟度。随着浏览器全面支持 ES6、ESM,和 HTTP/2 的适配,还有令人兴奋的 importmap 相关标准,这一切变为了可能。Rails7 发挥了以上所有的优势,打造了一个无 Node 依赖的前端解决方案,无须过早引入 npm 包系统或者现代 JavaScript 流程。

Hotwire 结合了 Turbo 和 Stimulus,交付了一系列工具帮助打造超级优秀用户体验的产品,关键是与传统单页应用相比,几乎没有新增复杂度。这是新 Rails 应用的默认配置,取代了有更多限制的 Turbolinks 和 Rails UJS。

虽然大多数 Rails 应用不需要依赖 Node,但我们还是会持续改进与 Node 相关环境的集成工作。

用 Webpacker 紧密绑定 Webpack 的做法已经过去了,我们现在会采用松耦合的一种绑定方式,这估计是开发者更喜欢的方式。无论你是喜欢 esbuild 或者 rollup.js,亦或者是 Webpack,你都可以用我们新打造的 jsbundling-rails 集成方案,并且你可用 --javascript esbuild 来提前进行配置。

同样的,我们针对 CSS 打包采用相同的思路。在 Rails7 中,所有需要的文件都会编译打包在 application.css 中,完美整合。从 Tailwind CSS 到 Bootstrap,从 Dart-powered Sass 到 PostCSS 都有很好的整合。如果你也乐意接受 Node 依赖的复杂度,你仍然可以通 --css bootstrap 这个参数提前配置你的新 Rails 应用。它将使用 cssbundling-rails 来进行打包。(偷偷告诉你,我们针对 Tailwind,做了一个无 Node 依赖的版本)

这里有最好的缺省选择,Rails7 中的前端开发方案如此优秀。缺省的配置下没有 Node,超级简单,却令人惊奇的超强能力,有弹性地扩展。高级配置里面 Node 部分相比从前更加轻量,更少的规范,也更健壮。

但是,当然不止如此,Rails7 更大的梦想是重新定义现在的前端解决方案,目前也很多不错的进展值得庆祝。比如我们全新的 Rails 官网,是由 Basecamp 的设计师 Sean Mitchell 完成。新 Rails 应用也有新的启动画面。我(DHH)还非常专业的录制了新的 demo 演示视频。

下面再介绍一些其他新的相关特性或改进点:

在 ActiveRecord 中提供工作时加密机制

从 HEY 项目中抽象出来的 Active Record 的加密字段支持。这样的话,你的应用除了传统的静态和中转加密外,还可以直接工作时加密。

这是一项立即收益的功能,加密敏感字段添加了额外的安全能力。举个例子,如果攻击者已经获得你的数据库权限,或者你的日志,他们也无法解开这些隐私数据。当然即使不考虑这些入侵者,正常情况也不应用获取到这些敏感的个人信息。

但是更重要的,通过 ActiveRecord 加密技术,你可以从代码层面定义哪些信息是属于敏感信息。这样就可以有效控制这些信息该怎样被访问和构建相关服务。举个例子,审计 Rails 控制台操作,保护敏感信息,或者检查内建系统来自动过滤控制器参数。

通过MarginaliaStyle Tagging追踪原始查询

几乎 10 年前,Marginalia 已经从 Basecamp 抽象出来,通过 SQL 注释标签功能来追踪原始查询了。现在这个 Gem 包已经升级为 QueryLogs 并进入到 ActiveRecord 了。

异步查询加载技术

当你有一个控制器和 action 需要加载两个不相关的查询时,现在你可以通过 Relation#load_async 来进行并发查询了。例如,你有三个复杂的查询,每个要花费 100ms 时间,以前就必须用 300ms 的时间。现在就可以进行并行查询,总共只需要 100ms 即可。

全面使用 Zeitwerk

自动加载技术在 Rails 中是超级酷的魔术技术之一,它表现的如此简单,就像本应该如此一样。原来一直信任并使用的 const_missing 有一些毛病,也缺失一些特性,所以最终我们全面切到了 Zeitwerk 代码加载技术。针对旧的应用,这里有一些少量的升级事项,不过我们的升级向导日志会帮助你不花费什么时间就完成升级。

其他一些值得注意的

Spring 取消了缺省支持,因为更快的电脑往往不需要它,只有大型应用才能用上它。

ActionController::Live#send_stream 让由控制器动态生成的文件推送到客户端变的更加方便。

并行测试现在会比较你的 CPU 核心数,进行弹性的并行测试。

Active Storage 现在会采用更快更安全的 libvips 作为缺省的多版本处理器。

从我们到你们

过去一年,从 Rails6 到 Rails7, 中间有着超过 4000 次的提交。这是好几百个贡献者的成果,也有很多是第一次提交代码。他们加入了超过 6000 人的贡献者团队,多年来一直在为 Rails 代码作出贡献。

在开发过程中,所有的工作都经过数千个应用的验证,像大型的如 Shopify,Github,Basecamp 和 HEY,都一直跑在最终的生产版本上。

对于 Ruby on Rails 框架来说这是一个了不起的时刻。在这个框架上构建着如此大的应用,并且一直在响应能力和伸缩性上创造着新的记录。在招聘最优秀的 Rails 开发者上,从来没有像今天这么激烈。每周都在有新的贡献者在推进着 Rails 的发展和迭代。

我希望大家喜欢这次新的旅程。

原文:https://rubyonrails.org/2021/12/15/Rails-7-fulfilling-a-vision

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码