Squeak.ru - шаблоны программирования

Laravel: как оптимизировать несколько запросов

Запросы к файлу HomeController замедляют работу сайта. Полная загрузка страницы занимает 20 секунд. (Размер страницы составляет всего 3,9 Мб, а загрузка процессора увеличивается до 80% каждый раз, когда я загружаю страницу). Мне сказали использовать Query Builder, который быстрее, чем Elequant, и объединять запросы, чтобы отправлять их как один запрос. Я нахожу это слишком сложным. Где я могу увидеть некоторые примеры для этого?

HomeКонтроллер

public function index()
{
    $sliders = Post::where('post_type','slider')
        ->with('FeaturedImage','PostField')
        ->orderBy('created_at', 'desc')
        ->limit(4)
        ->get();

    $page1 = Post::where([
        ['post_type','=','custom_page'],
        ['slug','=','page1'],
    ])
        ->with('FeaturedImage','PostField')
        ->latest()
        ->first();


    $page2 = Post::where([
        ['post_type','=','custom_page'],
        ['slug','=','page2'],
    ])
        ->with('FeaturedImage','PostField')
        ->latest()
        ->first();


    $page3 = Post::where([
        ['post_type','=','custom_page'],
        ['slug','=','page-3'],
    ])
        ->with('FeaturedImage','PostField')
        ->latest()
        ->first();


    $compacts = array(
        'sliders',
        'page1',
        'page2',
        'page3',
    );
    return view('site.home')->with(compact($compacts));
}

изменить: после миграции

public function up()
{
    // Create table for storing roles
    Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('author_id');
        $table->integer('category_id')->nullable();
        $table->string('title');
        $table->text('excerpt')->nullable();
        $table->text('body')->nullable();
        $table->string('slug')->nullable();//unique()
        $table->string('post_type')->default('post');
        $table->enum('status', ['PUBLISHED', 'DRAFT', 'PENDING'])->default('DRAFT');
        $table->timestamps();
    });
}

  • Где я могу увидеть несколько примеров для этого? Вы пробовали использовать Google? документация по ларавелю? 02.11.2017
  • вы в основном выполняете запрос 3 раза без причины 02.11.2017
  • Как объединить эти запросы в один запрос? 02.11.2017
  • Можете ли вы показать свою миграцию для своей таблицы сообщений? 02.11.2017
  • @patricus да, я обновил 02.11.2017
  • 3,9 МБ — это огромно; пожалеть кого-то далеко с медленным соединением; это может занять несколько минут только для сети! 04.11.2017
  • Предоставьте сгенерированный SQL и определения таблиц. Исходя из этого, мы можем предложить лучшие индексы и т. д., чтобы значительно сократить нагрузку ЦП на 80%. 04.11.2017

Ответы:


1

Вы выполняете четыре запроса к таблице сообщений, и ни один из них не использует индексы. Это означает четыре полных сканирования таблицы сообщений. Кроме того, вы сортируете по неиндексированному полю. Это также может вызвать проблемы с производительностью.

Вам нужен индекс post_type и slug для условий запроса. Вы можете создать два отдельных индекса или один составной индекс. Это зависит от потребностей вашего приложения.

$table->string('slug')->nullable()->index();
$table->string('post_type')->default('post')->index();
02.11.2017

2

Вы можете сделать что-то подобное, чтобы получить все страницы, а затем разделить страницы, используя коллекцию функция groupBy()

Post::where('post_type','=','custom_page')
->whereIn('slug',['page1','page2','page-3'])
->whereRaw('id IN (select MAX(id) FROM post GROUP BY slug)')
->with('FeaturedImage','PostField')
->get()
->groupBy('slug');
02.11.2017
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...