如果延迟加载不好,为什么不禁用它呢?

If lazy loading is bad, why not keep it disabled?

我正在关注 Laracasts 的 Laravel 8 from Scratch course,并且已经通过 Laravel 的 Eloquent ORM 向 运行 查询引入了延迟加载的概念.

Laravel 8 在整个应用程序范围内带有 disable lazy loading 选项,但同一页面建议仅在开发期间这样做,这意味着延迟加载在生产中有好处。

然而在 Laracasts 课程中,Jeffrey Way 的延迟加载的一般方法似乎总是通过 运行ning 强制预加载的查询来避免它。这让我感到困惑,因为如果确实应该避免延迟加载,为什么不完全禁用它并强迫自己 always 从数据库中预加载查询呢?这是一个好主意吗?如果不是,为什么不呢?

因为 在实践中 你可能会在生产中调整一些东西(因为你可以编辑 PHP 文件 in vivo)并且如果您进行更改导致数据在您没有意识到的情况下被延迟加载,那么至少该程序仍然可以运行(尽管与急切加载相比速度更慢),而不是崩溃和破坏最终用户体验。

这种情况类似于编译 C/C++ 程序时仅在 DEBUG 构建而不是发布构建中启用断言:断言帮助您在开发期间捕获错误,但在生产中使用您可能希望程序继续运行而不是崩溃(更准确地说:中断/“断言”),除非断言是当然,这是一项重要的健全性检查。


通过流程图查看它的另一种方式:

  • PHP 脚本想要使用一些未预先加载的数据。 它运行 正在制作中吗?
    • 是。然后延迟加载数据。 It's slow,但至少它会起作用。
      • 成功!用户永远不会注意到任何错误! (除了稍长的页面加载时间)
    • 。 Crash/break/invoke-debugger 通知开发人员他们需要先预加载此数据。
      • 成功!假设开发人员添加了预加载,那么现在程序将不需要在生产中延迟加载。

反之,如果没有:

  • PHP 脚本想要使用一些未预先加载的数据。 它运行 正在制作中吗?
    • 是。 崩溃,因为数据不可用。
      • 您的用户对软件无法运行感到沮丧。他们在网上留下了 1 星评价。新的潜在客户选择使用竞争对手的产品。你永远无法克服名誉损失。你一个人死去,身无分文。