> I wrote a JSON-API in NodeJS for a small project, running behind an
> Apache webserver.
API を別のポートで実行し、apache(proxy??) の背後では実行しません。プロキシしたい場合は、NGINXを使用することをお勧めします。Apache と NGINX について議論しているRyan Dahl のスライド(スライド 8+) を参照してください。NGINX は、圧縮/キャッシュ (高速) も実行できます。すべての JSON を圧縮しないでください (サイズ? 数 KB?)。Google のページ スピードの「最小ペイロード サイズ」セクション(よく読んでください) を読むことをお勧めします。
gzip は、より大きなリソースに対してのみ有益であることに注意してください。圧縮と解凍のオーバーヘッドと待ち時間のため、特定のサイズのしきい値を超えるファイルのみを gzip する必要があります。150 ~ 1000 バイトの最小範囲をお勧めします。150 バイト未満のファイルを gzip 圧縮すると、実際にはサイズが大きくなる可能性があります。
> Now I'd like to improve performance by adding caching and compression
非常に高速になるNGINX(+ memcached)を介して圧縮/キャッシュを実行できます。この目的のために最適化されたCDN(静的ファイル用)がさらに好ましいでしょう。node.js で圧縮を行うべきではないと思いますが、一部のモジュールは、たとえばhttps://github.com/saikat/node-gzipのようにNPM の検索(gzip の検索) で利用できます。
キャッシュについては、非常に高速なredisを確認することをお勧めします。node.js高速クライアント ライブラリ (node_redis)は、hiredis (C)を使用するため、ほとんどのクライアント ライブラリよりも高速になります。このためにはhiredis
、npm からもインストールすることが重要です。
npm install hiredis redis
いくつかのベンチマーク(hiredis)
PING: 20000 ops 46189.38 ops/sec 1/4/1.082
SET: 20000 ops 41237.11 ops/sec 0/6/1.210
GET: 20000 ops 39682.54 ops/sec 1/7/1.257
INCR: 20000 ops 40080.16 ops/sec 0/8/1.242
LPUSH: 20000 ops 41152.26 ops/sec 0/3/1.212
LRANGE (10 elements): 20000 ops 36563.07 ops/sec 1/8/1.363
LRANGE (100 elements): 20000 ops 21834.06 ops/sec 0/9/2.287
> The API calls have unique URLs (e.g. /api/user-id/content) and I want
> to cache them for at least 60 seconds.
redis のsetexコマンドのおかげで、このキャッシュを簡単に実現できます。これは非常に高速になります。