PHPプログラムに関する各種メモ書き:タグ「高速化」での検索

phpの実行時間を計測する

下記の方法がわかりやすくよいです。

$start_time = microtime(true);
echo "開始時間: ".format_microtime($start_time,'Y-m-d H:i:s')."<br>\n";

// ここに計測したい処理を記述

$end_time = microtime(true);
echo "終了時間: ".format_microtime($end_time,'Y-m-d H:i:s')."<br>\n";
$processing_time = $end_time - $start_time;
echo "処理時間:".format_microtime($processing_time)."秒<br>\n";
exit();

function format_microtime ( $time, $format = null ){
  if (is_string($format)) {
    $sec  = (int)$time;
    $msec = (int)(($time - $sec) * 100000);
    $formated = date($format, $sec). '.'. $msec;
  } else {
    $formated = sprintf('%0.5f', $time);
  }
  return $formated;
}

No.859
04/19 11:17

edit

高速化

Smartyキャッシュを削除する

Smartyキャッシュを削除するには clear_cache(); を使用します。

void clear_cache(string template,
                 string cache_id,
                 string compile_id,
                 int expire_time);

Smartyを使用したサイトではSmartyキャッシュを使用することにより劇的に高速化されますが、(テストページや一時的に表示したページの)キャッシュファイルをクリアし忘れると、逆にハードディスクに負荷をかけて動作を遅くするおそれがあります。

古い不要キャッシュの削除は必ず行いましょう。

Smarty Cache時間による自動削除の例

// 7日以上古いキャッシュを削除する
$days = 7;
$time = $days * 24 * 60 * 60;
// 10回に1回実行
if( rand(1,10)==1 ){ $smarty->clear_all_cache($time); }

ファイルを使用せずキャッシュにMySQLを使用する

http://www.smarty.net/docsv2/ja/section.template.cache.handler.func.tpl

No.761
08/23 10:43

edit

Smarty
ファイル
高速化

PHPアクセラレータAPCを導入して、PHPを高速化する。

APCを導入して高速化を図る。今回 Fedora Core5, CentOS5 で実験しました。

【Fedora Core5にAPCをインストール】

■ 1. php-apcをインストール

yum install php-apc

■ 2. /etc/php.ini に設定を追加

extension=apc.so

■ 3. apacheの再起動

apachectl graceful

【Cent OS5にAPCをインストール】

■ 1. php-devel、httpd-devel(apxs)、gcc,、c++、APC をインストール

yum install php-devel

yum install httpd-devel

yum install gcc

yum install gcc-c++

pecl install APC

■ 2. /etc/php.ini に設定を追加

extension=apc.so

■ 3. apacheの再起動

apachectl graceful

APCのオプション(php.iniに記述)

APCの on/off を切り替える(1でon 0でoff)

apc.enabled = 1

CLI(コマンドライン)のPHPでもAPCを有効する

apc.enable_cli = 1

【インストールの確認】

phpinfo.php を実行して APC という項目があることを確認する

実効速度の比較

APCをOFFにした状態ONにした状態それぞれ【ab】(apache bench)を実行する。

ab -n 100 -c 10 http://www.testserver.local/

【ab結果の比較例】

実際には色々な項目を比較して結論を出すのですが、とりあえず「Time Per request」で比較してみると

■ APC無効
Time per request: 269.403 [ms] (mean, across all concurrent requests)
■ APC有効
Time per request: 111.376 [ms] (mean, across all concurrent requests)

となりました。

yumコマンド一発でインストールできることを考えると、インストールしない手はないと思います。

APCの導入はとりあえずここまで。

さらに使いこなすには細かく設定をしましょう。

参考:http://zapanet.info/phpdoc/ref.apc.html

No.483
01/20 13:57

edit

高速化

PEAR Cache_Lite を使ってみる

Cacheクラス PEAR Cache_Lite を使ってみる。

インストールはコマンド一発。簡単。

pear install Cache_Lite

composerコマンドでも入れられます

composer require pear/cache_lite 
 ```

レンタルサーバの場合は
http://pear.php.net/package/Cache_Lite/download
からダウンロード

ソースは下記のような感じ

// クラス読み込み require_once('Cache/Lite.php'); // IDのセット $cache_id = '123456'; // オプション $options = array(

'cacheDir'               => '/tmp/',
'caching'                => 'true',	// キャッシュを有効に
'automaticSerialization' => 'true',	// 配列を保存可能に
'lifeTime'	             => 1800,	// 60*30(生存時間:30分)
'automaticCleaningFactor' => 200,	// 自動で古いファイルを削除(1/200の確率で実行)
'hashedDirectoryLevel'    => 1,		// ディレクトリ階層の深さ(高速になる)

); // オブジェクトのnew $cache=new Cache_Lite($options); // キャッシュデータがあるかどうかの判別 if( $cache_data=$cache->get($cache_id) ){

$buff = $cache_data;

} else{

// キャッシュデータがない。DBからデータを読み込む処理
// データ取得処理ここから
// ……………………… $read_data にデータを入れておく
// データ取得処理ここまで
$buff = $read_data;
$cache->save($buff, $cache_id);

} print_r($buff);


簡単、便利。
古くなったキャッシュファイルも自動で削除してくれるので余計なコーディングをしなくてすみます。

オプションについてのマニュアル:http://pear.plus-server.net/package.caching.cache-lite.cache-lite.cache-lite.html

マニュアル:http://pear.php.net/manual/en/package.caching.cache-lite.php

他のおすすめキャッシュクラスとしては
phpfastcache : https://packagist.org/packages/phpfastcache/phpfastcache    
がおすすめです  



No.334
03/08 20:29

edit

高速化
PEAR