> 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 Page Speed "Минимальный размер полезной нагрузки" (хорошее чтение!), объясняя это, которое я также цитирую ниже:
Обратите внимание, что сжатие выгодно только для больших ресурсов. Из-за накладных расходов и задержек при сжатии и распаковке следует использовать gzip только файлы, размер которых превышает определенный порог; мы рекомендуем минимальный диапазон от 150 до 1000 байт. Gzip-архивирование файлов размером менее 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. Это будет очень быстро.
person
Alfred
schedule
11.07.2011