> I wrote a JSON-API in NodeJS for a small project, running behind an
> Apache webserver.
Я бы просто запустил API на другом порту, а не за Apache (прокси ??).Если вы хотите использовать прокси, я бы посоветовал вам использовать NGINX .См. слайды Райана Даля, в которых обсуждается Apache против NGINX (слайды 8+).NGINX также может выполнять сжатие / кэширование (быстро).Может быть, вы не должны сжимать все ваши JSON (размер? Несколько КБ?).Я рекомендую вам прочитать раздел Google Speed Page «Минимальный размер полезной нагрузки» (хорошо читаю!), Объясняющий это, что я также цитирую ниже:
Обратите внимание, что gzipping полезен только длябольшие ресурсы.Из-за накладных расходов и задержек сжатия и распаковки вы должны только сжать файлы выше определенного порога размера;мы рекомендуем минимальный диапазон между 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
Для кэширования IЯ бы посоветовал вам взглянуть на 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.
Вы можете легко добиться этого кэширования благодаря setex * в Redis1036 * команда.Это будет очень быстро.