/ / Laravel Еротично представяне - ларавел, ларавел-4, красноречив

Laravel Еротично представяне - ларавел, ларавел-4, красноречив

когато използвам "Елоукент" за получаване на данни и разбрах, че има някакъв проблем с производителността

В моя случай аз използвам ларавел debugbar ( https://github.com/barryvdh/laravel-debugbar ), за да събера информацията, от която се нуждая.

когато използвам ORM, за да получим около 20 записа от моя ПБ

$projects = Project::where("status", "=", 2)->get();

тя отне около 24MB памет и 250ms

но когато използвам инструмента за съставяне на заявки, както е показано по-долу

$projects = DB::table("Project")->where("status","=",2)->get();

заявките за базата данни и данните за връщането са почти еднакви, но производителят на заявки е използвал само 11MB памет и 113ms за да получи данните.

когато записите, които ми трябва, са около 200 записи и дори се отнасят до други таблици чрез ORM, тя отнема почти 8000ms ... и много често получавате съобщението за грешка "Разрешен размер на паметта изтощена".

Така че, аз се чудех, в моето състояние, трябва ли да използвам конструктора на заявки и да се присъединя към друга маса?

Или какво трябва да направя, за да ускоря красноречивото изпълнение?

Отговори:

3 за отговор № 1

Накрая разбрах къде е проблемът. Всъщност този въпрос не е всъщност причинен от красноречивият ОРМ, а от гледната точка. Това е, което направих за решаване на проблема

  • Непрекъснато натоварване: Тъй като според мен има 4 взаимоотношения, така че причинява N + 4 заявки, използвам нетърпеливото зареждане, за да го фиксирам. и употреба

  • Cache: Използвам memory () за кеширане на резултатите.

  • Отмяна на проверката на изображението: последните неща, които направих, но най-важното, е да отмените проверката на изображенията в S3.

Зареждането на страницата става огромна скорост. :)


2 за отговор № 2

Просто идея, най-вероятно трябва да деактивирате регистрацията на заявки:

DB::connection()->disableQueryLog()

и използвайте кеширане: http://four.laravel.com/docs/cache ,

ако няма значителна разлика, тогава да, вие просто трябва да използвате заявка Builder или дори основните:

DB::select(//your query here...)