MongoDB をバックエンドとして使用し、セッション用に connect-mongo ミドルウェアを使用する Express Web サイトを開発しています。監視の結果、サーバーのデータベース時間の約 25% が MongoDB セッション ストアへの更新の送信に (ほとんど無駄に) 費やされていることがわかりました。
その READMEによると、 connect-mongo は要求ごとにストア (私の場合は MongoDB) を体系的に更新しているようですが、touchAfter
オプションを使用してこの動作を無効にすることもできます。
Express-session >= 1.10.0 を使用していて、ユーザーがページを更新するたびにすべてのセッションをデータベースに再保存したくない場合は、期間を制限してセッションを遅延更新できます。
app.use(express.session({
secret: 'keyboard cat',
saveUninitialized: false, // don't create session until something stored
resave: false, //don't save session if unmodified
store: new mongoStore({
url: 'mongodb://localhost/test-app',
touchAfter: 24 * 3600 // time period in seconds
})
}));
これを行うことで、 touchAfter: 24 * 3600 を設定すると、24 時間に 1 回だけ更新されるようにセッションに指示され、リクエストがいくつ行われても関係ありません (セッション データで何かを変更するものを除く)。
私が理解していないのは、なぜこれよりも別の動作が必要なのかということです. データが変更されていないセッションを更新するのはなぜですか?