node.jsでサーバ書いているんですけど,圧縮しないと性能的に満たされてなくなってきたので,どうにかできないかと調べたら,なんとかなりました.まず,zlibがnpmを使わずともnode.js組込みで使えるようになっていたらしいです.で,そのドキュメントが
-
http://nodejs.org/api/zlib.html
です.一通り使い方が書いてあるので,これに書いてある通りにやればだいたいうまくいきます.httpのクライアント・サーバ双方の使い方があるのはとても助かりました.
で,一つ成功すると次もしたくなるのが人間の欲というもので,node.jsでけっこう有名なモジュールrequestでも圧縮したデータを扱いたくなります.
-
https://github.com/mikeal/request
いくつか調べてみたところ,これそのものをforkする必要はなかったです.(した後に気が付きましたorz)やることは,
- リクエストヘッダのAccept-Encodingに'gzip,deflate'をセットする.
- encodingを指定しない.(Bufferをコールバックに渡すようにする)
- 受け取った時にちゃんと展開する.
の3つです.ちょっとめんどくさいですが,ネットワークのオーバーヘッドが減ると思うと,大したものではないかと思います.
それから,child_process.forkの通信でも圧縮したデータを転送したい場合があるんですけど,Bufferではやり取りができないみたいなので,base64でエンコードしてやりとりしてみました.base64でいいのか微妙なんですけど,他のencodingを見る限りこれが無難かと思って,容量が増えるかもしれないけど,base64にしています.よくわからないです....