PHP環境の高速化 Zend_Optimizer eAccelerator
PHPで高速化といえば、「eaccelerator」と「zend_optimizer」が有名だが、
CentOS5.2で確認した結果、eacceleratorのみの使用が一番速かった。
eaccelerator+zend_optimizerは逆に遅くなったので注意が必要!
なので「eaccelerator」だけでOK♪
PHPで高速化といえば、「eaccelerator」と「zend_optimizer」が有名だが、
CentOS5.2で確認した結果、eacceleratorのみの使用が一番速かった。
eaccelerator+zend_optimizerは逆に遅くなったので注意が必要!
なので「eaccelerator」だけでOK♪
前回はFirebugについて書いたのでIEにも同じようなのがないかなぁと
思っている人もいると思います?
IEではInternet Explorer Developer Toolbarというのがあり
同じようなデバッグ環境がつくれます♪
もう一つ似たようなものでDebugBarというのもあります。
DebugBarは、個人利用か学術目的での利用は無償なのでregstするところで
「Private User」でクリックすると60日指定が解除されます。
もちろん、設定で日本語表記になりますよん!
下の記事でも少し出てきたYahooが出してるYSlowについてカキカキ
サイトを調査開発するときにも御世話になってるFirefox用アドオンのFirebug
こやつで開いたサイトの構成を簡単に見れるのだが、これプラスYSlowでサイトの健全性?調査が
出来るようになる
調査項目以下
評価はA~F
そんな中に「Gzip Components」という項目があり、自分のサイトが「E」となってしまい
mod_deflateになったしだい(苦笑)
他のサイト調査にも便利なのでおススメ度88%!
Apacheでは結構、昔からコンテンツの圧縮が可能だったが、
久しぶりに設定したのを忘れないように覚書!
今回はApache2.2系に設定
そもそもgzipでの圧縮のメリット、デメリットは?
■メリット
・ネットワークトラフック軽減
・ファイル減による通信速度向上
・トラフックの低下に伴うネットワークアクセスに使用されていたサーバーCPU使用量が軽減
■デメリット
・圧縮の処理為にタイムロス
・圧縮の処理為、サーバーCPU負荷増
・解凍の処理為、クライアントCPU負荷増
・HTTP1.1以上の通信が必要
・圧縮によりProxyサーバーなどへの影響
こんなもんでしょうか。
圧縮はサーバーマシンもクライアントマシンもスペックが上がってきている為、
問題(サーバーサイドは確認してくださいね。)はないでしょうし、
ネットワーク負荷も下がれば公共に対しても良いことしているので
速度Upと一日一善?ってことでやりましょう。
まずは「mod_deflate.so」をconfファイルに設定し以下の記述を追加してください。
#
# Deflate gzipにてコンテンツ圧縮
#
#==============================================
#ディレクティブは zlib が一度に圧縮する塊の大きさをバイト単位で指定します。
#==============================================
DeflateBufferSize 8096
#==============================================
#ディレクティブは 圧縮の程度を設定します。大きな値では、
#より圧縮が行なわれますが、 CPU 資源を消費します。
#値は 1 (低圧縮) から 9 (高圧縮) です。
#==============================================
DeflateCompressionLevel 9
#==============================================
#圧縮比に関するメモがリクエストに付加されることを指定します。
#メモ (note) の名前はディレクティブに指定された値です。
#メモはアクセスログに 値を記録し、統計を取る目的にも使えます。
#確認できたらコメントしておくほうがパフォーマンスによろしい
#==============================================
#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
#CustomLog /hoge/logs/deflate_log deflate
#==============================================
#zlib が圧縮に使うメモリのレベルを設定します (1 から 9 の間の値)。
#(訳注: 2 を底とする対数の値になります。 8 程度が良いでしょう。)
#==============================================
DeflateMemLevel 8
#==============================================
#zlib の圧縮用ウィンドウ (訳注: zlib で使用される履歴バッファ) の大きさを指
#定します (1 から 15 の間の値)。
# 一般的に大きなウィンドウサイズを使用すると圧縮率が向上します。
# (訳注: 2 を底とする対数の値になります。 8 から 15 にするのが良いでしょう。)
#==============================================
DeflateWindowSize 15
#==============================================
#Output Compression
#圧縮機能は DEFLATEフィルタ により実装されています。
#以下のディレクティブはそのディレクティブのある コンテナ中のドキュメントを
#圧縮するようにします:
#上位Pathより機能を有効にする
#==============================================
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
#SetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
#通常、特定のMIMEタイプについてのみ圧縮したいのであれば、
#AddOutputFilterByType ディレクティブを使用します。
#次に Apache のドキュメントの html ファイルのみの圧縮を有効にする例を示します。
#AddOutputFilterByType DEFLATE text/html text/plain text/xml #連続指定可
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rdf+xml
注意!Win版では以下をコメント!Proxyなどバッティングは調査が必要
「Header append Vary User-Agent env=!dont-vary」
こんな感じであとはYSlowを使って確認してみましょう!
数年前から、Ajaxなどが出てきてJavaScriptをいじる機会が増えてきた。
昔はVBAライクな記述しかしなかったのに、今じゃクラス化しバンバンのオブジェクト思考なScriptが
ちまたに溢れ、拝借して活用させてもらっている。
しかし、この言語は本当に追っかけるのが大変!(苦笑)
C#やJava、C++などはプロパティやメソッドは決まった法則で宣言してから
使用可能になるが、JavaScriptといったら好き勝手に動的に?プロパティやメソッドを追加できるし
prototypeとかいって拡張を促すメソッド(便利なのだが)が初めから存在し
時として永久的に再帰的な動きを繰り返す・・・
(余談、普通は使用しないがC#などもシリアル化した情報からクラスを動的に拡張することも出来る)
(XML通信で、SOAPなどがシリアル化、逆シリアル化の考えで動いている)
また、既存のクラスもこやつのおかげで勝手に拡張されて、知らない間に継承(拡張)されていたりする。
「String.prototype.hoge = function{};」などとして
せめて「partial」するぞ!ってぐらいちゃんと書いてよ(笑)
特に記述方法が宣言もくそもなく、記述した次の瞬間からそのプロパティやメソッドは使えてしまう・・・
もちろん変数に型など指定することはない・・・しまいには文字列すらeval()などでシリアル化から
メソッドなど生成するしまつ・・・
また、確実に「これだ」っていうデバッグ方法が無く最終的にはEdit君とニラメッコしアラートやログ吐きで
匍匐前進するしかないのが、さらに難易度を加速させている。
こやつを使いこなせればオブジェクト思考はマスターか(笑)
でもC++はクラスの多重継承が出来るので、こやつの方が頭痛いかも(苦笑)
基本的にクラスの多重継承は使ってはいけません!!
あ~