PHP: Введение — Manual

Change language: EnglishBrazilian PortugueseChinese (Simplified)FrenchGermanJapaneseRussianSpanishTurkishOther

Submit a Pull Request Report a Bug

Windows Cache Extension для PHP — это кеширующий модуль, позволяющий увеличить скорость работы PHP-приложений на Windows и Windows Server. Как только вы включаете Windows Cache Extension и он загружается движком PHP, приложения начинают получать все его преимущества без необходимости менять их код.

Модуль включает 5 различных типов кешей. Далее рассказывается про назначение и преимущества каждого типа кеша.

  • PHP Opcode Cache — PHP является скриптовым языком, который читает входящий поток данных, содержащий текст и/или инструкции языка и выдаёт новый поток данных, обычно в формате HTML. Т.е. на стороне веб-сервера, PHP читает, разбирает, компилирует и запускает PHP-скрипт каждый раз, когда его запрашивает клиент.

    Чтение, разбор и компиляция создают дополнительную нагрузку на процессорные ядра и файловую систему сервера, что сказывается на конечной производительности приложения. Кеширование байт-кода (опкода) PHP позволяет держать уже скомпилированный код в разделяемой памяти и использовать его при следующих запросах к тому же скрипту.

    Поддержка кеширования опкодов была удалена в Wincache 2.0.0. Так что если она вам нужна, то следует использовать модуль OPcache, который включён в PHP.

  • File Cache — даже если включено кеширование опкодов, PHP всё равно обращается к файлам на файловой системе. Когда PHP-скрипт размещён в удалённой файловой папке, файловые операции значительно снижают производительность. Windows Cache Extension включает файловое кеширование, которое используется для сохранения контента скриптов в разделяемой памяти, что сильно сокращает количество операций доступа к файловой системе для PHP.

  • Resolve File Path Cache — скрипты PHP довольно часто включают или оперируют файлами, используя относительные пути. Каждый такой путь сначала нормализуется PHP до абсолютного пути. Когда приложение использует большое количество файлов и обращается к ним по относительным путям, операции выведения абсолютных путей могут негативно сказаться на производительности. Модуль Windows Cache Extension предоставляет инструмент кеширования Resolve File Path, который используется для сохранения сопоставления относительных и абсолютных файловых путей, позволяя снизить количество операций их выведения.

  • User Cache (доступно с версии 1.1.0) — скрипты PHP могут получить преимущества кеширования в разделяемой памяти посредством API пользовательского кеширования. Объекты и переменные PHP могут быть сохранены в пользовательском кеше и переиспользованы в последующих запросах.

    Это может как повысить производительность приложения, так и разделить данные между несколькими процессами PHP.

  • Session Handler (доступно с версии 1.1.0) — обработчик сессий WinCache может быть использован для сохранения данных сессии в кеше в разделяемой памяти. Это позволяет избежать дисковых операций при записи и чтении данных сессии, что может сильно увеличить производительность, если таких данных много.

add a note

User Contributed Notes

There are no user contributed notes for this page.

Кэширование PHP — Losst

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

Веб-сервер Nginx при правильной настройке может отдавать просто огромное количество страниц мгновенно, чего нельзя сказать про PHP на генерацию страницы может уходить до нескольких секунд. Но PHP тоже можно ускорить с помощью кэширования. В этой статье мы рассмотрим как настраивается кэширование php, каким оно бывает и зачем вообще это нужно. Для примера будем использовать связку php-fpm и Nginx, но информация из статьи подойдет и для других вариантов установки.

Содержание статьи:

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

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

  • Кэширование готовых страниц — страница генерируется php, а потом пользователю отдается готовая страница без обращения к php. Я расскажу как это сделать через fastcgi, но не рекомендую применять такой метод для wordpress или других движков, их лучше кэшировать с помощью специальных плагинов;
  • Кэширование байт кода и инструкций — а это уже интересно, кэшируется не вся страница, а только некоторые инструкции, и куски байт кода, которые не изменяются при вызовах скрипта.
    Перед тем как выполнять скрипт, интерпретатор должен преобразовать его в понятный для него формат, при кэшировании такое преобразование выполняется только первый запуск, а дальше берется версия из кэша;
  • Кэширование сессий — по умолчанию php сохраняет сессии пользователей в файлы и мы можем немного ускорить его работу, если будем сохранять сессии в оперативную память.

