---------------------------------------------------- 【3パス】 [Loader]| | | |[Client]| | | |[Server]| ---------------------------------------------------- 【1パス】 [Loader]| | | [Client]| | | [Server]| | | ---------------------------------------------------- 【2Aパス】 [Loader]| | | [Client]| | | |[Server]| | ---------------------------------------------------- 【2Bパス】 [Loader]| | | |[Client]| | |[Server]| | ---------------------------------------------------- 最初に作ったのは【3パス】だ。これは「DOMの完成」と「いいねボタンの表示」の間の時間が気になった。 次に作ったのは【2Aパス】。これで「DOMの完成」と「いいねボタンの表示」の間の時間が縮小したので、 さらにこれを縮小させようと【1パス】を作った。 しかし、【1パス】になると、最初にページがフリーズしたような「固まり」ができる。 この「固まり」の後、以下の事が起きやすい: (1) 画面全体が一瞬、完全に白紙になる (2) ヘッダーなど、再描画しなくていい部分が再描画される よくよく観察すると、この「固まり」は【2Aパス】でもあったのだが【1パス】ほどひどくなかったために、 気にとめなかったのだ。 まだやっていないのは【2Bパス】だ。これがもしかしてベストかもしれない。 「固まり」をなくすには、最初のパスは、【3パス】や【2Bパス】のように[Loader]だけでなければ いけないと思う。2番目のパスで、[Client]と[Server]をまとめれば、「DOMの完成」と「いいねボタンの表示」 の間の時間の短縮に繋がる。 ---------------------------------------------------- 【2Bパス】をやってみた。【3パス】より若干速いかという感じ。 【2Bパス】の2パス目([Client]と[Server])を ファイルにキャッシュしてみた。 [Loader]| | | |[Client]| | |[Server]| | 平均800msの待ち時間が平均80msぐらいに減った。 「DOMの完成」と「いいねボタンの表示」がChromeで同時になった。 ただし、この実験では、投票数など動的データもキャッシュしてしまっているので、 実際には使用できない。 ---------------------------------------------------- 【2BパスAsync】 2パス目([Client]と[Server])を別々のAsyncでロードする [Loader]| | | |[Client]| | |[Server]| | 若干はやくなり、時々「DOMの完成」と「いいねボタンの表示」が同時になる。 しかし、Clientのスクリプトがデータを表示する時点で、Serverのデータが来ている保証はない。 もし来ていなかったら、もう一度、Serverにアクセスするしかない。 この場合、2度のServerにアクセスをする羽目になる。 これ以上のスピードアップは、組み合わせを変えるだけでは不可能のようにみえる。 実際にClientとServerの時間をキャッシュして短くするしか無いだろう。 ---------------------------------------------------- 【2 Script Tags】 [Loader]と[Server]を2つの