Импортер CSV для WordPress занимает много времени для завершения.

Вопрос или проблема

В прошлом я создал множество собственных импортёров CSV для WordPress и сталкивался с проблемами, связанными с временем, необходимым для их обработки.

Когда импортёр начинает работать, он изначально импортирует много постов в секунду, но эта скорость постепенно уменьшается, и я пытаюсь выяснить причину этого и есть ли что-то, что я могу сделать, чтобы ускорить процесс.

Некоторые импортёры, которые я создаю, импортируют до 100 тысяч записей.

Вот как они работают:

  1. Загрузить строки из CSV-файла в массив
  2. Получить строку из массива
  3. Создать пост, используя эту строку
  4. Добавить мета-значения к этому посту из строки
  5. Вернуться к пункту #2

В некоторых случаях я замечал, что эти импортёры могут импортировать до 200 записей за несколько секунд, но затем это число падает до 5-10 за несколько секунд.

Кто-нибудь знает, в чём может быть причина этого, и есть ли что-то, что можно сделать?

Это требует некоторых настроек на стороне сервера. В общем, время импорта зависит от числа атрибутов, импортируемых за пост. В частности, это касается обработки медиа-файлов, таких как встроенные изображения в постах, изображение для превью и т.д. В случае https://wordpress.org/plugins/wp-ultimate-csv-importer, у нас есть опция, позволяющая установить количество запросов к серверу для постов, чтобы сбалансировать нагрузку на сервер, использование памяти и время выполнения в пределах максимальных значений в качестве решения.

Ответ или решение

Импорт CSV в WordPress может занять много времени по нескольким причинам, особенно при работе с большим объемом данных, таким как 100k записей. Ваша ситуация, при которой скорость импорта снижается от 200 записей в секунду до 5-10, может быть вызвана рядом факторов, которые можно оптимизировать.

Возможные причины замедления импорта:

  1. Нагрузка на сервер: При массовом импорте сервер может столкнуться с высокой нагрузкой, что приводит к замедлению выполнения скриптов. Размер выполняемых операций и их количество за раз может слишком нагружать сервер.

  2. Обработка метаданных: Чем больше данных вы добавляете в метаданные поста, тем больше времени потребуется для их обработки. Это может включать дополнения, связанные с изображениями, такими как изменение размеров, загрузка медиафайлов и т.д.

  3. Различные запросы к базе данных: Каждый раз, когда вы создаете пост или добавляете метаданные, выполняются новые запросы к базе данных. При большом количестве записей это может вызвать замедление.

  4. Проблемы с памятью: Если ваш сервер имеет ограниченные ресурсы памяти, это также может влиять на скорость выполнения скриптов, особенно во время обработки больших массивов данных.

Рекомендации по ускорению импорта:

  1. Пакетный импорт: Вместо создания и сохранения каждого поста индивидуально, рассмотрите возможность использования пакетного импорта. Например, вы можете загружать по 50 или 100 записей за раз. Это уменьшит количество запросов к базе данных.

  2. Оптимизация базы данных: Убедитесь, что ваша база данных оптимизирована, и настройте её для обработки больших объемов данных. Используйте индексы для ускорения запросов.

  3. Параметры памяти и времени выполнения: Увеличьте лимиты памяти и времени выполнения для ваших PHP-скриптов в php.ini или в конфигурации сервера. Например:

    memory_limit = 256M
    max_execution_time = 300
  4. Использование очередей задач: Рассмотрите возможность использования систем очередей, таких как WP-CLI или специального плагина для импорта, который позволяет выполнять задачи в фоновом режиме, избегая таймаутов.

  5. Избегание чрезмерной обработки: Если ваш импорт включает изображения или медиафайлы, попробуйте минимизировать количество операций, связанных с их загрузкой. Например, сначала импортируйте посты без медиафайлов, а затем добавьте их отдельно.

  6. Профилирование кода: Используйте инструменты профилирования (например, Xdebug или New Relic) для выявления узких мест в вашем коде.

  7. Плагины для импорта: Если вы создаете собственные импортеры, рассмотрите использование проверенного плагина, такого как WP Ultimate CSV Importer, который предоставляет опции для настройки скорости импорта и управления запросами к серверу.

  8. Кэширование: Используйте кэширование на уровне сервера и базы данных, чтобы уменьшить время доступа к часто запрашиваемым данным.

Следуя этим рекомендациям, вы сможете значительно ускорить процесс импорта CSV и улучшить общий опыт работы с большими объемами данных в WordPress. Удачи в оптимизации!

Оцените материал
Добавить комментарий

Капча загружается...