読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Meteorのappcacheの有効活用

Meteorは、appcacheというパッケージを追加するだけで、Application Cacheを利用できます。
手作業だと、manifestをしこしこ書かないといけないのでとても楽です。

ただ、Meteorのappcacheは静的リソースのサーバー側での動的変更をサポートしていて、このために、オンラインの時には静的な画像もクライアントは毎回サーバーにリクエストし、サーバー側は変更がなければステータスコード304を返します。
静的な画像が多いとこのパケットの往復がバカにならない。
なので、一度デプロイしたら更新しない静的リソースはオンラインでもApplication Cacheを使うようにしたいです。

以下、そのためのハッキングです。

Meteor.startup ->
    unless Meteor.AppCache?
        return

    for resource in WebApp.clientPrograms['web.browser'].manifest
        if resource.url?
            if resource.url.indexOf('/images/') == 0 # 例えば、/public/images/以下のリソースが対象
                resource.cacheable = true # オンラインでもキャッシュを有効化
    return

Meteorのソースコードを見ると、リソースのハッシュを取ってくるヘルパーを作って、アプリのURL指定の部分にハッシュを埋め込むようにと書いてあったのですが、CSSのURLにヘルパー埋めるのは大変なので、cacheableがオフになっているところ、強引にオンにしました。

appcacheのさらなる高速化を求めている方のご参考になれば幸いです。