Я новичок в PHP и хочу попробовать кеширование (впервые), поэтому я делаю сайт, и на нем есть:

  • динамическая домашняя страница
  • динамическая страница портфолио
  • динамическая страница контактов
  • статика о странице
  • статическая страница администратора

Поэтому я прочитал руководство по кешированию и пытаюсь создать свою собственную систему кеширования:

Используя файловый кеш на основе запрашиваемой страницы, при запросе страницы система кеширования проверяет, есть ли кеш в cache directory, если еще нет файла кеша, а затем записывает весь вывод (html) из сценария php (в этот случай выводится из output buffer), и если есть файл кеша, который соответствует определенному идентификатору (на основе URI), тогда просто include_once() файл html.

Затем я прочитал в CodeIgniter (я делаю этот веб-сайт с помощью CI) говорит, что есть APC для кеширования, затем я снова прочитал об APC, то, что я прочитал об APC, это то, что он кэширует результаты БД, но теперь я не понимаю, что мне использовать.

Что я получил до сих пор:

  • кеширование файлов, вероятно, будет медленнее, если будет много запросов (я не знаю, правда это или нет, но я читал его где-то в поисковой системе)
  • APC быстрый

Но я все еще не понимаю, что мне следует использовать, я использую общий хостинг

0
mohur 24 Май 2013 в 19:08

1 ответ

Лучший ответ

Уровни кеширования, наиболее актуальные в приложении PHP:

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

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

  • Кэширование запросов . Если ваш сценарий обращается к большому количеству данных, которые не меняются очень часто или в которых допустима некоторая задержка между обновлениями и видимостью этих обновлений, кэширование результатов из сложного < / em> запросы полезны. Собственное PHP-решение, построенное на APC, приемлемо и выгодно на этом уровне. Но решение на уровне базы данных здесь также уместно, и часто более уместно .

  • Кэширование вывода . Если ваша страница в значительной степени детерминирована и / или допустима задержка, применимая к кешированию запросов , вы можете кэшировать весь вывод скрипта с помощью буферизации вывода. и APC. Домашнее PHP-решение, построенное на APC, здесь приемлемо, но, как правило, не обязательно. Если страница статическая, вы, вероятно, не экономите на повторных вычислениях. А если он динамический, обычно все равно предпочтительнее просто повторно отрисовать страницу.

В выделенной или виртуальной среде вам потребуется установить APC (или что-то подобное) самостоятельно. Но в среде общего хостинга очень вероятно, что APC установлен. А если бы его не было, вы все равно не смогли бы установить его самостоятельно.

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

1
svidgen 24 Май 2013 в 19:30
Привет, спасибо за ваш ответ, я только что проверил свой общий хост и подтверждаю, что на нем не установлен APC :( так что, возможно, я думаю вернуться к простому кэшированию файлов, которое я сделал (в котором хранятся выходные данные (html ) из output buffer) что вы думаете об этом? Следует ли мне его кэшировать? потому что страница портфолио получит много изображений URI из БД и отобразит их в <img src="" />
 – 
mohur
24 Май 2013 в 19:36
Практически невозможно дать разумную рекомендацию с таким небольшим количеством информации. Я бы сказал, не оптимизируйте преждевременно. Если вы начнете замечать проблемы с производительностью, первым делом вам следует отказаться от виртуального хостинга!
 – 
svidgen
24 Май 2013 в 19:39
Так что пока я не должен кэшировать это, верно? а если есть проблема, то я просто перенесу виртуальный хостинг? Я имею в виду, что теперь я понял, даже если я реализую кеширование, это не сильно повлияет, потому что на виртуальном хостинге весь веб-сайт находится на одном сервере, верно? (то есть другой пользователь на общем хостинге получил тяжелую DOS, тогда сервер будет перегружен, и мое кеширование даже не будет работать) извините за длинный вопрос из-за моего любопытства: D
 – 
mohur
24 Май 2013 в 19:47
Вы, безусловно, можете выполнить кэширование запроса или вывода, если конкретный запрос выполняется долго. Но без механизма кэширования в памяти вы кешируете на диск. Таким образом, выигрыш уменьшается из-за задержки поиска, которая может быть непропорционально высокой по сравнению с трафиком на общих хостах.
 – 
svidgen
24 Май 2013 в 20:06
Дело в том, что в общей среде вы, вероятно, захотите кэшировать только те запросы, которые уже находятся на грани приемлемости для времени выполнения. Для поддержки большей нагрузки или для любого действительно продвинутого кэширования вам необходимо надежное кэширование в памяти , что часто означает виртуальный или выделенный хостинг ... и, возможно, еще какое-то конкретное профессиональное руководство.
 – 
svidgen
24 Май 2013 в 20:14