読み書きプログラミング

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

Iron Routerとsubscribeその2

前回、ページ遷移の高速化を行いましたが、実質、ページ遷移毎にsubscribeが更新されて、まだ不満がありました。イメージとして、最大のsubscribeが済んだら後はページ遷移でsubscribeの更新は起こらないようにしたい。
で、以下のような感じに修正しました。

Router.map ->
    @route 'home',
        path: '/'
        template: 'home'
        before: ->
             @subscribe('records', 'pickup').wait() #小さなデータ

    @route 'live-list',
        path: '/game-list'
        template: 'game-list'
        before: ->
            @subscribe 'records', 'pickup' # 比較的小さなデータ

    @route 'game-list',
        path: '/game-list'
        template: 'game-list'

Meteor.startup ->
        Meteor.setTimeout (-> Meteor.subscribe 'records'), 0 # 全体データ

ポイントは、

  1. 全体データはRouterではなくstartupでsubscribeする。この時、Routerのsubscribeを優先して読み込むために、setTimeoutで実行をずらす。
  2. 各ページで必要なデータのsubscribeを行う。

Router外でsubscribeをしておくことにより、ページ遷移の際、既にデータが存在していればsubscibeの更新が起こらず、ページ遷移が早くなります。