PHP ob_start против opcode APC, объясните различия и использование в реальном мире? - PullRequest
7 голосов
/ 02 апреля 2012

Предпосылка: я не пытаюсь изобретать велосипед, я просто пытаюсь понять.

Кэширование вывода может быть легко реализовано:

//GetFromMyCache returns the page if it finds the file otherwise returns FALSE
if( ($page = GetFromMyCache($page_id)) !== FALSE )
{
   echo $page; //sending out page from cache
   exit();
}

//since we reach this point in code, it means page was not in cache
ob_start(); //let's start caching

//we process the page getting data from DB

//saving processed page in cache and flushing it out
echo CachePageAndFlush(ob_get_contents());

хорошо объяснено в другой статье , а также в другом ответе .

Но затем приходит APC (который будет включен в PHP6 по умолчанию).

  1. Является ли APC модулем, который когда-то установлен на сервере, существующий PHP-код будет работать быстрее без изменений ?

    APC автоматический ?

  2. Тогда почему существуют такие функции, как apc_add?

    Как мы кешируем целые страницы с помощью APC?

  3. Когда APC установлен, нужно ли мне делать какое-либо кэширование с моей стороны?

  4. Если APC собирается сэкономить деньги хостинг-провайдеров, почему они не устанавливают его? (Я имею в виду, что они должны участвовать в гонках, чтобы установить его, но я не вижу, чтобы это произошло).

    Есть ли у установки APC недостатки для этих хостинг-провайдеров?

Ответы [ 3 ]

4 голосов
/ 02 апреля 2012

APC - это код операции кеш:

Альтернативный PHP Cache (APC) - это бесплатный и открытый кэш кода операции для PHP.Его цель - предоставить бесплатную, открытую и надежную среду для кэширования и оптимизации промежуточного кода PHP.

Это не то же самое, что кеш шаблонов (что вы демонстрируете), и у него маловлияние на выходную буферизацию .Это не одно и то же.

Кэширование кода операции означает кэширование кода PHP после его интерпретации .Это может быть любой фрагмент кода (не обязательно тот, который выводит HTML).Например, вы можете поместить классы и сам шаблонизатор в кэш кода операции.Это значительно ускорит ваш код, поскольку интерпретатору PHP не нужно снова «интерпретировать» ваш код, он может просто загрузить «интерпретированную» версию из кэша.

Пожалуйста, не путайте буферизацию вывода скеш.Существует много уровней кэширования, например, два наиболее распространенных, с которыми вы, возможно, знакомы.

Кэширование сеанса

Очень простой версией этого файла является файл cookie, в котором хранятся некоторые настройки.,Вы только выполняете код, который «вычисляет» параметры настройки один раз (когда пользователь входит в систему), а для остальной части сеанса вы используете «кэшированные» параметры из файла cookie.

Кэширование обработанного шаблона

Это делается, когда страница должна быть сгенерирована один раз, но меняется не очень часто.Например, страница «Ежедневные события», которая является шаблоном.Вы генерируете это только один раз, а затем обслуживаете «визуализированную» страницу из кэша.

Ни один из них не использует APC

3 голосов
/ 02 апреля 2012

APC заставляет PHP работать быстрее?

Да. В некотором смысле. Хотя выгода сильно отличается.

При использовании APC мне все еще нужно кэшировать визуализированный HTML?

Байт-код НЕ похож на результирующий HTML. Это та же программа, что и обычный PHP-скрипт. Даже с включенным APC PHP должен обрабатывать данные и отображать HTML.

Надеюсь, теперь вы понимаете разницу.

Кэш APC предоставляет и кэш байт-кода и хранилище на основе памяти для хранения пользовательских данных.
Таким образом, вы также можете использовать его для хранения определенных пользователем данных.
И также сохраняйте целые отрендеренные страницы (я не понимаю вашей путаницы здесь - о каком типе данных «page» вы говорите? Разве результат ob не является обычной строкой?).
Однако кэширование получающегося HTML-кода не так просто, как вы себе представляете.

Преждевременная оптимизация - корень всего зла.
Начните оптимизировать свой сайт только тогда, когда у вас есть причина.

почему веб-хостеры ждут установки APC?

Есть несколько причин. Но одного достаточно - кеш байт-кода не принесет никакой пользы обычному уродливому сайту электронной коммерции на базе PHP.

1 голос
/ 02 апреля 2012

APC кэширует байт-коды.PHP превращает исходный код, который вы пишете в них, когда файл запрашивается или включается, а затем избавляется от них.С APC байт-код остается.

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

Используйте APC, если вы хотите, чтобы ваша программа работала быстрее и потребляла меньше ресурсов процессора.Это не влияет на пропускную способность базы данных.

Кэшируйте вывод ob_start, если вы хотите запускать программу время от времени и просто статически обслуживать ее последний вывод.Это экономит пропускную способность базы данных за счет свежести и персонализации информации.

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

Кэшируйте вывод ob_start, если вывыполнить некоторые тяжелые вычисления или получить доступ к данным, и все нормально, что все получают один и тот же не совсем свежий вывод.

...