Webサイト高速化技法(4):難読化のメリット/デメリット
「難読化」という技術、ご存知でしょうか?
元々はソースコードが読める HTML/JavaScript の世界での流用や悪用、著作権被害などを防ぐために記号化し読みづらくすること、というものでした。ですが、最近は難読化したものを読みやすくするもの等も出てきており、あまり流用防止の為に難読化するというものを見なくなり、著名なライブラリが著作権対策の為に施しているもの以外では使われなくなってきたように思います。
難読化には別の使い道が
この難読化ですが、実はパフォーマンスに結構影響します。
- サイズが小さくなることで読み込み速度があがる(数%)
- 変数名が小さくなるのでローディングが速くなる(数%~数10%)
- メモリ使用量が小さくなるのでキャッシュ回数が減り実質速くなる
などでトータル20~30%速くなることもあります。
- サイズが小さくなることで読み込み速度があがる(数%)
これは想像できますね。サイズが小さくなる事は画像なども同じで表示速度に大きく影響します。
- 変数名が小さくなるのでローディングが速くなる(数%~数10%)
これは分かりますでしょうか?実はこれが一番スピードに影響します。
「a」と「b」を比較するのと、
「abcdefghijklmnopqrstuvwxyz」と「abcdefghijklmnopqrstuvwxyz2」を
比較するのは人間の目でも明らかなように、PCでも速度は大きく違います。
これらは初期ローディング時に自動最適化を行い、2回目以降はキャッシュを利用することで速く実行する技術も採用されてますので、2回目以降はそんなに変わらなくなってますが、初回は大きく影響します。
- メモリ使用量が小さくなるのでキャッシュ回数が減り実質速くなる
これはHDDへの1回のアクセスが減るとパフォーマンスに大きく影響します。
以前のブログにも書いてますので参考にしてください。
「CPUとメモリとHDD ~チューニングの前に~」
http://uehama.blogspot.com/2010/02/cpuhdd.html
以上のように、パフォーマンスの面で見るとメリットが大きいです。
しかしデメリットもあります
主に保守性に問題があります。まずデバッグが複雑になり、管理(特に修正)が煩雑になります。
対策としては、プレビューで管理する時はそのままにして、テストから本番に上げるタイミングで関数の中だけを難読化するのがおすすめです。JSファイル全体を難読化してしまうと、バージョン管理が相当むずかしくなります。function 毎に分けて難読化することで、それぞれを管理しやすくなりますし、何かあった時のデバッグもしやすくなります。
難読化はルールさえしっかりして、保守性を保つ事ができれば、やった方が断然オトクです。是非試してみて下さい。
それでは。
2010年9月16日木曜日
2010年2月18日木曜日
CPUとメモリとHDD ~チューニングの前に~
これは私が15年前、サン・マイクロシステムズのSEとしてシステムチューニングのトレーニングをしてた頃から話してる内容です。内容は現代向けに編集してあります。
CPUは脳、ではメモリは? HDDは?
よくCPUを人間でいうところの脳に例える事があります。「演算をする部分=考えるところ」という点では合ってると思います。ではメモリは実社会では何でしょうか?HDDは何でしょうか?記憶を補助するという点はメモ帳や本棚を想像される方もいらっしゃるのではないでしょうか?
それぞれの性能を実社会に変換してみる
まずCPUの性能を見てみます。CPUの性能を見る場合、主にクロック数が取り上げられます。最近はマルチコアやスーパーパイプラインなどの並行処理もありますが、それらは数倍の世界なのでクロック数のみで考えてみます。
インテル Core2 Duo プロセッサー E7500(2.93GHz)
よく見るのはこんな感じでしょうか?2.93GHz というのがここでいうクロック数です。1秒間の間に2.93の1000倍(K)の1000倍(M)の1000倍(G)、命令をこなすことができます。
次にメモリの性能を見てみます。メモリも同じクロック数で表されます。
2GB (2GB×1) 800MHz DDR2-SDRAMメモリ
よくあるのはこんな感じでしょうか?こちらは 800MHz です。これらはバスクロックと直接関係のある数字で、上のCPUにくらべると大体3倍ぐらいちがうでしょうか?まぁこれらもパリティだったり厳密に言うといろいろ処理が入ってくるのですが、単純にここだけに視点を置いてみます。
では、HDDはどうでしょうか?
320GB SATA HDD
よくあるのはこんな感じでしょうか?HDDの場合はクロック数に近い値としては平均シークタイムというのがあります。実際に針が目的の場所へ「移動」し、必要なデータがくるまで円盤を「回転」させるために必要な平均時間です。こちらはmsという単位で大体 6ms といった値が平均的ではないでしょうか?1000分の6秒ですね。
では、これらの値を現実の世界に変換してみましょう。
ここではCPUの1クロックを1秒に変換してみます。そうするとメモリは約3倍ですので3秒に相当します。脳が1秒で判断するところを3秒かかるので、これは「机の上」ぐらいでしょうか?机の上が広い(=メモリ容量が大きい)と、いろんな物が置け、作業が効率的に行えます。
で、ここで問題。
CPU1クロックを1秒とするとHDDの1アクセスはどれくらいになるでしょうか?
1クロックを1秒にするには大体3の1000倍の1000倍の1000倍すれば良いですので、1000分の6秒にそれを掛け算すると、大体18の1000倍の1000倍秒になります。3,600秒で1時間ですからざっと5,000時間。200日!
ざくっと考えても半年以上かかる計算です。
私はこれを「大阪支店まで徒歩で資料とりに行ってこい」と表現しています。
CPUの1クロックを1秒と考えると、パソコンのHDDのインジケーターが1回ぴかっと光った時には大阪支店までの徒歩の旅が繰り広げられているということになります。それは多くの確率で、戻ってきた時には「じゃぁはい、次はこれ」と再度旅が始まります。その間にCPUはいろんな処理をして待ちます。
「やってられない!!」と思いますよね?
そうなんです。ハードディスクへのアクセスはCPUからみると「やってらんねー!!」という処理なんです。本棚なんかじゃないんです。できることなら行きたくないんです。
「やってらんねー!!」を防ぐためには
いつも「マシンが重くて」と愚痴をこぼす人がいますが、大体そういう人は「机の上」(=メモリ)に余裕がなくて「やってらんねー!!」を連発してます。1回のHDDアクセスを減らせばものすごい処理をCPUはこなせます。つまり「机の上」をできるだけ空けることで「やってらんねー!!」を防ぐことができ、たったそれだけでも想像がつかないほどCPUは働く事ができます。
みなさんは1日に1回も使わないようなアプリをメモリに常駐しっぱなしにしている人はいませんか?ちなみに私は Adobe Reader も Skype も Google Desktop も全て使う時に起動させて、メモリには常駐させてません。
今日のひと言:
効率よく仕事をするためにも「机の上」はいつもきれいにしておきましょう。
長くなりましたが、以上です。
おやすみなさい。
CPUは脳、ではメモリは? HDDは?
よくCPUを人間でいうところの脳に例える事があります。「演算をする部分=考えるところ」という点では合ってると思います。ではメモリは実社会では何でしょうか?HDDは何でしょうか?記憶を補助するという点はメモ帳や本棚を想像される方もいらっしゃるのではないでしょうか?
それぞれの性能を実社会に変換してみる
まずCPUの性能を見てみます。CPUの性能を見る場合、主にクロック数が取り上げられます。最近はマルチコアやスーパーパイプラインなどの並行処理もありますが、それらは数倍の世界なのでクロック数のみで考えてみます。
インテル Core2 Duo プロセッサー E7500(2.93GHz)
よく見るのはこんな感じでしょうか?2.93GHz というのがここでいうクロック数です。1秒間の間に2.93の1000倍(K)の1000倍(M)の1000倍(G)、命令をこなすことができます。
次にメモリの性能を見てみます。メモリも同じクロック数で表されます。
2GB (2GB×1) 800MHz DDR2-SDRAMメモリ
よくあるのはこんな感じでしょうか?こちらは 800MHz です。これらはバスクロックと直接関係のある数字で、上のCPUにくらべると大体3倍ぐらいちがうでしょうか?まぁこれらもパリティだったり厳密に言うといろいろ処理が入ってくるのですが、単純にここだけに視点を置いてみます。
では、HDDはどうでしょうか?
320GB SATA HDD
よくあるのはこんな感じでしょうか?HDDの場合はクロック数に近い値としては平均シークタイムというのがあります。実際に針が目的の場所へ「移動」し、必要なデータがくるまで円盤を「回転」させるために必要な平均時間です。こちらはmsという単位で大体 6ms といった値が平均的ではないでしょうか?1000分の6秒ですね。
では、これらの値を現実の世界に変換してみましょう。
ここではCPUの1クロックを1秒に変換してみます。そうするとメモリは約3倍ですので3秒に相当します。脳が1秒で判断するところを3秒かかるので、これは「机の上」ぐらいでしょうか?机の上が広い(=メモリ容量が大きい)と、いろんな物が置け、作業が効率的に行えます。
で、ここで問題。
CPU1クロックを1秒とするとHDDの1アクセスはどれくらいになるでしょうか?
1クロックを1秒にするには大体3の1000倍の1000倍の1000倍すれば良いですので、1000分の6秒にそれを掛け算すると、大体18の1000倍の1000倍秒になります。3,600秒で1時間ですからざっと5,000時間。200日!
ざくっと考えても半年以上かかる計算です。
私はこれを「大阪支店まで徒歩で資料とりに行ってこい」と表現しています。
CPUの1クロックを1秒と考えると、パソコンのHDDのインジケーターが1回ぴかっと光った時には大阪支店までの徒歩の旅が繰り広げられているということになります。それは多くの確率で、戻ってきた時には「じゃぁはい、次はこれ」と再度旅が始まります。その間にCPUはいろんな処理をして待ちます。
「やってられない!!」と思いますよね?
そうなんです。ハードディスクへのアクセスはCPUからみると「やってらんねー!!」という処理なんです。本棚なんかじゃないんです。できることなら行きたくないんです。
「やってらんねー!!」を防ぐためには
いつも「マシンが重くて」と愚痴をこぼす人がいますが、大体そういう人は「机の上」(=メモリ)に余裕がなくて「やってらんねー!!」を連発してます。1回のHDDアクセスを減らせばものすごい処理をCPUはこなせます。つまり「机の上」をできるだけ空けることで「やってらんねー!!」を防ぐことができ、たったそれだけでも想像がつかないほどCPUは働く事ができます。
みなさんは1日に1回も使わないようなアプリをメモリに常駐しっぱなしにしている人はいませんか?ちなみに私は Adobe Reader も Skype も Google Desktop も全て使う時に起動させて、メモリには常駐させてません。
今日のひと言:
効率よく仕事をするためにも「机の上」はいつもきれいにしておきましょう。
長くなりましたが、以上です。
おやすみなさい。
登録:
投稿 (Atom)