编程

Laravel: `email:dns` 验证可能会影响页面加载速度

20 2025-03-06 16:35:00

前几天我在开发一个功能,这个页面必须做的一件事就是验证电子邮件地址,就像我们都在做的一样,对吧?在 Laravel 中,这非常简单:你只需在表单请求验证规则中添加 'email' 即可。完成。Laravel 在幕后处理一切,以确保电子邮件看起来有效。

但后来我想,“为什么不更进一步呢?”我在验证规则中添加了 'email:dns'。如果你以前使用过或见过它,你就知道它会检查以确保电子邮件的域具有有效的 MX 记录,基本上就是验证电子邮件是否真的可以接收消息。这个小功能来自 egulias/email-validator 包。

这就是它变得有趣的地方。

这个小小的添加会对你的页面响应时间产生如此大的影响吗?是的,它可以。这就是为什么我写这篇文章是为了提醒你,这样你就可以避免被这件事弄糊涂了。

添加了 'email:dns' 后,每次有人提交表单时,Laravel 都会接收电子邮件,查看域名(“@”符号后的部分),然后联系 dns 服务器确认域名存在并且可以处理电子邮件。听起来不错,对吧?

问题是这个过程依赖于第三方,即 DNS 服务器。你无法控制它的反应速度。有时,它运行良好,页面加载速度很快。有时候,它会被卡住等待,你的用户会盯着加载旋转器。最坏的情况?它超时或失败,导致错误。

关键在于:因为这是在表单验证过程中发生的,所以你不能将其卸载到队列中或延迟它。它就在那里实时发生,而你的用户正在等待。

使用 email:dns

没有使用 email:dns

请注意

  1. 微小的改变可能会产生巨大的后果
    添加 'email:dns' 感觉像是一个微小的改进,也是那些“很好”的功能之一。但它可能会对用户体验产生重大影响,这一切都是因为你无法控制的事情。
  2. 第三方依赖不可预测
    DNS 查找依赖于外部服务器。如果服务器较慢,你页面反应也会变慢。如果调用失败,验证也会失败。

怎么办?

如果你想在验证规则中使用 'email:dns' ,以下是一点建议:

  • 三思而后行:你真的需要在这个阶段验证邮箱域名吗? 对于大部分用例,使用 'email' 验证邮箱格式足够了。
  • 保守使用:如果确实需要 'email:dns',可以将其限定在确实需要的特定表单或者场景中。
  • 做好最坏的打算:为 DNS 查找缓慢或完全失败的情况做好准备。考虑在验证时间比预期长时添加回退或警告用户。

归根结底,页面加载速度,每一秒都很重要,有时,少即是多。