когато използвам "Елоукент" за получаване на данни и разбрах, че има някакъв проблем с производителността
В моя случай аз използвам ларавел 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...)