JS を gzip 化してファイルサイズ削減してみた

勢いよく公開したものの、全く話題になってない getlasterror.so-name.info ですが、ちょこちょこいじっていきますよ。

errors.js が500KB弱あるのを何とかしたかったが、errors.js は巨大データを JSON 形式で保存してるものなので、minified は意味なし。そこで、gzip 圧縮してみた。errors.js.gz は gzip --best errors.js で事前に作成しておく。470KB が 120KB になった。

.htaccess で mod_rewrite。データがスタティックだからなせる技。

RewriteEngine on

RewriteBase /

RewriteCond %{HTTP:Accept-Encoding} (x\-)?gzip,?
RewriteRule ^errors\.js$ errors.js.gz

RewriteBase はさくらのレンタルサーバーの安いプランだから必要だったけど、他の環境ではたぶん不要。

参考にしたのはこのへん。

AS3 だと

いまんとこ、全部 JS でやってるんだけど、AS3 でやるならどうするのがよいかも調査しておいた。

ByteArray で writeObject したやつを compress しておくとよさげ。ファイルに書き出すために AIR を使った。

var bytes:ByteArray = new ByteArray();
bytes.writeObject(errors);
bytes.compress();

// ファイルに出力
// C:\Documents and Settings\username\Application Data\AppName\Local Store
var fs:FileStream = new FileStream();
var file:File = File.applicationStorageDirectory.resolvePath("out.bin");
trace(file.nativePath);
fs.open(file, "write");
fs.writeBytes(bytes);
fs.close();

読み出すときは、URLLoader 使って、ByteArray 化したあと、uncompress して readObject すれば復元できる。

こちらは zlib 使ってるらしく、ファイルサイズは同じぐらいの130KBまで小さくなった。

動的なデータで同じことやるなら、 AMF 使うのが素直だと思う。

(追記) 実験してみた:RubyAmf のシリアライザだけを使う