2

私の要件は、複数のユーザーがアクセスするレポートを毎日生成することです。データは 24 時間ごとにのみ変更されます。現在、Node を使用して Redis に保存されたデータからレポートを作成し、Express の Compress() メソッドを使用して圧縮された応答を生成します。これらの応答の作成と圧縮には約 40 秒かかります (応答は圧縮されていない約 4MB の JSON です) 私の好みは、これらの応答をファイルシステムまたはメモリに一定期間キャッシュ/保存することです。このためだけに Varnish やその他のリバース プロキシを実装したくないので、応答を効果的にキャッシュする別の方法を誰か提案できますか? 前もって感謝します。

4

1 に答える 1

4

私は最近、似たようなことをしなければなりませんでした。MongoDB データベースから、ユーザー アプリケーションに送信されることを意図した大きな JSON ペイロードを受け取りました。

約 10 分ごとに定期的に更新するだけで済みましたが、応答を GZipping するとかなりの時間がかかるため、定期的にデータを取得して gzip し、保存して、この例では GET 要求への応答として送信します。

var zlib = require('zlib');
var Buffer = require('buffer').Buffer;
var express = require('express');
var app = express();

var yourData, cachedGzip;

// zlib performs gzip compression, passes payload to callback asynchronously
zlib.gzip(new Buffer(yourData)), function(err, data){
    cachedGzip = data
});

// Somewhere later in your app...
// Can now use the cached data for gzip responses, example route
app.get('/', function(req, res) {
  res.header('Content-Type', 'application/json');
  res.header('Content-Encoding', 'gzip');
  res.send(cachedGzip);
});
于 2016-02-28T08:26:27.287 に答える