Дальше рассмотрим более подробно, как настроить каждый вид кэширования для вашего сервера. Начнем с кэширования opcode php.

Кэширования байткода в PHP

Начиная с PHP 5.5 в интерпретатор языка была добавлена поддержка кэширования байткода из ZendFramework. В новых версиях этот кэш позволяет очень сильно увеличить производительность вашего ресурса, например, есть сведения, что на PHP 7 Wordpres и другие движки работают чуть ли не в два раза быстрее. Перед тем как настраивать кєширование opcode php, нужно установить его пакет:

sudo apt install php-opcache

Или для Red Hat дистрибутивов:

sudo yum install php-opcache

Затем, чтобы включить кэширование нужно добавить несколько строк в php. ini, можно также создать отдельный файл в /etc/php/conf.d/

vi /etc/php.d/opcache.ini

zend_extension=opcache.so;
opcache.error_log=/var/log/php-fpm/opcache-error.log
opcache.enable=1;
opcache.memory_consumption=256;
opcache.interned_strings_buffer=8;
opcache.max_accelerated_files=4000;
opcache.revalidate_freq=180;
opcache.fast_shutdown=0;
opcache.enable_cli=0;
opcache.revalidate_path=0;
opcache.validate_timestamps=2;
opcache.max_file_size=0;
opcache.file_cache= /var/www/losst.pro/opcache;

Рассмотрим что означают эти строки, чтобы вы знали какие значения установить. Первая строка загружает расширение, здесь ничего менять не нужно.

  • opcache.error_log — указывает файл для записи лога ошибок, будет полезно при отладке;
  • opcache.log_verbosity_level — указывает насколько подробным должен быть лог файл, значение от 1 до 4;
  • opcache. enable — включает кэширование;
  • opcache.enable_cli — включает кэширование страниц php для консольной версии;
  • opcache.memory_consumption — количество оперативной памяти для хранения кэша;
  • opcache.max_accelerated_files — число скриптов/файлов, которые нужно кэшировать;
  • opcache.validate_timestamps — проверять время изменения данных в файле скрипта;
  • opcache.revalidate_freq — частота проверки для предыдущего параметра;
  • opcache.revalidate_path — установите в 0 чтобы выполнять проверку при include только первый раз;
  • opcache.enable_file_override — кэширует запросы к атрибутам файлов, например, существование и т д;
  • opcache.blacklist_filename — список файлов, которые не нужно кэшировать;
  • opcache.max_file_size — максимальный размер файла скрипта для кэширования, 0 — не ограниченно;
  • opcache.
    interned_strings_buffer
    — допустимое количество строк в буфере;
  • opcache.fast_shutdown — использовать быстрый способ освобождения памяти.

После сохранения всех настроек вам останется только перезапустить php или ваш веб-сервер:

systemctl restart php-fpm

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

chmod 777 /var/www/losst.pro/opcode.php

Дальше можно открыть скрипт в браузере для просмотра статистики:

http://localhost/opcache.php

Здесь можно видеть подробную статистику по кєширвоанию, настройки и количество занятой памяти.

Хранение сессий в memcached

По умолчанию php хранит сессии в файловой системе, в некоторых случаях, вы можете достаточно сильно ускорить работу php, если перенесете хранение сессий из файлов в оперативную память, например, memcached. Сначала нужно установить memcached и php библиотеку для работы с ней:

sudo apt install memcached php-memcached

Или для систем на базе Red Hat:

sudo yum install memcached php-memcached

Сначала нам нужно настроить memcached, откройте файл /etc/sysconfig/memcached и найдите строку CACHESIZE, здесь нужно указать объем оперативной памяти, которая выделяется под кэш:

vi /etc/sysconfig/memcached

