【OCN光/ADSL】新規・乗り換え申込み
3.既存メソッドのエイリアスを自作する。自作関数はできるだけ短く、また類推不可能な名称に
先程のページで、JavaScript内の日本語をASCII文字(英数字only)にするために、日本語をString.fromCharCode()メソッドを使って疑似暗号化したのですが、ファイルサイズが増えすぎたことが難点でした。
そこで頻出するString.fromCharCode()メソッドのエイリアス(コピー)を作成して、コンパクトにしてみます。やり方は簡単です。「msg1 = String.fromCharCode(******);msg2 = String.fromCharCode(******);msg3 = String.fromCharCode(******);」とあったとしますと、「s = String.fromCharCode;msg1 = s(******);msg2 = s(******);msg3 = s(******);」とします。
こんな簡単なコピー(代入方法)の仕方で、コピーできてしまうなんて。最初は私もびっくりでしたが、主要なブラウザですべて動きます。チェックしたブラウザは下記の通りです。
Windows |
IE7 RC1 | IE6 | IE5.5 | Firefox 1.5.0.7 | Netscape 7.1 | Opera 9.02 |
○ | ○ | ○ | ○ | ○ | ○ |
Windows(古いブラウザ) |
IE 4.01 | IE 5.01 | IE 5.0 | Firefox 1.0.1 | Netscape 4.75 | Opera 7.23 |
○ | ○ | ○ | ○ | ○ | ○ |
Mac(主要ブラウザ。Macユーザーの95%近い方は下記のブラウザのうち、いずれかを使用しています。) |
Safari 2.04 (Tiger) | Safari 1.32 (Panther) | IE 5.23 (Tiger・Panther) | Firefox 1.5.0.7
(Tiger・Panther)
| IE 5.17 (OS 9.2.2) | IE 5.0 (OS 9.2.2) | Netscape 7.1
(Tiger・Panther)
|
○ | ○ | ○ | ○ | ○ | ○ | ○ |
Mac(マイナーブラウザ。Macユーザーの数%は下記のブラウザを使用しています。) |
Opera 9.02
(Tiger・Panther)
|
Firefox 2.0 RC1
(Tiger・Panther)
|
Firefox 1.07
(Tiger・Panther)
|
Camino 1.03
(Tiger・Panther)
|
Netscape 7.02
(OS 9.2.2)
|
iCab 3.03
(Tiger・Panther)
|
また、ついでに、「alert」もやたらと出てきますので、「a = alert;」としておきます。
これにより、ソース2-2に比べてソース3-1は約7%のファイルサイズ縮小に成功しています。
しかし、これでも、ソース1-2に比べれば、1.8倍以上のファイルサイズになっています。そこで、さらにソース3-1を見てみると、「document.myForm.email.focus();return false;」がやたらと多いことに気づかされます。入力ミスがあった場合に、すぐにメールアドレスの修正をしてもらえるように、メールアドレスの入力欄にフォーカスを当てつつ、「return false;」することで、それ以上処理が進まないようにしています。
これを関数化すれば、ファイルサイズは縮小します。ただし、「return false;」まで共通だとして関数化しますと、FirefoxなどMozilla系ブラウザで期待どおりに動かなくなるため注意が必要です。「document.myForm.email.focus();」のみ関数化します。以下のようになります。
こうするだけで、ファイルサイズは3-1に比べて、3-2は約5%も少なくなりました。関数名はここでは、ai()としましたが、短ければ短いほど分かりにくいです。また、大文字と小文字はJavaScriptでは区別されますので、ai()とAi()は別の関数になりますので、これを応用すれば、より分かりにくくすることが可能です。実際、某大手広告の広告配信用JavaScriptでは、この手法が用いられています。
この難読化したソースを実際に外部ファイル化して、下記の入力フォーム・サンプルで入力チェックができるようにしています。難読化しても問題なく動作することを確認してください。
▼ よくある入力フォームとJavaScriptによるチェック(検証用サンプル)
|
次のページでは、よく出てくるオブジェクト名(documentやwindowなど)を短い変数名のオブジェクトにコピーしてしまいます。これによりファイルサイズの縮小だけでなく、難読化が可能です。
目次:
|