Большой RSS-канал. Как избежать замедления сервера при получении?
Я добавил канал RSS в магазине Zen-Cart, PHP 5.2, apache2. В магазине около 25.000 товаров с их названием, описанием, ценой, изображением и т. Д.
RSS хранится в кэше, чтобы избежать выполнения запроса каждый раз, но даже в этом случае сервер замедляется при получении RSS, иногда получая пустую страницу из-за превышения максимального времени выполнения (я уже установил 220 секунд).
Есть ли способ лучше справляться с большими RSS-лентами? Я всегда мог разделить его на 2 или 3 канала, но некоторым партнерам требуется один URL канала, чтобы получить все продукты за один раз.
5 ответов
Вы можете установить cron для записи RSS-канала в файловую систему каждые 5, 10, .... минут. Таким образом, файл уже подготовлен и его нужно просто открывать, а не обрабатывать каждый раз, когда он попадает.
Вряд ли вы собираетесь менять корм в течение дня.
Так что просто кеш не достаточно хорош, кешируйте его как статический файл, обновляйте его через crontab ежедневно.
И применяется mod_deflate
лайк
AddOutputFilterByType DEFLATE application/rss+xml
В принципе, не следует добавлять слой php для обслуживания запроса RSS
В идеале, если у вас есть полный контроль над веб-сервером, это было бы идеальное время для использования MEMCACHE...
Кажется, это больше проблема с памятью. Даже если он не рассчитан, при извлечении из кеша он сохраняется в переменной и занимает много памяти.
Напишите статический файл или увеличьте объем памяти вашего сервера.
Нет причин, по которым передача файла из кэша должна занимать сколько-нибудь заметное время на сервере. Что-то не так с вашим кешированием. Или, возможно, вы видите тайм-ауты, когда кэш устарел, и в этом случае вам нужно будет обновлять кэш с помощью обновлений по расписанию, чтобы клиенты никогда не обращались к устаревшему кешу.
В худшем случае кэшируйте его в файловой системе и позвольте Apache использовать его как статическую страницу. Если вы идете по этому пути, обязательно запишите новую версию во временную, а затем переименуйте ее на место (вы не хотите показывать частичное содержимое). В системах POSIX (Unix-like) переименование в том же разделе для замены файла является атомарным.