CACHESIZE=256

Дальше осталось указать php использовать memcached для хранения сессий:

vi /etc/php.ini

session.save_handler = memcache
session.save_path = "tcp://localhost:11211"

Осталось перезапустить ваш php интерпретатор:

systemctl restart php-fpm

Если вы хотите проверить все ли правильно кэшируется и есть ли вообще что-либо в кэше, можно использовать phpmemcacheadmin.

Кэширование страниц fastcgi

Я не советую использовать кэширование fastgci для сайтов WordPress, потому что там есть специальные плагины, которые могут точно контролировать кэш, очищать его когда нужно и вовремя обновлять. Но во всех остальных случаях кэш fastcgi может очень сильно ускорить работу сайта. Настраивается он в конфиге, где вы включаете fastgci, например, в конфигурации веб-сервера Nginx. Минимально для настройки кэша fastgci достаточно добавить в блок server такие строки:

vi /etc/nginx/vhosts/site.conf

fastcgi_cache_path /var/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

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

Теперь нужно настроить блок обработки php:

location ~ \.php$ {
fastcgi_pass unix:/var/run/php7-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 60m;
}

Здесь мы обращаемся к уже настроенной зоне памяти MYAPP, а также указываем время жизни кэша в один час. Для проверки кэширования можно посмотреть содержимое папки:

ls -lR /var/nginx/cache/

С помощью таких методов ваши страницы будут загружаться намного быстрее. Если вам понадобится отключить кєширование php для отдельных страниц, то сначала создаем переменную no_cache со значением 0:

set $no_cache 0;

Затем проверяем нужные параметры, и если соответствует, то устанавливаем значение в 1:

if ($request_method = POST)
{
set $no_cache 1;
}

И на завершение передаем значение этой переменной таким директивам, это отключит кэширование когда не нужно:

fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;

Не забудьте перезапустить Nginx перед тем как проверять:

systemctl restart nginx

Выводы

В этой статье мы рассмотрели как настроить кэширование php скриптов, разобрали виды кэширования, кэширование opode php, а также как все это работает. Надеюсь, эта информация была полезной для вас.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Понимание кэширования PHP. Все дело в Кэширующем Ребенке! —


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

Содержание


Что такое PHP?

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

Что такое кэширование?

Веб-страницы загружаются быстрее за счет сохранения части или всей страницы в памяти, в файле на веб-сервере или в сети распространения контента (CDN) вместо ее создания каждый раз, когда кто-то извлекает этот URL-адрес. Это называется кэшированием. Это обеспечивает лучший пользовательский опыт, поскольку пользователям не нужно долго ждать, когда они нажмут на загрузку следующей веб-страницы.

Вы можете кэшировать содержимое, например изображения, HTML и данные. Логично так сделать. Например, нет необходимости извлекать одно и то же изображение 10 раз для 10 разных людей. Вместо этого лучше кэшировать это. Кэш хранит эту веб-страницу со всеми уже имеющимися данными, такими как список имен.

Другим примером является Twitter или новостная лента. Нет необходимости обращаться к одному и тому же новостному сайту или ленте Twitter по 10 раз. Просто сделайте это один раз.

Объяснение тайника с лаком. Если вы новичок в Varnish и хотите узнать больше об этом невероятно быстром инструменте кэширования, то этот пост для вас. Мы поговорим о том, что такое Varnish, как он работает и кому он подходит.

Подробнее

Поваренная книга программиста

Рассмотрим вызов базы данных. Нет смысла читать базу данных 100 раз для 100 человек, которые загружают одни и те же записи данных, например, что-то общее для многих людей, например, цена товара, который вы продвигаете заранее. Вместо этого более эффективно извлекать это значение из кеша.

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

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

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

Кэширование PHP и WordPress

WordPress не запрограммирован на использование кэша PHP. Но вы можете добавить для этого плагины W3 Total Cache или WP Super Cache. Это также поможет ускорить публикацию управления контентом. И любой пользовательский код WordPress, который вы пишете, может использовать кэширование, если вы добавите фреймворк.

