> I wrote a JSON-API in NodeJS for a small project, running behind an
> Apache webserver.
我只会在不同的端口上运行 API,而不是在 apache(代理??)后面。如果你想代理我建议你使用NGINX。请参阅 Ryan Dahl 的幻灯片讨论 Apache 与 NGINX(幻灯片 8+)。NGINX 还可以进行压缩/缓存(快速)。也许你不应该压缩所有的 JSON(大小?几 KB?)。我建议您阅读Google 的 Page Speed“最小有效负载大小”部分(读得好!)解释这一点,我也在下面引用:
请注意,gzipping 仅对较大的资源有益。由于压缩和解压缩的开销和延迟,您应该只 gzip 超过一定大小阈值的文件;我们建议最小范围在 150 到 1000 字节之间。压缩 150 字节以下的文件实际上可以使它们变大。
> Now I'd like to improve performance by adding caching and compression
您可以通过NGINX(+memcached)进行压缩/缓存,这将非常快。更可取的是为此目的优化的 CDN(用于静态文件)。我认为您不应该在 node.js 中进行任何压缩,尽管可以通过NPM 的搜索(搜索 gzip)获得一些模块,例如https://github.com/saikat/node-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命令,您可以轻松实现此缓存。这将非常快。