Intereting Posts
Учебники для передачи данных значения в электронную почту с помощью PHP Может кто-нибудь объяснить эту строку кода, пожалуйста? (Операторы логики и присваивания) PHP: Самый простой способ удалить папку (включая ее содержимое) Как установить глобальную переменную, доступную во всем приложении Существуют ли версии PHP или Java на стороне сервера OAuth 2? Как установить gettext на MacOS X Как сделать выпадающее меню с небольшим изображением? вызов функции-члена execute () для не-объекта Может ли HTTP-запрос cURL полностью имитировать запрос на основе браузера? PHP Найти строку в CSV-файле Как я могу запустить mysql-запрос, когда пользователь выбирает новую опцию в поле выбора? PHP удаляет символы после последнего вхождения символа в строку PHP: 500 Ошибка для страницы с ошибкой Laravel – Соглашения о присвоении имен в базе данных, таблицах и столбцах? php force загрузить xml

кэширование статических данных в PHP с помощью opcache

У меня есть ~ 100 строковых переменных, которые должны быть доступны на каждой веб-странице сайта PHP. Данные не будут меняться во время выполнения, хотя в будущем мне понадобятся несколько наборов данных и переключение между тем, которое используется для запроса страницы. Длина строк варьируется от 5 до 600 символов. В настоящее время я включаю файл, который имеет следующие данные:

$someStuff = "abc"; $otherStuff = "def"; // etc 

Я использую opcache. Насколько этот подход будет полезен для opcache?

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

Может быть, функция со статической переменной – хорошая идея? Это то же самое, лучше или хуже, чем поле статического класса?

 function getItem ($name) { static $items = array("someStuff" => "abc"); return $items[$name]; } 

Может быть, функция вместо переменной для каждой строки? Было бы лучше, если бы не все строки использовались для данной страницы (что часто бывает)?

 function someStuff () { return "abc"; } function otherStuff () { return "def"; } 

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

На практике не имеет значения, делаете ли вы что-то вроде:

 $someStuff = "abc"; $otherStuff = "def"; // ... 

или

 $constants = array( 'someStuff' => "abc"; 'otherStuff' = >"def"; // ... ); 

или обертывание этого в статический массив в классе, как и в моем другом ответе. Использование OPcache удалит накладные расходы компиляции и накладные расходы ввода-вывода на дисках. Он будет ставить строковые константы, чтобы они были эффективно статически доступны движку Zend. В версии класса имеется единственная мелкая копия структуры массива, две другие версии будут исполнять ~ 200 операционных кодов для инициализации ~ 100 переменных, и снова фактические интернированные строки эффективно копируются по ссылке. Двигатель обычно интерпретирует 20-40M операционных кодов в секунду, поэтому математика: это не имеет значения.

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

BTW, использование функций беспорядочно, и у них есть стоимость исполнения, а вызовы функций – одна из самых дорогих операций PHP. Ссылки на константы классов довольно много дешевле, но попробуйте сравнить их самостоятельно. Однако, опять же, если вы не ссылаетесь на эти 10k + раз за запрос, вы не заметите существенной разницы. Быть слишком умным, только закончится тем, что вы «стреляете в ногу». 🙂