はじめに
- 個人で運営しているWebサービスの話です。
- Express + Jade の標準的な構成で運用
- メインページのレスポンスタイムが600ms超えで絶望
- ボトルネック調査で
res.render()
が98%以上の時間を占めていることが判明
結論は2つ
- Jadeを最新版にしてみよう
- selfオプションを今すぐ有効にしよう
Jade 1.7.0 | Jade 1.8.2 | Jade 1.8.2 (enable 'self' option) |
---|---|---|
620ms | 160ms | 80ms |
1.7.0 -> 1.8.2(4倍早い)
npm update jade
- ダメ元で、Jadeのバージョンアップを行いました。効果抜群でした。
- 公式のChange Logを読んでも「大幅にperformance向上したよ」的なことは書いてありません。何故こんなに早くなったのかまでは調査していません。
selfオプション(更に2倍早い)
なにそれ
- Jadeの変数展開はデフォルトだと、内部で
with
構文を利用している。爆遅。 - selfオプションを有効にすると 常に 'self' namespaceを通じて変数にアクセスする。爆速。
使い方
'self' namespaceを有効にしたいtemplateのrender時に { self: true }
を指定するだけ。
example.js
res.render('watch', {
id: 777,
self: true
});
template側で変数にアクセスする際は #{self.id}
のようにする。( #{id}
ではなく )