thirlan
  • 0
Новичок

Самый быстрый способ просмотреть все сообщения?

  • 0

Мне нужно запустить фоновый процесс в плагине, который выполняет некоторую работу со ВСЕМИ сообщениями в базе данных человека после установки плагина. Я очень новичок в работе с wordpress, поэтому мои исследования показали, что я могу использовать запрос wp или я могу использовать «цикл».

Поскольку я просматриваю абсолютно каждый пост, скорость имеет существенное значение. Мне нужно проверить заголовок, тело, категории, метатеги, состояние публикации и защиту паролем. Итак, исходя из этого, какой из них будет самым быстрым?

Share
  1. «Цикл» — это просто имя, данное while (have_posts()): the_post(); циклу, используемому для перебора массива сообщений, возвращаемых WP_Query() . Другая функция, используемая для запроса сообщений, — это функция get_posts(), которая возвращает простой (нерасширенный) массив, который вы можете пройти с помощью foreach цикла.

    Я не думаю, что это имеет большое значение; однако, если вы придираетесь, этот get_posts() метод немного быстрее и менее требователен к памяти, поскольку он не вызывается setup_postdata() (который заполняет теги шаблона и т. д.) для каждого сообщения, через которое он проходит.

    В любом случае, вам, вероятно, не хватит памяти на некоторых настройках с тысячами постов… В этом случае убедитесь, что вы создали запасные варианты.

    • 0
    • ааа… как я могу явно освободить память после завершения данного поста?

      • 0
    • Глядя на API кодекса, кажется, что есть «смещение» и «номерные сообщения». Я могу использовать это, чтобы пройти только 100 за раз, верно? Если да, то это решит проблему с памятью за счет сборки мусора? Или что-то кешируется в памяти :/?

      • 0
    • Честно говоря, я не совсем уверен. Снимите все локальные переменные, которые вы используете, прежде чем переходить к следующему сообщению. Звоните ini_set('max_execution_time', $somehugenumber); перед началом. И включите какой-нибудь индикатор прогресса, чтобы препятствовать прерыванию пользователя. Или разбейте свою задачу на куски и запустите ее как запланированные события cron.

      • 0
    • Да, вы можете использовать «смещение», чтобы просматривать сообщения частями разумного размера. Таким образом, вы только извлекаете в память массив указанного размера. Массив get_posts возвращает все столбцы в wp_posts таблице, поэтому обращение get_posts('numberposts=-1') к сайту с 10 000 сообщений загружает в память массив, включающий полное содержимое всех 10 000 сообщений. Вот бы проблема с памятью…

      • 0
    • @Thirlan: Многие функции, которые что-то делают с сообщением, будут вызывать get_post(), что добавит сообщение в кеш. Таким образом, даже если вы выполняете несколько запросов к базе данных для одного HTTP-запроса, не вся память будет восстановлена. Я рекомендую вам делать это с несколькими запросами (через Ajax, с полосой прогресса для обратной связи?), где каждый запрос обрабатывает несколько сообщений.

      • 0
  2. «Цикл» — это просто имя, применяемое к циклу foreach, применяемому к объекту WP_Query. Так что вам нужны оба. Обычно цикл также включает the_post(), так что вы можете использовать теги шаблона.

    Хотя есть и другой вариант, который может быть быстрее. В зависимости от того, что вам нужно сделать, вы можете сделать прямой запрос к базе данных, чтобы получить только те поля, которые вы хотите отредактировать. Но поскольку вам также нужны категории и метатеги, это будет сложное соединение. Для упрощения обновлений и обратной совместимости вы также можете использовать обычный файл WP_Query.

    • 0

Оставить ответ

You must login to add an answer.