PHP: Достаточно ли просто установить APC, чтобы включить кэширование, или мне нужно также внести изменения в мой код? - PullRequest
0 голосов
/ 23 января 2012

Очень нубский вопрос здесь.

Я только что установил APC, и когда я захожу на страницу мониторинга (apc.php) и нажимаю на вкладку «Записи системного кэша», я вижу много страниц в этом списке после просмотра моего приложения, размещенного на сервере. Для тестирования я перезапустил apache, и все записи в кэше исчезли, но как только я снова начал просматривать другие страницы своего приложения, они начали появляться в этом списке.

Я не внес никаких изменений в свой код, так что это все, что мне нужно сделать, чтобы включить кэширование optcode? Или необходимы изменения в моем коде?

Я спрашиваю, потому что мое приложение использует codeigniter, и в документах codeigniter есть страница о кэшировании документов, которая описывает изменения кода:

http://codeigniter.com/user_guide/libraries/caching.html

Ответы [ 2 ]

4 голосов
/ 23 января 2012

APC хранит кэши кодов операций при их разборе. Как вы уже обнаружили, кэши сохраняются только до тех пор, пока apache остается открытым. Но когда для запрашиваемой страницы отсутствует кэш кода операции, APC будет хранить его до тех пор, пока Apache продолжает работать. Однако кэши кодов операций - это только полдела. Хотя это правда, что вы получите увеличение скорости от кэширования кода операции, в PHP много времени теряется на ввод / вывод файлов и обмен данными с сокетами (т. Е. Запросы к базе данных). Если вы можете быть уверены, что ваш сценарий является единственным ресурсом, который будет изменять базу данных или файл, вы можете безопасно кэшировать результаты запросов к базе данных или содержимое файла, чтобы каждый запрос не затрагивал файловую систему или уровень базы данных. Логика для этого использует некоторые функции APC :

if(apc_exists('some_database_value')) {
    $value = apc_fetch('some_database_value');
} else {
    //Query db for value, store in $value
    apc_store('some_database_value', $value);
}

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

1 голос
/ 23 января 2012

Нет, APC не требует никаких изменений кода, чтобы ускорить фактическое выполнение кода; для получения дополнительной информации см., например, этот ответ

С APC вы сначала получаете кэш кода операции - для этой части у вас есть нечего изменить в своем коде: просто установите расширение и включите его.

Кэш кода операции обычно ускоряет работу: он предотвращает PHP сценарии от компиляции снова и снова, сохраняя коды операций - Результат компиляции PHP-файлов - в памяти.

...