Может кто-нибудь объяснить немного о кешировании динамических страниц PHP? - PullRequest
2 голосов
/ 19 мая 2009

Мне было интересно узнать о кешировании динамических страниц PHP. Это действительно о предварительной компиляции PHP-кода и его сохранении в байт-коде? Нечто похожее на Python .pyc, который является более скомпилированной и готовой к выполнению версией, и поэтому, если система увидит, что файл .pyc новее, чем файл .py, она не потрудится перекомпилироваться в файл .py .

Так кешируется ли PHP в основном по этому поводу? Может кто-нибудь предложить немного больше информации по этому поводу?

Ответы [ 4 ]

3 голосов
/ 19 мая 2009

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

Если вы говорите о кешировании данных на самой странице, то это совсем другое.

Посмотрите на Альтернативный PHP Cache для получения дополнительной информации о кэшировании кода операции.

2 голосов
/ 19 мая 2009

То, что вы описываете, это PHP-ускоритель , и они делают именно то, что вы сказали; хранить кешированный, скомпилированный байт-код, чтобы для нескольких выполнений одного и того же скрипта требовалась только одна компиляция.

Также возможно кэшировать результаты выполнения скрипта PHP. Обычно для этого требуется хотя бы небольшая логика, поскольку содержимое страницы могло измениться с момента ее кэширования. Например, вы можете взглянуть на общую функцию кэширования , предоставляемую CodeIgniter .

1 голос
/ 19 мая 2009

Ответ Питера Д. хорошо описывает кэширование кода операции. Это может сэкономить вам более 50% времени генерации страниц (субъективно), если ваши страницы просты!

Другое кэширование, о котором вы хотите знать, - это кэширование данных. Это может быть кэширование наборов результатов базы данных, ответа веб-службы, фрагментов HTML или даже целых страниц!

Простой «пример» должен иллюстрировать:

    $cache = new Cache();
    $dataset;

    if (!$dataset == $cache->get('expensiveDataset')){

      //run code to fetch dataset from database
      $dataset = expensiveOperation();
      $cache->set('expensiveDataset', $dataset);

    }
echo $dataset; //do something with the data

Существуют библиотеки, которые помогут с кэшированием на уровне объектов, функций и страниц. Компонент Zend Framework Zend_Cache - это пища для размышлений и отличная реализация, если вам нравится то, что вы видите.

0 голосов
/ 19 мая 2009

На самом деле существует несколько различных форм кэширования. То, на что вы ссылаетесь, обрабатывается такими пакетами, как eAccelerator , MMCache и т. Д.

В то время как это поможет некоторым, где вы действительно получите повышение производительности, в действительности кеширование выходных данных HTML, где это применимо, или в кэшировании наборов результатов БД для повторяющихся запросов (что-то вроде memcache ).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...