2008年12月18日木曜日

PHPでアクセラレータ

仕事でeacceleratorを使うことがあったのでメモ。
(Linux+PHP5.2.3)

PHP5からはAPCかeacceleratorが有名なアクセラレーターです。
PHPの中間コードをキャッシュさせて、実行速度を速める効果が期待できる。とりあえず使って損はないはず。


まずココからeacceleratorをダウンロード。(2008.03.28時点での最新は0.9.5.2)

1)展開
$ tar jxvf eaccelerator-0.9.5.2.tar.bz2

2)移動
$ cd eaccelerator-0.9.5.2

3)phpize
$ phpize

4)こんふぃぎゅあー
$ ./configure --enable-eaccelerator=shared --with-php-config=/path/to/php-config

5)いんすとーる
# make && make install


次にphp.iniの設定(環境に合わせて書き換え)
[eaccelerator]
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "/tmp/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm"
eaccelerator.sessions = "shm"
eaccelerator.content = "shm"
eaccelerator.allowed_admin_path = "/usr/local/apache2/htdocs/control.php"

大事な項目は
zend_extension = "/path/to/eaccelerator.so"
shm_size = 使用する共有メモリのサイズ。単位はMB。
cache_dir = ディスクキャッシュの保存ディレクトリ。
enable = 1で有効。0は無効。
check_mtime = ファイルのタイムスタンプをチェックするかどうか。チェックしなければ、速くなるがファイルを修正しても反映されない。
keys/sessions/content = キャシュの保存させる種類。shmは共有メモリ(shm_sizeやshm_maxを超えたらディスクに保存)。shm_and_diskはメモリとディスク。shm_onlyはメモリにも保存。disk_onlyはディスクののみ。noneは保存しない(キャッシュしない)。

ぐらいです。特にshm_sizeは、色々試してみると良いです。
※bz2ファイルを展開したディレクトリにeaccelerator.iniというサンプルファイルがあるので、参考にすると良いかも。

→cache_dirで指定したディレクトリを作成し、chmod でapache実行ユーザーが読み書きできるように変更しておく。
→次に、control.phpというファイルをドキュメントルート以下においてキャッシュの使用状況などを調べてみる。

基本的にデフォルトの設定で十分な効果が得られるはず。

ここにもっと詳しい説明が書かれてありました。
今度、APCについて書こうと思います。

IEがAjaxをキャッシュさせrてしまう

すでに多くのWEBで取り上げられていることですが、
IEでAjaxを利用したページを表示するとキャッシュが効いてしまい、データが更新されない件について。

対策1:POSTメソッドで回避
対策2:GETメソッドの取得URLにユニークなパラメータを付ける(タイムスタンプなど)
var  date = new Date();
var timestamp = date.getTime();
xmlHttpRequestObject.open("GET", "xxxx.php?time=" + timestamp, true);
で対応できます。

ウヒヒ。

ブログ開設

どうも、ブログ開設しました!というか引越ししました。

アメブロ使ってたけど
・表示が重い
・プログラムコードを書くと読みずらい
・余計なリンクが多すぎる
などの理由でこっちに引越しです。

アメブロの過去の記事、何とかこっちへ移したいのだが
コピペするしかないのかな、、、。だりぃ、、。