[Hotmail] Hotmailを 10 倍スピードアップ!

*本記事は、Inside Windows Live Blog の記事の抄訳です。

6月21日に、最新のブラウザー上で快適なパフォーマンスを実現するために、ベースから再度設計した新しいSkyDrive のリリースを紹介しましたが、SkyDrive と同様に Hotmail のスピードアップをする取り組みも行っています。

取り組みを始めるにあたり、Hotmail のページ読み込み速度、標準的な環境下における他社の Web メールとのパフォーマンス比較に関して、世界中で測定しました。

結果、いくつかの点では、Hotmail が少し優っていましたが、反面、よく利用されるアクションに関しては非常にスピードが遅かったものもありました。

Hotmail をスピードアップさせる

私たちは、ページのロード時間をスピードアップするために、ページ上のコンテンツを整備し、さらに高速化するためにサインイン時のラウンド・トリップの短縮も行っていました。

しかし、私たちのゴールは Hotmail が瞬時に動作する体感であり、これを実現するためには、さらなるスピードアップしかないことを理解していました。

今日のブロードバンドのスピードを持ってさえ、ネットワークはボトルネックではありますが、このような状況でも、ユーザー様に待ち時間を与えないようにする必要があったのです。

そこで私たちは、ユーザーデータとブラウザーの親和性を高め、ブラウザー上でデータのロードが完了していない場合でも、ユーザー様にデータロード中の待ち状態にあることを通知することなく、効率的にデータを表示させるというアプローチを取ることに決めました。また、Internet Explorer 9 のような最新のブラウザーのアドバンテージを生かし、クライアントアプリケーションのように、サーバー側の処理を減らしブラウザー側でより多くの処理を行うというアプローチも合わせて決めました。

これらのアプローチには、3 つの具体的な方法: キャッシング、事前読み込み、非同期処理、が利用されました。

キャッシング

以前の Hotmail では、必要に応じてフレッシュデータを毎回サーバー側へリクエストしていました。例えば、メールの受信ボックスにサインインした際に、Hotmail はサーバー側ヘ最新のメッセージリストを要求していました。メールを開き、そして閉じた際には、最新のメッセージリストを再度サーバー側からロードするために、ユーザー様にデータをロード中である旨の通知を表示する形になっていました。同様に、同じメールを開く際にも、再度データをサーバー側から取得する間、ユーザー様に待ち時間を与える形になっていました。

新しい Hotmail はクライアントアプリケーションような形になります。メッセージデータを取得した際にデータがキャッシュされ、メッセージリストはブラウザーの DOM (Document Object Model) に格納されます。よって再度メッセージリストが必要になった際も、サーバー側から再びデータをロードする必要がなくなりました。また、一度開いたメールの情報も同じくブラウザーにキャッシュされることから同じメールをすぐに開くことができます。

データをキャッシングしている際に、データのアップデートを認識する仕掛けもあります。新しい Hotmail では、Hotmail のサーバーがユーザー様のデータに変更があったことを検知します。例えば、新しいメールを受信した際には、ブラウザーに通知がサーバー側から送られます。ブラウザーは通知を受けるとアップデートされたデータを再ロードするため、Hotmail の受信トレイとサーバーの同期が保たれます。

最終的に、ブラウザーを閉じる、もしくは Hotmail からサインアウトした場合、キャッシュはクリアされ、プライバシーが漏えいするような情報は一切残りません。

事前読み込み

Hotmail の利用パターンを分析した結果、ユーザー様が受信トレイにサインインした際に、まず最初に行われる多くの動作は、どのメールを開くかを決めるためメールの件名リストを読むという動作でした。新しいHotmail では、最初のいつくかのメールの読み込みおよびキャッシングが行われるため、既にメールの件名を確認する準備ができています。このように、どのメールを開くのか決めるにあたり、メールの件名リストのデータを読み込むまで待つ必要はございません。

また、メールを開く際には、その多くで、読んでいるメールから次のメールへと順次に読んでいることがわかりました。新しい Hotmail では、ユーザー様があるメールを読んでいる間に、自動的に次のメールを読み込み、キャッシングを行います。

