Как увеличить быстродействие *AMP сервера за счет использования `скомпилированных` сценариев
Ожидает приглашения
Статья описывает, как автоматизировать процесс генерации `скомпилированных` сценариев.
Нам понадобится экспериментальная версия `компилятора` php сценариев — bcompiler. Скачать библиотеку здесь: bcompiler(win32 0.14s) (Работала вместе с Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4)
Используя функцию (getCacheFileName), единственным параметром которой является имя файла, который необходимо подключить к проекту. Функция по входному параметру строит уникальный идентификатор, используя имя файла и время последнего его изменения, и проверяет его наличие в папке `скомпилированных` сценариев, если такого нет, то `компилирует` файл и сохраняется, в результате на выходе имеем имя скомпилированного файла, который можно подключить так же свободно как и обычный сценарий php, используя include.
Повышение быстродействия зависит от сложности кода php и может быть до 20%%.
Далее пример..
Содержимое каталога:
Файл index.php
Файл inc.php
Если я смог помочь хотя бы одному человеку, значит день прожит не зря.
Нам понадобится экспериментальная версия `компилятора` php сценариев — bcompiler. Скачать библиотеку здесь: bcompiler(win32 0.14s) (Работала вместе с Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4)
Используя функцию (getCacheFileName), единственным параметром которой является имя файла, который необходимо подключить к проекту. Функция по входному параметру строит уникальный идентификатор, используя имя файла и время последнего его изменения, и проверяет его наличие в папке `скомпилированных` сценариев, если такого нет, то `компилирует` файл и сохраняется, в результате на выходе имеем имя скомпилированного файла, который можно подключить так же свободно как и обычный сценарий php, используя include.
Повышение быстродействия зависит от сложности кода php и может быть до 20%%.
Далее пример..
Содержимое каталога:
- dir cache
- index.php
- inc.php
Файл index.php
function getCacheFileName($strFileNameInc){
// папка для Cache файлов
$strFolderCache = 'cache/';
// время изменения файла
$intFileTime = filemtime($strFileNameInc);
// Cache имя файла
$strFileNameCache = md5($strFileNameInc.$intFileTime);
// Путь к файлу
$strFilePathCache = $strFolderCache.$strFileNameCache.'.phb';
// Если нет откомпилированного файла
if(!file_exists($strFilePathCache)){
// Компиляция
{
// http://ru.php.net/manual/en/function.bcompiler-write-file.php
$fh = fopen($strFilePathCache, 'w');
bcompiler_write_header($fh);
bcompiler_write_file($fh, $strFileNameInc);
bcompiler_write_footer($fh);
fclose($fh);
}
}
return $strFilePathCache;
}
include getCacheFileName('inc.php');
Файл inc.php
phpinfo();
Если я смог помочь хотя бы одному человеку, значит день прожит не зря.