Кэширование также работает с виджетами. Виджеты — это предварительно запрограммированные фрагменты кода, которые выполняют некоторые общие функции, например проверку фразы CAPTCHA. Эти виджеты почти всегда написаны на PHP, поскольку WordPress написан на PHP.

Настройка кэша

Теперь, если вы мыслящий человек, а мы полагаем, что так и есть, поскольку все наши клиенты умные люди, то вы можете сказать: «Это не панацея. Откуда он может знать последние 5 заголовков новостей?» не проверяя это. Ответ — нет.

Кэширование контролируется размером и временем. Таким образом, вы можете установить время кэширования на 5 секунд или 5 минут.

Когда время кеша истекает, PHP-код обращается к серверу базы данных или API, чтобы проверить, не изменилось ли что-нибудь.

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

Изоморфное программирование

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

Facebook работает так. Внутренний код выталкивает код JavaScript, который обрабатывает взаимодействие с пользователем. Это делает для очень быстрой веб-страницы. Вы заметите изоморфные страницы, когда посмотрите на Facebook и что-нибудь нажмете: он не переписывает адресную строку в браузере.

Это означает, что он заменяет способ программирования GET и PUT логикой на месте, которая извлекает только то, что изменилось. Вся страница в основном состоит из JavaScript. Посмотрите на код Facebook, и вы увидите, что почти вся страница — это JavaScript.

Заключительный вывод

PHP так же вездесущ, как HTML в 2016 году, и используется практически на всех динамических веб-сайтах, которые мы просматриваем сегодня. Опытные разработчики должны использовать кэширование для повышения производительности PHP.

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

  • Оптимизация производительности
  • Поделиться через фейсбук
  • Поделиться в Твиттере
  • Поделиться на Linkedin
  • Отправить письмо

Томас

Энтузиаст Bash-скриптов, который также может приготовить изумительную лазанью. Если вы не найдете меня в центре обработки данных или в глубоких раздумьях над устранением неполадок с заявками клиентов, что ж… Вероятно, вы недостаточно внимательно ищете!

Подпишитесь на эту ленту и продолжайте играть.
База данных

— методы кэширования php

Привет, на самом деле это скорее информационный запрос.

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

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

Допустим, например, что пользователь попадает на домашнюю страницу, по умолчанию отображаются последние 10 происходящих событий, и если этот пользователь вошел в систему, эти события зависят от местоположения. Можно ли развернуть какую-то систему кэширования при работе с зарегистрированными состояниями и данными, которые часто меняются, в настоящее время система позволяет пользователю «показывать больше событий: это запрос ajax для извлечения дополнительных результатов из БД.

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

Я имею в виду, оно того стоит? есть ли другие ускорители производительности при работе с такими критериями?

Буду очень признателен за любые статьи, советы и информацию по этому поводу!! Пожалуйста, дайте мне знать, если требуется какая-либо другая информация!

  • php
  • база данных
  • кэширование
  • memcached
  • apc
0

Ваши основные решения:

  • файловый кэш
  • memcached/редис
  • БТР

Каждый из них используется для разных целей.

Файловый кэш обычно используется при предварительном рендеринге файлов или их частей. Он используется в шаблонных решениях, частичных представлениях (mvc), CSS-фреймворках. Такие вещи.

Memcached и Redis более или менее равны, за исключением того, что Redis больше ориентирован на noSQL. Они используются для распределенного кеша (несколько серверов, одни и те же кэшированные данные) и для хранения сессий, если у вас есть кластер веб-серверов.

APC хорош для двух целей: кэширования кода операции и кэширования данных. Быстрее, чем memcached, но работает для каждого сервера отдельно.


Итог: в огромном проекте вы будете использовать их все. Каждый для разных задач.

1

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

Затем у вас есть кэширование данных, при котором вы сохраняете переменные или объекты, для получения которых требуется время, как данные, созданные из запросов SQL.

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

Однажды я написал сообщение в блоге о том, как кэшировать вывод:

http://www.spotlesswebdesign.com/blog.php?id=17

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

17

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