私たちはこの事前読み込みによるできる限りの効率化に関し、引き続き微調整を行っているため、すべてのユーザー様においてこの機能がデフォルトでオンにはなっておりません。もしこの機能を体感いただけていない場合、Hotmail のオプションの [スレッドおよび事前読み込み] で機能を有効にすることができます。

さらに、メールの事前読み込みに加え、ブラウザー内でのコードとデータの事前読み込みも行っています。例えば、ほとんどの Hotmail のセッションにメールの送信が伴います。メールを読んだり削除している間にも、JavaScript、HTML コードおよび新規メッセージの作成に必要とするアドレス帳をダウンロードしキャッシングしています。よって新規作成や返信をクリックした際、キャッシュされたコードとデータがすぐにスワップされるので、即座に利用可能な状態となります。

私たちが直面していた、関心のあった設計上の問題として、帯域幅もしくはブラウザーのスレッド利用を妨げることなく、どのようにしてコンテンツをダウンロードするかの答えをみつけることでした。下手な処理をした場合、アプリケーションが応答なしの状態となります。

私たちは、ブラウザーをすぐに応答させることと、最も重要なユーザーのタスクができるかぎり早く実行されるようにすることを切り分けて命令する処理を行っています。

他の直面していた挑戦として、多くの Hotmail ユーザーを考慮し、サーバーの負担を減らし且つコスト効率の良いサービスを継続することでした。そのためにストレージシステムのスループットをさらに上げるための投資を行う必要がありました。

本件に関しては今後のブログでご紹介する予定です。

非同期処理

以前の Hotmail では画面 が更新されるまでサーバーのレスポンスを待つ形となっていました。例えば、以前はメールを削除した場合、Hotmail はサーバーに対してメールを削除するよう都度要求し、そしてメッセージリストが更新されるまでサーバーのレスポンスを待っていました。結果、次の操作をする際にサーバーの処理が完了するまで待つ必要があり、Hotmail が遅いという体感を与えていました。

新しい Hotmail では画面が更新されるまでほとんどの処理でサーバーのレスポンスを待つ必要はなくなりました。新しい Hotmail においては、メッセージを削除した際、メッセージリストは直ちに更新され、すぐに次の操作を行うことができます。

バックグランドで、Client code がメッセージの削除処理をサーバー側に要求しメッセージが削除されるので待ち時間がないのです。

またこの方法は、サーバーへの処理要求の急増において、より回復力のある Client code にし、通信速度が遅い環境におけるパフォーマンスを改善します。

最終的に、Internet Explorer 9 のチームによる大幅に改善や、例えば IE 9 Standards Mode を利用するなど様々な方法で Internet Explorer 上での Hotmail がスピードアップされました。

結果

まさに今、これらの変更のユーザー様へのリリースが完了しました。(事前読み込みを除く。上述のように、いくつかの国ではまだデフォルトの設定では事前読み込みの機能がオンになっておりません)

私たちが何を達成したのか? データがそのすべてを物語っています。

Hotmail 2010 年 12 月 Hotmail 2011 年 6 月
メールを開く 3.3 秒 0.18 秒
メールの削除 3.1 秒 0.14 秒
新規メールの作成 4.3 秒 0.20 秒

上記データは、プロダクションサーバーに対して 100 回の自動テストを行った結果の 75 パーセンタイル値となります。

帯域幅 300 KB(上り)75 KB (下り)/リテンシー 150 ミリセカンド、ブラウザー:Internet Explorer 9.

ユーザー様の環境によって結果が異なります。

以下のビデオでより明確にご覧いただけます (英語)。

Hotmail 2011–Performance Side-by-side

私たちの取り組みはまだ完了しておりません。私たちはパフォーマンスは機能であり、Hotmail をできる限り高速化することにコミットしています。今後更に Hotmail を高速化する方法を探求し続け、よく利用されるアクションの効率改善を続けていきます。

是非、スピードアップした Hotmail をお楽しみいただき、更なる高速化をご期待ください。

Dick Craddock
Group Program Manager, Hotmail

関連リンク

,