ESI
なんでか知らんが、ESI(edge side include)について調べていた。
最初Ajaxでクライアント通信でええやんという感じだったんではあるが、
調べたところ、上手く使えば、確かに通信量が削減されていいかもしらん。
(あくまで上手く使えばである。最初聞かされた時はSEO対策のためとか言われてゲンナリしたもんだが。)
ESIとは、SSIの後継の結構古くからある規格だ。Ajax通信みたいなことを端っこ(Edge)のサーバでやるためのものであると勝手に理解。
ほいで、ESIをサポートしてるサーバで挙動の違いを見てみた。
Varnish
- デフォルトで組みこまれてる。
- ESIの機能はincludeくらいしか実装されてない。(が別に問題ない。それしか必要ない)
- esi:includeのsrcには、pathだけで全体ページと同じバックエンドから取ってくれる。
- esi展開を行うかどうかは設定VCLファイルの
ATS (Apache Traffic Server)
- プラグインで指定。
- ESIの機能はだいたい組込まれてるようだ。しかし面倒なことは、アプリ側でやればいいので、正直オーバースペック。
- esi:includeのsrcは、schemaからの完全なurlでないと取得してくれなかった。
- esi展開を行うかどうかは、レスポンスのヘッダに、X-Esi: 1を付与するかどうか。
- esiを組み込んだページも、展開される前の状態でキャッシュされるっぽい。すなわち、毎回esi展開が行なわれる。スピードの点で不利ではあるが、部品部分も確実に更新される。
正直それ自体にクラスター化する機能のないVarnishは、ちょっとサイトの規模が大きくなったら、あんま使いもんにならん気もしないでもない。