Я слышал о двух методах кэширования для кода PHP:
Когда PHP-скрипт генерирует выходные данные, он хранит его в локальных файлах. Когда скрипт вызывается снова, проверьте, существует ли файл с предыдущим выходом, и если true возвращает содержимое этого файла. В основном это делается с игрой вокруг «выходного буфера». Что-то вроде этого описано в этой статье.
Использование своего рода плагин кэширования кода операции, где скомпилированный PHP-код хранится в памяти. Самым популярным из них является APC, также eAccelerator.
Теперь вопрос в том, имеет ли смысл использовать оба метода или просто использовать один из них. Я думаю, что первый метод является немного сложным и трудоемким в реализации, когда второй кажется простым, когда вам просто нужно установить модуль.
Я использую PHP 5.3 (PHP-FPM) на Ubuntu / Debian.
Кстати, существуют ли какие-либо другие методы кэширования PHP-кода или вывода, о чем я здесь не упоминал? Стоит ли их рассматривать?
У вас всегда должен быть кеш-код операции, такой как APC. Его цель – ускорить синтаксический анализ вашего кода и будет добавлена в PHP в будущей версии. На данный момент это простая установка на любом сервере и не требует, чтобы вы записывали или меняли какой-либо код.
Однако кеширование кодов операций не делает ничего, чтобы ускорить фактическое выполнение вашего кода. Ваши узкие места обычно занимают время, разговаривая с базами данных или читайте на / с диска. Кэширование вывода вашей программы позволяет избежать ненужного использования ресурсов и может ускорить ответы на порядок.
Вы можете выполнять кэширование вывода различными способами в разных местах вашего стека. Первое, что вы можете сделать, это ваш собственный код, как вы сказали, путем буферизации вывода, записи его в файл и чтения из этого файла при последующих запросах.
Тем не менее это все равно требует выполнения вашего PHP-кода для каждого запроса. Вы также можете кэшировать вывод на уровне веб-сервера, чтобы пропустить это. Создание набора правил mod_rewrite позволит Apache обслуживать статические файлы вместо кода PHP, когда они существуют, но вам придется восстанавливать кешированные версии вручную или с запланированной задачей, так как ваш PHP-код не будет работать каждый запрос для этого.
Вы также можете использовать прокси-сервер перед вашим веб-сервером и использовать его для кэширования вывода. Лак – популярный выбор в наши дни и может служить в сотни раз больше запросов в секунду с кешированием, чем Apache, запускающий ваш PHP-скрипт на том же сервере. Кэш создается и настраивается на уровне прокси-сервера, поэтому, когда он истекает, запрос переходит к вашему скрипту, который работает, как обычно, для создания новой версии страницы.
Вы знаете, для меня, optcache, filecache .. и т. Д., Только для сокращения запросов к базе данных. Они не могут ускорить ваш код. Однако они улучшают загрузку страницы, используя кеш, чтобы обслуживать ваших посетителей.
Со мной APC достаточно хорош для VPS или выделенного сервера, когда мне нужно кэшировать виджеты, $ object для сохранения mySQL Server.
Если у меня больше двух серверов, мне нравится использовать Memcache , они хорошо используют память для кэширования. Однако это зависит от вас, не все, как memcached, и не все, как APC.
Для кэширования всей веб-страницы я запускал много wordpress, и я использовал APC, Memcache, Filecache на некоторых плагинах кэша, таких как W3Total Cache. И я вижу (мой собственный exp): Filecache хорош для кэширования всего сайта, кеш памяти хорош для кэширования $ object
Filecache увеличит ваш процессор, если ваш жесткий диск будет медленным, а кеш памяти ужасен, если на вашем VPS недостаточно памяти.
SSD HDD будет очень хорошей скоростью для чтения / записи файла, но память всегда быстрее. Тем не менее, человек не может видеть, в чем разница между этими скоростями. Вы выбираете только одну базу методов для своего проекта и вашего сервера (ОЗУ, HDD) или используете ли вы общий веб-хостинг?
Если я нахожусь на общем хостинге без разрешения root, без php.ini, мне нравится использовать phpFastCache , это простой метод кэширования файлов с набором, get, stats, delete only.
В дополнение, мне нравится использовать .htaccess для кэширования статических файлов, таких как изображения, js, css или заголовки html. Они помогут посетителям ускорить вашу страницу и сохранить пропускную способность вашего сервера.
И если вы можете использовать .htaccess для перенаправления на статический кеш .html, если вы кешируете всю страницу, это отличная вещь.
В будущем APC или некоторые Optcache будут связаны с PHP-версией, но я уверен, что весь кеш не ускорит ваш код, они используют:
и т.д…
Много раз, когда дело доходит до веб-приложений PHP, база данных является узким местом. Таким образом, одна из лучших вещей, которую вы можете сделать, – использовать memcached для кэширования результатов в памяти. Вы также можете использовать что-то вроде xhprof, чтобы профилировать свой код и действительно набирать то, что занимает больше всего времени.
Да, это два разных метода кеширования, и вы правильно их поняли.
но остерегайтесь 1):
1.) Сценарий кэширования, сгенерированный на выходе в файлы или прокси, может создавать проблемы, если контент быстро изменяется.
2.) x-cache существует и легко устанавливается на ubuntu.
привет, / t
Я не знаю, будет ли это действительно работать, но я столкнулся с проблемой производительности с PHP-скриптом, который у меня был. У меня есть текстовый файл, в котором хранятся данные как заголовок и вкладка URL, разделенные каждой записью, разделенной новой строкой. Мой скрипт захватывает файл по каждому URL-адресу и сохраняет его в свою папку.
Затем у меня есть другая страница, на самом деле отображающая локальные файлы (в данном случае картинки), и я использую preg_replace()
для изменения вывода каждой строки из удаленного URL- preg_replace()
в относительный, чтобы он мог отображаться сервером. Мой разделенный вкладкой файл теперь превышает 1 МБ, и для выполнения preg_replace()
требуется несколько SECONDS, поэтому я решил изучить кэширование вывода. Я не мог найти ничего определенного, поэтому решил, что я попробую сам по себе, и вот что я придумал:
Когда я запрашиваю страницу для просмотра содержимого локально, я пытаюсь прочитать ее из переменной в глобальной области. Если это пусто, возможно, это приложение еще не запущено, и это глобальное значение необходимо заполнить. Если он пуст, прочитайте из выходного файла (простой html-файл, который буквально показывает все для вывода) и сохраните содержимое в глобальной переменной, а затем отобразите вывод из глобальной.
Теперь, когда скрипт запускает обновление файла, разделенного вкладкой, он обновляет выходной файл и глобальную переменную. Таким образом, часть скрипта, который фактически выполняет работу, которая работает медленно, запускается только при обновлении данных.
Теперь я еще не пробовал, но теоретически это должно улучшить мою производительность, хотя на самом деле все еще выполняется скрипт, но данные никогда не будут устаревшими, и я должен получить гораздо лучшее время загрузки.
Надеюсь это поможет.