Вопрос или проблема
В прошлом я создал множество собственных импортёров CSV для WordPress и сталкивался с проблемами, связанными с временем, необходимым для их обработки.
Когда импортёр начинает работать, он изначально импортирует много постов в секунду, но эта скорость постепенно уменьшается, и я пытаюсь выяснить причину этого и есть ли что-то, что я могу сделать, чтобы ускорить процесс.
Некоторые импортёры, которые я создаю, импортируют до 100 тысяч записей.
Вот как они работают:
- Загрузить строки из CSV-файла в массив
- Получить строку из массива
- Создать пост, используя эту строку
- Добавить мета-значения к этому посту из строки
- Вернуться к пункту #2
В некоторых случаях я замечал, что эти импортёры могут импортировать до 200 записей за несколько секунд, но затем это число падает до 5-10 за несколько секунд.
Кто-нибудь знает, в чём может быть причина этого, и есть ли что-то, что можно сделать?
Это требует некоторых настроек на стороне сервера. В общем, время импорта зависит от числа атрибутов, импортируемых за пост. В частности, это касается обработки медиа-файлов, таких как встроенные изображения в постах, изображение для превью и т.д. В случае https://wordpress.org/plugins/wp-ultimate-csv-importer, у нас есть опция, позволяющая установить количество запросов к серверу для постов, чтобы сбалансировать нагрузку на сервер, использование памяти и время выполнения в пределах максимальных значений в качестве решения.
Ответ или решение
Импорт CSV в WordPress может занять много времени по нескольким причинам, особенно при работе с большим объемом данных, таким как 100k записей. Ваша ситуация, при которой скорость импорта снижается от 200 записей в секунду до 5-10, может быть вызвана рядом факторов, которые можно оптимизировать.
Возможные причины замедления импорта:
-
Нагрузка на сервер: При массовом импорте сервер может столкнуться с высокой нагрузкой, что приводит к замедлению выполнения скриптов. Размер выполняемых операций и их количество за раз может слишком нагружать сервер.
-
Обработка метаданных: Чем больше данных вы добавляете в метаданные поста, тем больше времени потребуется для их обработки. Это может включать дополнения, связанные с изображениями, такими как изменение размеров, загрузка медиафайлов и т.д.
-
Различные запросы к базе данных: Каждый раз, когда вы создаете пост или добавляете метаданные, выполняются новые запросы к базе данных. При большом количестве записей это может вызвать замедление.
-
Проблемы с памятью: Если ваш сервер имеет ограниченные ресурсы памяти, это также может влиять на скорость выполнения скриптов, особенно во время обработки больших массивов данных.
Рекомендации по ускорению импорта:
-
Пакетный импорт: Вместо создания и сохранения каждого поста индивидуально, рассмотрите возможность использования пакетного импорта. Например, вы можете загружать по 50 или 100 записей за раз. Это уменьшит количество запросов к базе данных.
-
Оптимизация базы данных: Убедитесь, что ваша база данных оптимизирована, и настройте её для обработки больших объемов данных. Используйте индексы для ускорения запросов.
-
Параметры памяти и времени выполнения: Увеличьте лимиты памяти и времени выполнения для ваших PHP-скриптов в
php.ini
или в конфигурации сервера. Например:memory_limit = 256M max_execution_time = 300
-
Использование очередей задач: Рассмотрите возможность использования систем очередей, таких как WP-CLI или специального плагина для импорта, который позволяет выполнять задачи в фоновом режиме, избегая таймаутов.
-
Избегание чрезмерной обработки: Если ваш импорт включает изображения или медиафайлы, попробуйте минимизировать количество операций, связанных с их загрузкой. Например, сначала импортируйте посты без медиафайлов, а затем добавьте их отдельно.
-
Профилирование кода: Используйте инструменты профилирования (например, Xdebug или New Relic) для выявления узких мест в вашем коде.
-
Плагины для импорта: Если вы создаете собственные импортеры, рассмотрите использование проверенного плагина, такого как WP Ultimate CSV Importer, который предоставляет опции для настройки скорости импорта и управления запросами к серверу.
-
Кэширование: Используйте кэширование на уровне сервера и базы данных, чтобы уменьшить время доступа к часто запрашиваемым данным.
Следуя этим рекомендациям, вы сможете значительно ускорить процесс импорта CSV и улучшить общий опыт работы с большими объемами данных в WordPress. Удачи в оптимизации!