异步 Ruby on Rails

异步编程可以让你的应用程序运行得更快。我将分享如何在 Ruby on Rails 中使用异步来加速你的应用程序。虽然 Ruby 中有示例,但这些原则适用于任何语言。 如果你想要异步编程的介绍或者更喜欢视频格式,我也可以 谈论了这件事 在 热带.rb 2024。 我将把这些例子归纳为两个基本原则。这是第一个: 尽可能推迟做事。懒惰不一定是坏事。实际上,这意味着几件事: 使用以以下内容结尾的方法时请注意 _now。它们是异步执行任务的有力候选者。一个常见的例子是发送电子邮件。想象一下,Rails 控制器在用户注册后发送电子邮件: class RegistrationsController def create @registration = Registration.new(params) if @registration.save RegistrationMailer .welcome_email(@registration) .deliver_now redirect_to @registration else # … end end end 请求不需要等待电子邮件发送完成。使用 deliver_later 此处可以加快请求速度。这同样适用于任何其他类型的工作!如果您正在保存统计数据、处理数据或其他不需要立即完成的事情, perform_later。 您还可以删除与以下对象异步的 Active Storage 文件 purge_later: class User 拆分关键和非关键 CSS 也有帮助。你可以 延迟加载字体 和 font-display: swap,它将在自定义字体加载时使用后备字体呈现文本。 […]

Promise.all() 的一个棘手的陷阱和解决方案

本文旨在描述使用 Promise.all() 时经常出现的棘手情况,以及该问题的简单解决方案。 Promise.all() 的 MDN 页面提供了该函数的以下描述: Promise.all() 静态方法采用可迭代的 Promise 作为输入…… 本文旨在描述使用时经常出现的棘手情况 Promise.all(),以及解决此问题的简单方法。 上下文 MDN 页面 Promise.all() 提供了该函数的以下描述: 这 Promise.all() 静态方法接受可迭代的 Promise 作为输入并返回一个 承诺。 当所有输入的 Promise 都满足时(包括传递空的可迭代对象时),返回的 Promise 就会满足,并带有一个满足值数组。 当任何输入的 Promise 拒绝时,它会拒绝,并给出第一个拒绝原因。 Promise.all() 于 2015 年发布的 ECMAScript 第六版中引入,当 Promise 首次作为语言中的内置机制添加时,但它们之前已经通过使用像 蓝鸟。 ECMAScript 2020,第11版,推出 Promise.allSettled(),其行为略有不同: 这 Promise.allSettled() 静态方法接受可迭代的 Promise 作为输入并返回一个 承诺。 当所有输入的承诺都解决时(包括传递空的可迭代对象时),返回的承诺就会履行,并带有描述每个承诺结果的对象数组。 最后,随着 async, Promise.all() & […]