雄辩的模型观察者表现

问题描述 投票:0回答:1

如果我有多个模型并且我在事务中工作繁重,那么在我的AppServiceProvider中,我为我的模型创建了一个观察者:

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        User::observe(UserObserver::class);
        User2::observe(UserObserver2::class);
        User3::observe(UserObserver3::class);
        User4::observe(UserObserver4::class);
        User5::observe(UserObserver5::class);
        User6::observe(UserObserver6::class);
        User7::observe(UserObserver7::class);
        User8::observe(UserObserver8::class);
        User9::observe(UserObserver9::class);
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

它会造成一些性能损失吗?如果我正确理解每个应用程序访问的observe method它将遍历我所有的模型观察者方法并将它们与雄辩的事件相匹配,所以如果我有30个模型观察者它会导致糟糕的性能?

是否有一些聪明的方法只在模型使用时声明了观察类?因此,即使不需要,每个模型只有在使用它时才会知道它的观察者,而不是在每个app访问中声明观察者?

laravel laravel-5 eloquent laravel-5.4 laravel-eloquent
1个回答
1
投票

有同样的问题,并做了一些研究。

如果你打开Laravel附带的config/app.php文件,你会看到一个providers数组。这些是将为您的应用程序加载的所有服务提供程序类。请注意,其中许多是“延迟”提供程序,这意味着它们不会在每个请求中加载,而是仅在实际需要它们提供的服务时加载。

Source

如果您的提供程序仅在服务容器中注册绑定,您可以选择推迟其注册,直到实际需要其中一个已注册的绑定。推迟加载这样的提供程序将提高应用程序的性能,因为它不是在每个请求上从文件系统加载的。

Source

© www.soinside.com 2019 - 2024. All rights reserved.