【问题标题】:Large scale Laravel App performance when multiple models多个模型时的大规模 Laravel App 性能
【发布时间】:2016-12-15 16:59:22
【问题描述】:

我正在构建一个大型 PHP Laravel 应用程序。它是一款面向开发者的应用,由许多较小的应用/模块组成。

例如,一个类似于 PinBoard 的书签应用、一个类似于 Evernote 的笔记本应用、代码片段应用、RSS 提要阅读器,以及大约 30 个小应用,所有应用都在一个应用中,每个应用都充当一个模块。

我的问题是关于性能的。加载了这么多模型和控制器等,我不能指望这个应用在庞大的用户群中获得良好的性能吗?

我意识到有太多未知的因素,比如服务器设置等等,但更多,所以我想问的是模型和东西等都是在应用程序初始化上加载还是仅在需要时加载?很多时候大多数应用程序/模块不会在请求中使用。

我看到了一些添加模块的包,这些模块拥有自己的控制器、模型、路由、视图以及您在每个模块的 App 文件夹中看到的所有内容。但是我不确定我是否想走那条路,所以现在我像往常一样在主应用程序下拥有一切。

【问题讨论】:

  • 适当的缓存,你可以构建任何东西......
  • 如果没有信息,我认为没有有用的答案。您在整个程序中拥有的模型/控制器的数量无关紧要。只有在给定请求中使用的文件才重要,即使这样,这些文件的“大小”也并不重要。
  • 根据需要加载模型和控制器。你可能有十亿个模型类型,但Foo::all() 只会加载其中一个模型的 PHP 文件。

标签: php performance laravel laravel-5.3


【解决方案1】:

简单的答案是肯定的,应用程序只加载您用于给定请求的模型/控制器,不,您不会加载模型和控制器(包括包和模块中的那些)的数量/大小对应用的性能产生负面影响。

与往常一样,更复杂的答案取决于您编写代码的方式;模型为某些业务逻辑调用其他模型,或者在没有缓存的情况下急切加载多个关系价值的数据,或者在每个控制器中使用荒谬数量的依赖注入......但无论如何,所有这些都是非常糟糕的应用程序设计,并不具体到 Laravel。

但是,根据我的经验,您会看到对性能的最大影响是 Eloquent 代码试图过于花哨或低效地从数据库中获取数据。查看文档以了解避免这种情况的方法:

https://laravel.com/docs/5.3/eloquent-relationships#eager-loading

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多