(57)【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサ、および前記１つまたは複数のプロセッサによって実行されるプログラムを記憶するメモリを有する計算装置において、
第１のスレッドでメインアプリケーションを初期化することであって、前記メインアプリケーションが、ターゲットアプリケーションとの第１の同期接続を有することと、
前記メインアプリケーションが、前記第１の同期接続を介して前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行した後で、第２のスレッドで補助プロセスを初期化することであって、前記補助プロセスが、前記ターゲットアプリケーションとの第２の同期接続、および前記メインアプリケーションとの非同期接続を有することと、
前記非同期接続を介して前記メインアプリケーションからの要求を、前記補助プロセスにおいて受信することと、
前記要求に応じて、前記第２の同期接続を介し、前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行することと、
を含むコンピュータ実行方法。
【請求項２】
前記ターゲットアプリケーションが、前記計算装置におけるデータベースアプリケーションである、請求項１に記載のコンピュータ実行方法。
【請求項３】
前記第１の同期接続を介した、前記ターゲットアプリケーションにおける前記１つまたは複数のオペレーションが、
前記メインアプリケーションが、ユーザインターフェースを前記計算装置に表示することと、
前記メインアプリケーションが、前記ターゲットアプリケーションからデータを検索することと、
前記メインアプリケーションが、前記検索されたデータを前記ユーザインターフェースに読み込むことと、
をさらに含む、請求項１または２に記載のコンピュータ実行方法。
【請求項４】
前記第２の同期接続を介した、前記ターゲットアプリケーションにおける前記１つまたは複数のオペレーションが、
前記補助プロセスが、前記メインアプリケーションからデータ要求を受信することと、
前記データ要求の受信に応じて、
前記補助プロセスが、前記ターゲットアプリケーションにおいて前記データ要求を同期して実行することと、
前記補助プロセスが、前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
前記補助プロセスが、前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
をさらに含む、請求項１〜３のいずれか一項に記載のコンピュータ実行方法。
【請求項５】
前記第２の同期接続を介した、前記ターゲットアプリケーションにおける前記１つまたは複数のオペレーションが、
前記補助プロセスが、前記メインアプリケーションからデータ要求を受信することと、
前記データ要求の受信に応じて、
前記補助プロセスが、前記ターゲットアプリケーションにおいて前記データ要求を同期して実行することと、
前記補助プロセスが、前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
前記補助プロセスが、前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
をさらに含み、
前記応答が、前記要求されたデータを含む場合に、前記メインアプリケーションが、前記要求されたデータで前記ユーザインターフェースを更新することをさらに含む、請求項３に記載のコンピュータ実行方法。
【請求項６】
前記応答が、前記要求されたデータを含まない場合に、
前記メインアプリケーションが、前記要求されたデータの要求をリモートサーバシステムに非同期で出すことと、
前記メインアプリケーションが、前記要求されたデータを前記リモートサーバシステムから非同期で受信することと、
前記要求されたデータを前記リモートサーバシステムから受信した後で、
前記メインアプリケーションが、前記要求されたデータを前記補助プロセスに非同期で転送することと、
前記補助プロセスが、前記要求されたデータで前記ターゲットアプリケーションを同期して更新することと、
をさらに含む、請求項４または５に記載のコンピュータ実行方法。
【請求項７】
前記ターゲットアプリケーションが、前記計算装置において画像をレンダリングするためのアプリケーションである、請求項１〜４のいずれか一項に記載のコンピュータ実行方法。
【請求項８】
前記ターゲットアプリケーションが、ファイルにアクセスするか、ファイルを転送するか、またはファイルをダウンロードするためのアプリケーションである、請求項１〜４のいずれか一項に記載のコンピュータ実行方法。
【請求項９】
前記ターゲットアプリケーションが、数値計算を実行するためのアプリケーションである、請求項１〜４のいずれか一項に記載のコンピュータ実行方法。
【請求項１０】
前記メインアプリケーションが、前記補助プロセスが初期化された後で、前記補助プロセスから準備完了通知を受信することをさらに含む、請求項１〜４のいずれか一項に記載のコンピュータ実行方法。
【請求項１１】
前記補助プロセスが初期化され、かつ前記メインアプリケーションと前記ターゲットアプリケーションとの間の通信ユニットが完了した後で、前記第１の同期接続が終了される、請求項１〜４のいずれか一項に記載のコンピュータ実行方法。
【請求項１２】
前記計算装置が、モバイル携帯機器である、請求項１〜４のいずれか一項に記載のコンピュータ実行方法。
【請求項１３】
前記メインアプリケーションが、単一スレッドである、請求項１〜６のいずれか一項に記載のコンピュータ実行方法。
【請求項１４】
１つまたは複数のプロセッサと、
メモリと、
前記メモリに記憶され、かつ前記１つまたは複数のプロセッサによって実行されるように構成された１つまたは複数のプログラムであって、
第１のスレッドでメインアプリケーションを初期化するための命令であって、前記メインアプリケーションが、ターゲットアプリケーションとの第１の同期接続を有する命令と、
前記メインアプリケーションが、前記第１の同期接続を介して前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行した後で、第２のスレッドで補助プロセスを初期化するための命令であって、前記補助プロセスが、前記ターゲットアプリケーションとの第２の同期接続、および前記メインアプリケーションとの非同期接続を有する命令と、
前記非同期接続を介して前記メインアプリケーションからの要求を前記補助プロセスにおいて受信するための命令と、
前記要求に応じ、前記第２の同期接続を介して前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行するための命令と、を含む１つまたは複数のプログラムと、
を含むコンピュータシステム。
【請求項１５】
前記ターゲットアプリケーションが、前記コンピュータシステムにおけるデータベースアプリケーションである、請求項１４に記載のコンピュータシステム。
【請求項１６】
前記第１の同期接続を介し、前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行するための前記命令が、
ユーザインターフェースを前記コンピュータシステムに表示するための命令と、
前記ターゲットアプリケーションからデータを検索するための命令と、
前記検索されたデータを前記ユーザインターフェースに読み込むための命令と、
をさらに含む、請求項１４または１５に記載のコンピュータシステム。
【請求項１７】
前記第２の同期接続を介し、前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行するための前記命令が、
前記メインアプリケーションからデータ要求を受信するための命令と、
前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行するための命令と、
前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信するための命令と、
前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すための命令と、
をさらに含む、請求項１４〜１６のいずれか一項に記載のコンピュータシステム。
【請求項１８】
前記第２の同期接続を介し、前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行するための前記命令が、
前記メインアプリケーションからデータ要求を受信するための命令と、
前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行するための命令と、
前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信するための命令と、
前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すための命令と、
をさらに含み、
前記応答が、前記要求されたデータを含む場合に、前記要求されたデータで前記ユーザインターフェースを更新するための命令をさらに含む、請求項１６に記載のコンピュータシステム。
【請求項１９】
前記応答が、前記要求されたデータを含まない場合に、
前記要求されたデータの要求をリモートサーバシステムに非同期で出すための命令と、
前記要求されたデータを前記リモートサーバシステムから非同期で受信するための命令と、
をさらに含み、
前記要求されたデータを前記リモートサーバシステムから受信した後で、
前記要求されたデータを前記補助プロセスに非同期で転送するための命令と、
前記要求されたデータで前記ターゲットアプリケーションを同期して更新するための命令と、
をさらに含む、請求項１７または１８に記載のコンピュータシステム。
【請求項２０】
前記補助プロセスが初期化された後で、前記メインアプリケーションが、前記補助プロセスから準備完了通知を受信することをさらに含む、請求項１４、１５、１６または１７に記載のコンピュータシステム。
【請求項２１】
前記補助プロセスが初期化され、かつ前記メインアプリケーションと前記ターゲットアプリケーションとの間の通信ユニットが完了した後で、前記第１の同期接続が終了される、請求項１４〜１７のいずれか一項に記載のコンピュータシステム。
【請求項２２】
前記コンピュータシステムが、モバイル携帯機器である、請求項１４〜１７のいずれか一項に記載のコンピュータシステム。
【請求項２３】
１つまたは複数のコンピュータプログラムを格納するコンピュータ可読記憶媒体であって、前記１つまたは複数のコンピュータプログラムが命令を含み、これらの命令が、コンピュータシステムによって実行された場合に、
前記コンピュータシステムに、第１のスレッドでメインアプリケーションを初期化させ、この場合に、前記メインアプリケーションが、ターゲットアプリケーションとの第１の同期接続を有し、
前記メインアプリケーションが、前記第１の同期接続を介して前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行した後で、前記コンピュータシステムに、第２のスレッドで補助プロセスを初期化させ、この場合に、前記補助プロセスが、前記ターゲットアプリケーションとの第２の同期接続、および前記メインアプリケーションとの非同期接続を有し、
前記コンピュータシステムに、非同期接続を介して前記メインアプリケーションからの要求を前記補助プロセスにおいて受信させ、
前記コンピュータシステムに、前記要求に応じ前記第２の同期接続を介して前記ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行させる、
コンピュータ可読記憶媒体。
【請求項２４】
前記ターゲットアプリケーションが、前記コンピュータシステムにおけるデータベースアプリケーションである、請求項２３に記載のコンピュータ可読記憶媒体。
【請求項２５】
前記第１の同期接続を介した、前記ターゲットアプリケーションにおける前記１つまたは複数のオペレーションが、
ユーザインターフェースを前記コンピュータシステムに表示することと、
前記ターゲットアプリケーションからデータを検索することと、
前記検索されたデータを前記ユーザインターフェースに読み込むことと、
をさらに含む、請求項２３または２４に記載のコンピュータ可読記憶媒体。
【請求項２６】
前記第２の同期接続を介した、前記ターゲットアプリケーションにおける前記１つまたは複数のオペレーションが、
前記メインアプリケーションからデータ要求を受信することと、
前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行することと、
前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
をさらに含む、請求項２３〜２５のいずれか一項に記載のコンピュータ可読記憶媒体。
【請求項２７】
前記第２の同期接続を介した、前記ターゲットアプリケーションにおける前記１つまたは複数のオペレーションが、
前記メインアプリケーションからデータ要求を受信することと、
前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行することと、
前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
をさらに含み、
前記応答が、前記要求されたデータを含む場合に、前記要求されたデータで前記ユーザインターフェースを更新するための命令をさらに含む、請求項２５に記載のコンピュータ可読記憶媒体。
【請求項２８】
前記応答が、前記要求されたデータを含まない場合に、
前記要求されたデータの要求をリモートサーバシステムに非同期で出すための命令と、
前記要求されたデータを前記リモートサーバシステムから非同期で受信するための命令と、
をさらに含み、
前記要求されたデータを前記リモートサーバシステムから受信した後で、
前記要求されたデータを前記補助プロセスに非同期で転送するための命令と、
前記要求されたデータで前記ターゲットアプリケーションを同期して更新するための命令と、
をさらに含む、請求項２６または２７に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  開示される実施形態は、一般にクライアント／サーバコンピュータネットワークシステムの分野に関し、特に、ソフトウェアアプリケーションの起動コストを低減するためのシステムおよび方法に関する。
【背景技術】
【０００２】
[0002]  コンピュータ上のソフトウェアアプリケーションの起動には、典型的には、コンピュータが、アプリケーションをメモリにロードし、ローカルソースおよび／またはリモートソースからデータを検索し、かつデータをメモリの指定された場所に記憶することを必要とする。アプリケーションが完全に初期化され、かつユーザ命令を処理する準備ができるまで、ユーザは、アプリケーションを使用できないことが多い。非常に多くの場合に、この初期化プロセスは、長い期間を必要とする可能性があり、その間、ユーザは、待つ以外に何もできない。この状況は、コンピュータが、限られたネットワーク帯域幅、メモリ空間およびプロセッサスループットのうちの１つまたは複数ゆえに資源が制限された、携帯電話などの携帯機器である場合には、ユーザ体験に重大な影響を及ぼす可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
[0003]  いくつかの実施形態において、計算装置は、１つまたは複数のプロセッサ、および１つまたは複数のプロセッサによって実行されるプログラムを記憶するメモリを有する。計算装置は、第１のスレッドでメインアプリケーションを初期化する。メインアプリケーションは、ターゲットアプリケーションとの第１の同期接続を有する。メインアプリケーションが、第１の同期接続を介してターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行した後で、計算装置は、第２のスレッドで補助プロセスを初期化する。補助プロセスは、ターゲットアプリケーションとの第２の同期接続、およびメインアプリケーションとの非同期接続を有する。非同期接続を介してメインアプリケーションから要求を受信した後で、補助プロセスは、第２の同期接続を介してターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行する。
【０００４】
[0004]  いくつかの実施形態において、コンピュータシステムには、１つまたは複数のプロセッサ、メモリ、および１つまたは複数のプログラムが含まれる。１つまたは複数のプログラムは、メモリに記憶され、かつ１つまたは複数のプロセッサによって実行されるように構成される。１つまたは複数のプログラムには、次のものが含まれる。すなわち、第１のスレッドでメインアプリケーションを初期化するための命令であって、メインアプリケーションが、ターゲットアプリケーションとの第１の同期接続を有する命令と、メインアプリケーションが、第１の同期接続を介してターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行した後で、第２のスレッドで補助プロセスを初期化するための命令であって、補助プロセスが、ターゲットアプリケーションとの第２の同期接続、およびメインアプリケーションとの非同期接続を有する命令と、非同期接続を介してメインアプリケーションからの要求を補助プロセスにおいて受信するための命令と、要求に応じ、第２の同期接続を介してターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行するための命令と、が含まれる。
【０００５】
[0005]  いくつかの実施形態において、コンピュータ可読記憶媒体には、そこに埋め込まれた１つまたは複数のコンピュータプログラムが含まれる。１つまたは複数のコンピュータプログラムには、コンピュータシステムによって実行された場合にはコンピュータシステムに次のことをさせる命令が含まれる。すなわち、第１のスレッドでメインアプリケーションを初期化することであって、メインアプリケーションが、ターゲットアプリケーションとの第１の同期接続を有することと、メインアプリケーションが、第１の同期接続を介してターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行した後で、第２のスレッドで補助プロセスを初期化することであって、補助プロセスが、ターゲットアプリケーションとの第２の同期接続、およびメインアプリケーションとの非同期接続を有することと、非同期接続を介して、メインアプリケーションからの要求を補助プロセスにおいて受信することと、要求に応じて、第２の同期接続を介し、ターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行することと、である。
【０００６】
[0017]  図面の全体にわたって、類似の参照数字は、対応する部分を指す。
【図面の簡単な説明】
【０００７】
【図１】[0006]いくつかの実施形態に従って、クライアント／サーバ分散システムのインフラストラクチャを示すブロック図である。
【図２】[0007]いくつかの実施形態に従って、例示的なクライアントシステムの構造を示すブロック図である。
【図３】[0008]いくつかの実施形態に従って、例示的なサーバシステムの構造を示すブロック図である。
【図４】[0009]いくつかの実施形態に従って、クライアント／サーバ分散システムのコンポーネント間の相互関係を示すブロック図である。
【図５Ａ】[0010]いくつかの実施形態に従って、クライアント／サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示すブロック図である。
【図５Ｂ】いくつかの実施形態に従って、クライアント／サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示すブロック図である。
【図５Ｃ】いくつかの実施形態に従って、クライアント／サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示すブロック図である。
【図５Ｄ】[0011]いくつかの実施形態に従って、起動時におけるクライアントとサーバとの間の対話、およびクライアントシステムにおけるウェブベースソフトウェアアプリケーションとサーバシステムとの間でデータを転送するための後続オペレーションを示す流れ図である。
【図５Ｅ】[0012]いくつかの実施形態に従って、マルチスレッドソフトウェアアプリケーションに関連する複数のスレッドの起動プロセスを示す流れ図である。
【図６Ａ】[0013]いくつかの実施形態に従って、ウェブアプリケーションに関連する、サーバシステムにおけるデータ構造を示すブロック図である。
【図６Ｂ】[0014]いくつかの実施形態に従って、永続的なウェブアプリケーションに関連する、クライアントシステムにおけるデータ構造を示すブロック図である。
【図７Ａ】[0015]いくつかの実施形態に従って、クライアントシステム上の永続的なウェブアプリケーションとサーバシステムとの間でデータを転送するためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。
【図７Ｂ】いくつかの実施形態に従って、クライアントシステム上の永続的なウェブアプリケーションとサーバシステムとの間でデータを転送するためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。
【図８Ａ】[0016]いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。
【図８Ｂ】いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。
【図８Ｃ】いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。
【図８Ｄ】いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。
【発明を実施するための形態】
【０００８】
実施形態の説明
[0018]  図１は、いくつかの実施形態によるクライアント／サーバ分散システムのインフラストラクチャを示すブロック図である。分散システムには、複数のクライアント装置１０２および複数のサーバシステム１０６が含まれる。これらのコンポーネントは、様々なコンポーネントが互いに通信できるように、１つまたは複数の通信ネットワーク１０４（例えば、インターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク等）を介して一緒にリンクされる。いくつかの実施形態において、サーバシステム１０６のそれぞれは、単一のサーバである。他の実施形態において、サーバシステム１０６には、ウェブインターフェース（フロントエンドサーバ）１０８などの複数のサーバと、１つまたは複数のサーバアプリケーション１１０（これらは、１つまたは複数のサーバ上で実行してもよい）と、１つまたは複数の中央データベース１２０であって、ローカルエリアネットワーク（ＬＡＮ）を介して互いに接続され、かつ共通インターフェース（例えば、フロントエンドサーバとも呼ばれる１つまたは複数のサーバシステム）を介してクライアント装置１０２と情報を交換する１つまたは複数の中央データベース１２０と、が含まれる。複数のサーバシステム１０６を有する実施形態において、サーバシステム１０６は、ローカルエリアネットワーク（ＬＡＮ）または他の通信ネットワークを介して互いに接続してもよい。
【０００９】
[0019]  クライアント装置１０２には、ウェブブラウザ１１２などのクライアントアプリケーションが含まれる。ユーザは、ウェブブラウザ１１２を用いて、サーバシステム１０６からの１つまたは複数のウェブアプリケーション１１４にアクセスすることができる。ウェブブラウザ１１２およびウェブブラウザ１１２内のウェブアプリケーション１１４は、クライアント１０２上のローカルデータベース１１６に記憶されたデータ項目にアクセスすることができる。いくつかの実施形態において、ウェブアプリケーション１１４へのアクセスには、サーバシステム１０６からプログラムをダウンロードすること、およびウェブアプリケーション１１４が用いるためのデータをローカルデータベース１１６に記憶することが含まれる。クライアント装置１０２（時には「クライアント装置」または「クライアントコンピュータ」と呼ばれる）は、サーバシステム１０６からデータを受信でき、かつ要求（例えば、ウェブアプリケーションデータ要求、検索問い合わせ、情報要求、ログイン要求等）をサーバシステム１０６に送信できる任意のコンピュータまたは類似の装置であってもよい。クライアント装置の例には、限定するわけではないが、デスクトップコンピュータ、ノート型コンピュータ、タブレットコンピュータ、携帯電話および携帯情報端末などの携帯機器、ならびにセットトップボックスが含まれる。本出願において、事実上、用語「ウェブアプリケーション」は、サーバシステム１０６から受信される内容へのアクセスをユーザに提供する任意の対話型アプリケーションを意味する。クライアント装置１０２からの要求は、通信インターフェース１１８を介し、ｈｔｔｐ要求を用いてＨＴＴＰプロトコルを利用するか、または他の類似のネットワーク通信プロトコルを利用して、それぞれのサーバシステム１０６に伝達される。
【００１０】
[0020]  サーバシステム１０６には、少なくともウェブインターフェース（フロントエンドサーバ）１０８、サーバアプリケーション１１０、および中央データベース１２０が含まれる。ウェブインターフェース１０８は、クライアント装置１０２からの要求を解析し、サーバアプリケーション１１０によって提供される、対応するウェブアプリケーションをフェッチし、要求しているクライアント装置１０２にウェブアプリケーションを返す。クライアント／サーバシステムのトポロジにおけるウェブインターフェースおよびサーバアプリケーションのそれぞれの位置に依存して、ウェブインターフェースは、セパレート（「フロントエンドサーバ」）１０８上で実行され、サーバアプリケーションは、セパレート（「バックエンドサーバ」）１１０上で実行される。本出願において、用語「ウェブインターフェース」および「フロントエンドサーバ」は、区別なく用いられる。他のいくつかの実施形態において、フロントエンドサーバ１０８およびバックエンドサーバ１１０は、１つのソフトウェアアプリケーションまたは１つのサーバシステム１０６に統合される。
【００１１】
[0021]  いくつかの実施形態において、サーバシステム１０６は、電子メールサービス、検索エンジンサービス、地図サービス、ソーシャルネットワーキングサービスなどの異なるタイプのサービスを提供するために、複数のコンピュータ（図１ではＮアプリケーションサーバおよびＮ中央データベースで表されている）にわたって配置される。また、他のいくつかの実施形態において、個別の一タイプのサービスを、複数サーバ間に分散してもよい。例えば、サーバアプリケーション１１０−１が、ウェブベース電子メールサービス（例えば、Ｇｍａｉｌ電子メールアプリケーション）であるシステムを検討する。電子メールメッセージ、会話（例えば、電子メールメッセージリスト）、スレッドリスト（例えば、会話リスト）、ならびにアカウント情報（例えば、ユーザプロファイル、ユーザ選好、およびアカウント履歴）などのデータ項目は、サーバアプリケーション１１０がアクセスできる１つまたは複数の中央データベース１２０に記憶してもよい。サーバアプリケーション１１０は、１つまたは複数の中央データベース１２０に接続してもよい。いくつかの実施形態において、単一のサーバアプリケーション１１０が、単一の中央データベース１２０にアクセスできてもよく（中央データベースに記憶された情報が、単一のサーバアプリケーションによってのみ必要とされる場合など）、一方で、他の実施形態において、複数のサーバアプリケーション１１０が、単一の中央データベース１２０にアクセスでき（少量の情報が多数のサーバアプリケーション１１０によって使用され、かつ情報が頻繁に更新される場合など）、他の実施形態において、複数のサーバアプリケーション１１０が、複数の中央データベース１２０に接続されてもよい（多量のデータが記憶され、多数のサーバアプリケーション１１０によって必要とされる場合など）。
【００１２】
[0022]  ここで、図２に目を向ける。図２は、本発明の一実施形態に従ってコンピュータシステム（例えば、クライアント装置１０２）を示すブロック図である。クライアント装置１０２には、典型的には、１つまたは複数の処理装置（ＣＰＵ）２０２、１つもしくは複数のネットワークまたは他の通信インターフェース２０４、メモリ２１２、およびこれらのコンポーネントを相互接続するための１つまたは複数の通信バス２１４が含まれる。クライアント装置１０２には、オプションとして、表示装置２０６およびキーボード／マウス２０８（または、いくつかの実施形態ではタッチセンシティブ表面２０９）を含むユーザインターフェース２０５を含んでもよい。メモリ２１２には、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＲＡＭまたは他のランダムアクセス固体メモリデバイスなどの高速ランダムアクセスメモリが含まれ、かつ１つまたは複数の磁気ディスク記憶装置、光学ディスク記憶装置、フラッシュメモリデバイス、または他の不揮発性固体記憶装置などの不揮発性メモリを含んでもよい。メモリ２１２には、オプションとして、ＣＰＵ２０２からリモートに位置する１つまたは複数の記憶装置を含んでもよい。メモリ２１２または代替としてメモリ２１２内の不揮発性メモリデバイスには、コンピュータ可読記憶媒体が含まれる。いくつかの実施形態において、メモリ２１２またはメモリ２１２のコンピュータ可読記憶媒体は、以下のプログラム、モジュールおよびデータ構造、またはそれらのサブセットを記憶する。
・  様々な基本システムサービスを扱うための、およびハードウェア依存タスクを実行するための手順を含むオペレーティングシステム２１６。
・  １つまたは複数の通信インターフェース２０４（有線または無線）、およびインターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの１つまたは複数の通信ネットワークを介して、クライアント装置１０２を他のコンピュータに接続するために用いられる通信モジュール２１８。
・  ウェブアプリケーション１１４用のユーザ要求を受信し、かつ要求されたウェブアプリケーション１１４を、ユーザインターフェースモジュール２２８を用いて表示装置２０６または他のユーザインターフェース装置上にレンダリングし、かつデータ項目をローカルデータベース１１６に記憶するためのウェブブラウザ１１２。いくつかの実施形態において、ウェブアプリケーション１１４、ローカルデータベース１１６、およびユーザインターフェースモジュールは、ウェブブラウザ内で実行される。 
○  １つまたは複数のウェブアプリケーション１１４には、ウェブアプリケーション１１４内のオペレーションを調整するためのウェブアプリケーションマネージャ２１９と、ウェブアプリケーションマネージャ２１９からのオペレーションをキューに入れるための書き込みキュー２２０と、ローカルデータベース１１６に書き込むためのアクションディスパッチャ２２２と、（オプションとして）データ項目に対してチェックサムを計算するためのチェックサム計算機２２４と、を含んでもよい。
○  ローカルデータベース１１６は、様々なサーバシステム１０６からウェブアプリケーション１１４において受信されたデータ項目（例えば、２２６−１、２２６−２）を記憶する。 
○  ユーザインターフェースモジュール２２８には、ユーザインターフェースをレンダリングするためのビューモジュール２３０、およびユーザ対話イベントを検出してユーザ対話イベントを他のモジュールに伝達するためのコントローラモジュール２３２が含まれる。
・  データ項目をローカルデータベース１１６に記憶し、かつ情報をウェブアプリケーション１１４に伝達することによって、サーバシステムからの通信に応答するための応答ハンドラモジュール２３４。
【００１３】
[0023]  図２は、「クライアント装置１０２」を示すが、図２に関連して説明するクライアント装置は、本明細書で説明する実施形態の構造概略図としてよりも、クライアント装置１０２に存在し得る様々な特徴の機能的説明として、より一層意図されている。実際には、かつ当業者によって理解されるように、別々に示した項目は、組み合わせることが可能であり、いくつかの項目は、分離することが可能である。例えば、クライアントアプリケーション（例えば、ウェブブラウザ１１２）は、いくつかの実施形態ではオペレーティングシステム２１６と統合してもよい。いくつかの実施形態において、クライアントアプリケーション（例えば、ウェブブラウザ１１２）の様々な機能は、２つ以上の別個のアプリケーションによって実行してもよい。いくつかの実施形態において、ウェブブラウザ１１２の一部として示されたローカルデータベース１１６は、クライアント装置上の複数のクライアントアプリケーションにアクセスできるローカルデータベースとすることが可能である。
【００１４】
[0024]  上記で識別した要素のそれぞれは、前述のメモリデバイスの１つまたは複数に記憶してもよく、かつ上記の機能を実行するための命令セットに対応する。上記で識別したモジュールまたはプログラム（すなわち命令セット）は、別個のソフトウエアプログラム、手順、またはモジュールとして実行する必要はなく、したがってこれらのモジュールの様々なサブセットは、様々な実施形態において、組み合わせるか、さもなければ再配置してもよい。いくつかの実施形態において、メモリ２１２は、上記で識別したモジュールおよびデータ構造のサブセットを記憶してもよい。さらに、メモリ２１２は、上記で説明していない追加のモジュールおよびデータ構造を記憶してもよい。
【００１５】
[0025]  ここで、図３に目を向ける。図３は、本発明の一実施形態に従ってサーバシステム１０６を示すブロック図である。サーバシステム１０６には、典型的には、１つまたは複数の処理装置（ＣＰＵ）３０２、１つもしくは複数のネットワークまたは他の通信インターフェース３０４、メモリ３１２、およびこれらのコンポーネントを相互接続するための１つまたは複数の通信バス３１４が含まれる。メモリ３１２には、ＤＲＡＭ、ＳＲＡＭ、ＤＤＲ  ＲＡＭまたは他のランダムアクセス固体メモリデバイスなどの高速ランダムアクセスメモリが含まれ、かつ１つまたは複数の磁気ディスク記憶装置、光学ディスク記憶装置、フラッシュメモリデバイス、または他の不揮発性固体記憶装置などの不揮発性メモリを含んでもよい。メモリ３１２には、オプションとして、ＣＰＵ３０２からリモートに位置する１つまたは複数の記憶装置を含んでもよい。メモリ３１２または代替としてメモリ３１２内の不揮発性メモリデバイスには、コンピュータ可読記憶媒体が含まれる。いくつかの実施形態において、メモリ３１２またはメモリ３１２のコンピュータ可読記憶媒体は、以下のプログラム、モジュールおよびデータ構造、またはそれらのサブセットを記憶する。
・  様々な基本システムサービスを扱うための、およびハードウェア依存タスクを実行するための手順を含むオペレーティングシステム３１６。
・  １つまたは複数の通信インターフェース３０４（有線または無線）、およびインターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの１つまたは複数の通信ネットワークを介して、サーバシステム１０６を他のコンピュータに接続するために用いられる通信モジュール３１８。
・  サーバシステム１０６とクライアント装置１０２との間で通信を伝達する応答ハンドラモジュール３２０。応答ハンドラモジュールは、別個のフロントエンドサーバ（図１の１０８）と共に、またはその代わりに用いることができる。
・  クライアント装置１０２から受信された要求に対して応答を準備するサーバアプリケーション１１０。いくつかの実施形態において、サーバアプリケーション１１０は、ウェブアプリケーション１１４をクライアント装置１０２に送信する。
・  サーバアプリケーション１１０および／またはウェブアプリケーション１１４に関連するデータ項目（例えば、２２６−１、２２６−２）を記憶するための中央データベース１２０。
・  データ項目に対してチェックサムを計算するためのチェックサム計算機（オプション）３２８。
・  ウェブアプリケーションから受信されたチェックサムを、サーバシステム１０６によって計算されたチェックサムと比較するためのチェックサム比較器（オプション）３３０。
【００１６】
[0026]  図３は、単一サーバシステム１０６を示すが、図３に関連して説明するサーバは、本明細書で説明する実施形態の構造概略図としてよりも、サーバシステムに存在し得る様々な特徴の機能的説明として、より一層意図されている。実際には、かつ当業者によって理解されるように、別々に示した項目は、組み合わせることが可能であり、いくつかの項目は、分離することが可能である。例えば、図３には別々に示されたいくつかの項目は、単一サーバ上で実行することが可能であり、単一項目は、１つまたは複数のサーバによって実行することが可能である。サーバシステム１０６（図１）を実行するために用いられるサーバの実際の数およびタイプ、ならびにそれらの間で機能がどのように割り当てられるかは、インプリメンテーションごとに異なり、かつ平均的な使用期間中とピーク使用期間中とにシステムが扱わなければならないデータトラフィック量に部分的に依存してもよい。
【００１７】
[0027]  上記で識別した要素のそれぞれは、前述のメモリデバイスの１つまたは複数に記憶してもよく、かつ上記の機能を実行するための命令セットに対応する。上記で識別したモジュールまたはプログラム（すなわち命令セット）は、別個のソフトウエアプログラム、手順、またはモジュールとして実行する必要はなく、したがってこれらのモジュールの様々なサブセットは、様々な実施形態において、組み合わせるか、さもなければ再配置してもよい。いくつかの実施形態において、メモリ３１２は、上記で識別したモジュールおよびデータ構造のサブセットを記憶してもよい。さらに、メモリ３１２は、上記で説明していない追加のモジュールおよびデータ構造を記憶してもよい。
【００１８】
[0028]  ここで、図４に目を向ける。図４は、いくつかの実施形態に従ってクライアント／サーバ分散システムのコンポーネント間の相互関係を示すブロック図である。図４に示すように、ユーザインターフェースモジュール２２８には、（例えば、図２のディスプレイ２０６に）ユーザインターフェースをレンダリングするためのビューモジュール２３０と、ユーザ対話イベント（例えば、図２におけるキーボード／マウス２０８またはタッチセンシティブ表面２０９からのマウスクリックまたはキーボード入力）を検出し、かつユーザ対話イベントをウェブアプリケーションマネージャ２１９に伝達するためのコントローラモジュール２３２と、が含まれる。いくつかの実施形態において、コントローラモジュール２３２は、クリック、タッチおよび他のユーザ入力を扱うイベントハンドラ４０２（例えば、クリック／タッチイベントハンドラ）のセットとして実行される。いくつかの実施形態において、最初に全てのイベントハンドラが、アクティビティを表示し、ウェブアプリケーションマネージャ２１９（例えば、いくつかの実施形態では、ＪａｖａＳｃｒｉｐｔ（登録商標）インメモリモデル）に要求を送信し、ウェブアプリケーションマネージャ２１９が、モデルイベントをビューモジュール２３０に返す。ビューモジュール２３０において、モデルイベントハンドラ４０６が、イベントを、ユーザインターフェースレンダラ４０８（例えば、ＨＴＭＬレンダラ）および文書オブジェクトモデル４１０または文書を操作するための他のアプリケーションプログラマインターフェースに伝達する。ユーザインターフェースレンダラ４０８は、レンダリングされたユーザインターフェース要素を文書オブジェクトモデル４１０に送信し、文書オブジェクトモデル４１０は、新しいモデルを構成し、モデルを（例えばユーザに）表示し、かつ新しいモデルをコントローラモジュール２３２に伝達して、イベントハンドラ４０２によって検出された追加のイベントを待つ。
【００１９】
[0029]  いくつかの実施形態において、ウェブアプリケーションマネージャ２１９が、ローカルデータベース１１６におけるデータ項目の１つまたは複数に対して実行されるオペレーションを示すイベントをイベントハンドラ４０２から検出するように構成される場合には、ウェブアプリケーションマネージャ２１９は、オペレーションを書き込みキュー２２０に送信する。いくつかの実施形態において、オペレーション４１２−１、４１２−２、４１２−３、４１２−４、４１２−５、４１２−６は、それらが書き込みキュー２２０に到着した順序で書き込みキュー２２０に記憶される（すなわち、これらの実施形態において、書き込みキューは、ウェブアプリケーションマネージャ２１９からの要求の時系列の記録である）。ウェブアプリケーションマネージャは、ユーザインターフェースモジュール２２８へのコールバックのリスト、書き込みキューにおける各オペレーション（例えば「オペレーション１」４１２−１）用のコールバック、コールバックが呼び出されたか否かを示すフラグ、およびオペレーション（例えば「オペレーション１」４１２−１）を果たさなかった試みのカウンタを維持する。いくつかの実施形態において、アクションディスパッチャ２２２は、書き込みキュー２２０からローカルデータベース１１６および通信モジュール２１８にオペレーション（例えば、「オペレーション１」４１２−１）を送信するように構成される。
【００２０】
[0030]  いくつかの実施形態において、アクションディスパッチャ２２２は、オペレーションをチェックサム計算機に送信するように構成される。チェックサム計算機は、ローカルデータベース１１６に記憶される１つまたは複数のデータ項目のチェックサムを計算する。いくつかの実施形態において、チェックサムは、データ項目と共にローカルデータベース１１６に記憶される。ローカルデータベース１１６に記憶されたデータ項目用の前のチェックサムがあった場合には、計算されたチェックサムは、記憶されたチェックサムに取って代わる。いくつかの実施形態において、チェックサムは、データ項目全体を用いて計算される。チェックサムは、当該技術分野で周知の標準的なメカニズム（例えば、ＭＤ５チェックサムアルゴリズム（ＩＥＴＦ  ＲＦＣ１３２１）またはＳＨＡ−１（ＦＩＰＳ  ＰＵＢ１８０−１）アルゴリズム）のいずれかで計算することができる。図８Ａ−８Ｄに関連して以下でより詳細に説明するが、いくつかの実施形態において、データ項目用のチェックサムは、データ項目が更新されたかどうかを判定するために用いられる。
【００２１】
[0031]  いくつかの実施形態において、通信モジュール２１８は、アクションディスパッチャ２２２から受信されたオペレーション（例えば、「オペレーション１」４１２−１）をサーバシステムにおける応答ハンドラモジュール３２０に送信するように構成される。いくつかの実施形態において、応答ハンドラモジュール３２０は、オペレーションをサーバアプリケーション１１０に伝達するように構成される。いくつかの実施形態において、サーバアプリケーション１１０は、オペレーションを実行する要求の受信に応じ、（例えば、要求に含まれた、データ項目に関連する一意の識別子を用いて）中央データベース１２０から１つまたは複数のデータ項目を検索するように構成される。いくつかの実施形態において、サーバアプリケーション１１０は、オペレーションの結果（例えば、データ項目および／またはデータ項目のチェックサム）を応答ハンドラ３２０に返すように構成され、応答ハンドラ３２０は、結果をクライアント装置１０２に送信するように構成される。いくつかの実施形態において、ローカルデータベース１１６が、中央データベース１２０と同期されていない（すなわち、コヒーレントでない）場合には、応答には、ローカルデータベース１１６を中央データベース１１６とコヒーレントに戻すために必要とされる交換データ項目またはデータ項目のコンポーネントが含まれる。いくつかの実施形態において、ローカルデータベース１１６が中央データベース１２０と同期されている（すなわち、コヒーレントである）場合には、応答は、ローカルデータベース１１６におけるデータ項目が最新であることを示す（例えば、応答は、データ項目もデータ項目の要素も含まない）。
【００２２】
[0032]  いくつかの実施形態において、クライアント装置１０２上の通信モジュール２１８は、サーバアプリケーション１１０からの結果を、クライアント装置上の応答ハンドラモジュール２３４に伝達する。いくつかの実施形態において、オペレーションの結果は、ローカルデータベース１１６に記憶され、かつ／またはウェブアプリケーションマネージャ２１９に返される。いくつかの実施形態において、オペレーションは、表示オペレーションであり、データ項目はユーザに表示される。
【００２３】
[0033]  例えば、ユーザが、携帯機器上で電子メールアプリケーションを見ており、電子メールを見るために電子メールのヘッダを選択するシナリオを検討する。この例において、携帯機器上で電子メールメッセージを見る要求は、ウェブアプリケーションマネージャ２１９によって書き込みキュー２２０に送信される。アクションディスパッチャ２２２が、電子メールをローカルデータベース１１６において見つけた場合には、電子メールは、ユーザに表示するために、ウェブアプリケーションマネージャ２１９に送信される。アクションディスパッチャ２２２が、ローカルデータベース１１６において電子メールを見つけられなかった場合には、メッセージの要求が、電子メールデータベース１２０を備えたサーバシステム１０６に送信され、中央データベース１２０からの電子メールが、クライアント装置１０２に返される。この実施形態において、電子メールメッセージは、応答ハンドラ２３４に返され、応答ハンドラ２３４は、ローカルデータベース１１６に電子メールを記憶し、それを、ユーザに表示するために、ウェブアプリケーションマネージャ２１９に伝達する。
【００２４】
[0034]  ここで、図５Ａ−５Ｃに目を向ける。図５Ａ−５Ｃは、いくつかの実施形態に従ってクライアント／サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示す。
【００２５】
[0035]  クライアント１０２における起動コストを低減するために、マルチスレッドソフトウェアアプリケーションは、図５Ａ−５Ｃに示すような複数の段階にプロセスをそれぞれ分割する。初期化段階５１０において、ソフトウェアアプリケーションは、最初に、メインスレッド５０２上でメインアプリケーションを開始する。いくつかの実施形態において、ソフトウェアアプリケーションは、携帯電話などの携帯機器上のウェブベース電子メールサービスである。メインスレッド上のメインアプリケーションは、サービスのユーザインターフェースとのユーザ対話を扱う役割を担う。いくつかの実施形態において、メインアプリケーションは、単一スレッドである。他のいくつかの実施形態において、メインアプリケーションは、マルチスレッドである。
【００２６】
[0036]  図５Ａに示すように、アプリケーションの初期化後に、メインアプリケーションスレッド５０２とローカルデータベース１１６との間に同期接続５０６が存在する。ローカルデータベース１１６は、電子メールサービスに関連する所定のデータ量をキャッシュする。ローカルデータベースのより詳細な説明は、図６Ｂに関連して以下で提供する。同期接続５０６を介して、メインスレッド５０２におけるメインアプリケーションは、ローカルデータベース１１６からデータ記録を検索すること、およびローカルデータベース１１６においてデータ記録を更新することなど、ローカルデータベース１１６上でオペレーションを同期して実行することができる。
【００２７】
[0037]  また、メインスレッド５０２とリモートサーバシステム１０６におけるサーバアプリケーション３２２との間に非同期接続５１４が存在する。ウェブベースソフトウェアアプリケーションの一部として、クライアント１０２においてメインアプリケーションによってレンダリングされる全ての電子メールメッセージは、結局、サーバアプリケーション３２２から来るが、サーバアプリケーション３２２は、サーバ側において中央データベース１２０における電子メールメッセージを管理する。サーバアプリケーション３２２および中央データベース１２０のより詳細な説明は、図６Ａおよび７Ａ−７Ｂに関連して以下で提供する。以下で説明するように、メインアプリケーションは、データがローカルデータベース１１６に存在しない場合には、非同期接続５１４を用いて、中央データベース１２０からデータ検索する。
【００２８】
[0038]  いくつかの実施形態において、メインスレッド５０２におけるメインアプリケーションの初期化には、ユーザインターフェースをクライアント１０２で表示すること、所定のデータ量をローカルデータベース１１６から検索すること、および検索されたデータをユーザインターフェースに読み込むことが含まれる。例えば、ウェブベース電子メールサービスの初期化中に、メインスレッド５０２上のメインアプリケーションは、同期接続５０６を用いて、ユーザの電子メールアカウントの受信箱フォルダに関連する電子メールメッセージをローカルデータベース１１６から検索する。なぜなら、電子メールサービスの平均的なユーザは、ユーザ宛ての、受信箱フォルダ内の未読メッセージを最初に見ることに最も関心があると仮定されているからである。同期接続５０６を介してローカルデータベース１１６からメッセージを検索した後で、メインアプリケーションは、検索されたメッセージを用いて、電子メールサービスに関連するユーザインターフェースにデータを読み込み、クライアント１０２のユーザが、少なくとも受信箱フォルダにおけるメッセージと対話できるようにする。図５Ａに示すようなメインアプリケーションの初期化は、電子メールサービス全体の起動で終えなくてもよいが、受信箱フォルダにおける未読メッセージにできるだけ速くアクセスできることは、電子メールサービスに対する平均的なユーザの体験を著しく改善することができる。
【００２９】
[0039]  受信箱フォルダにデータを読み込むことに加えて、電子メールサービスの起動プロセスは、他のフォルダに関連する電子メールメッセージをローカルデータベース１１６からフェッチすること、およびローカルデータベース１１６を中央データベース１２０と同期させることなどの他のタスクを実行してもよい。その結果、起動プロセス全体の完了には、クライアント１０２における異なるコンポーネント間、およびクライアント１０２とサーバ１０６との間のかなりのデータ送信量を伴う可能性がある。メインスレッド５０２が、これらのタスクのいくつかを同期して扱う役割を担う場合には、それは、タイミングよくユーザインターフェースを呼び出してユーザ命令を受信する準備ができない可能性がある。さらに、初期化後に、ウェブアプリケーションは、データベース１１６における大きなデータ項目にアクセスすること、大きなグラフィックファイルをレンダリングすること、ネットワークを渡るダウンロードもしくは同期プロトコルを管理すること、ファイルの読み出しもしくは書き込みを実行すること、またはメインスレッド５０２によって同期して実行される場合には、ウェブアプリケーションのオペレーションをかなり遅くし、かつしたがってユーザ体験を損なう可能性がある、クライアント装置上の計算集約的なタスクを実行することなど、進行中のタスクを実行する必要があり得る。いくつかの実施形態において、これらのオペレーションの少なくともいくつかは、メインスレッド５０２によって直接実行できるが、メインスレッドと非同期で対話できる第２のスレッド上で動作する１つまたは複数の補助プロセスに委ねられ、それによってメインスレッド５０２上の負荷を低減する。これらの第２のスレッドがない場合には、メインスレッド５０２は、同期オペレーションが完了して結果を返すのを待つ必要ゆえに、ウェブアプリケーションの進行を妨げることになろう。
【００３０】
[0040]  したがって、いくつかの実施形態において、電子メールサービスの準備ができているという印象をユーザに与える初期化段階５１０には、第２の段階５２０が続き、第２の段階５２０では、補助プロセスが、第２のスレッド５０４上で初期化される。上記のように、補助プロセスの目的は、メインスレッドによって実行された場合にはウェブアプリケーションの進行を妨げることになる同期タスクを実行することである。第２のスレッド５０４の開始を遅らせることによって、起動プロセス全体の役割をメインスレッド５０２に担わせることにより引き起こされる待ち時間は、回避されるかまたは少なくともかなり低減される。さらに、ウェブアプリケーションを開始することに関連する１つまたは複数の同期オペレーションをメインスレッド５０２が実行してしまう後まで、第２のスレッド５０４の開始を遅らせることによって、第２のスレッドを生成／初期化するコストは、ユーザがアプリケーションを使用し始めることができる後まで遅らせることができる。第２のスレッドを生成／初期化するコストには、ウェブアプリケーションコードをフェッチし、解析し、かつ初期化するために必要な時間が含まれるが、その時間は、携帯機器およびアプリケーションに依存して、１秒ほど、またはそれより長くかかる可能性がある。起動時にこの遅延を回避することによって、ユーザは、アプリケーションをほとんど瞬間的に使用し始めることができる。
【００３１】
[0041]  図５Ｂに示すように、メインスレッド５０２は、メインスレッド５０２におけるメインアプリケーションがメインスレッド５０２とローカルデータベース１１６との間の送信を終えた後で、例えば、電子メールサービスの受信箱フォルダにデータを読み込んだ後で、第２のスレッド５０４を生成する。第２のスレッド５０４における補助プロセスが、ローカルデータベース１１６と通信するために、およびウェブベース電子メールサービスアプリケーションを開始する残りのタスクを完了するために、メインスレッド５０２におけるメインアプリケーションの代わりをするように生成されることに留意されたい。また、第２のスレッド５０４とローカルデータベース１１６との間に同期接続５１２が存在する。この接続５１２を介して、補助プロセスは、メインアプリケーションが接続５０６を介して実行できる、ローカルデータベース１１６上の同じオペレーションを実行することができる。いくつかの実施形態において、補助プロセスは、メインアプリケーションによって残された、ウェブベースアプリケーションを初期化する残りのタスクを完了するように構成される。他のいくつかの実施形態において、メインアプリケーションは、ウェブベースアプリケーションの初期化に関連する全てのタスクを完了する。したがって、補助プロセスは、主として、メインスレッド５０２によって行われた、ローカルデータベース１１６と対話する役割に取って代わる役を担う。
【００３２】
[0042]  図５Ｃに示すように、メインスレッド５０２と第２のスレッド５０４との間に非同期接続５０８が存在する。同期接続５１２の確立と共に、メインアプリケーションは、もはや、それが初期化段階５１０中に行ったように同期接続５０６を介してローカルデータベース１１６上でオペレーションを直接実行する必要はない。より正確に言えば、今や、アプリケーション全体は、安定したオペレーションの段階５３０へと移動する。安定したオペレーション中に、メインアプリケーションは、非同期接続５０８を介し第２のスレッド５０４において補助プロセスと通信する。この通信のより詳細な説明は、図５Ｄに関連して以下で提供する。その結果、いくつかの実施形態において、メインスレッド５０２とローカルデータベース１１６との間の同期接続５０６は、（図５Ｃに破線で示すように）終了されるかまたは破棄される。他のいくつかの実施形態において、同期接続５０６は、まだ存在するが不活性化される。
【００３３】
[0043]  ここで、図５Ｄに目を向ける。図５Ｄは、いくつかの実施形態に従って、起動時におけるクライアントとサーバとの間の対話と、クライアントシステム上のウェブベースソフトウェアアプリケーションとサーバシステムとの間でデータを転送するための後続のオペレーションとを説明する。
【００３４】
[0044]  最初に、メインアプリケーションが、メインスレッド５０２上で開始される（５４０）。いくつかの実施形態において、メインアプリケーションは、ユーザインターフェースをクライアント装置に表示し（５４２）、ローカルデータベースからデータを検索し（５４４）、検索されたデータをユーザインターフェースに読み込む（５４６）。例えば、この時点におけるウェブベース電子メールサービスは、ユーザインターフェースを介してユーザによって選択された電子メールメッセージを表示し、かつユーザインターフェースを介してユーザが入力したテキストを受信することによって、クライアント装置とのユーザ対話に応答する準備ができている。
【００３５】
[0045]  前述のオペレーションを実行した後で、メインアプリケーションは、アイドル状態に入り、次のユーザ命令を待つ（５４８）。しかし、ローカルデータベースとの後続の対話は、ユーザがクライアント装置と対話するのを妨げる可能性があり、この対話からメインアプリケーションを解放するために、補助プロセスが、第２のスレッド５０４上で開始される（５５０）。いくつかの実施形態において、補助プロセスは、その開始が、ユーザ命令にメインアプリケーションが応答するのをひどく妨げない限り、図５Ｄにおいて破線によって示すように、より早く開始してもよい。次に、補助プロセスは、メインアプリケーションとの非同期接続を確立し（５５２）、かつローカルデータベースとの同期接続を確立する（５５４）。いくつかの実施形態において、この時点で、補助プロセス／第２のスレッド５０４は、データベースを扱う準備ができており、「準備完了」メッセージをメインスレッド５０２に返し、その後メインスレッドは、実行しても安全な場合には、ローカルデータベースオペレーションに対する責任を補助プロセス／第２のスレッド５０４へ引き継ぐ。いくつかの実施形態において、これは、メインスレッドが、それが扱っている同期データベースオペレーションの合間にあるときである。
【００３６】
[0046]  ここで、メインアプリケーションが、続いて、ローカルデータベースからデータを検索するユーザ命令を受信する（５５８）と仮定する。この瞬間には、補助プロセスは開始されており、メインアプリケーションとローカルデータベースとの間の同期接続（５０６、図５Ｃ）は、終了されている可能性がある。したがって、メインアプリケーションは、メインスレッドと第２のスレッドとの間の非同期接続を介して補助プロセスにデータアクセス要求を送信する（５６０）。データアクセス要求を受信すると（５６２）、補助プロセスは、第２のスレッドとローカルデータベースとの間の同期接続を介して、ローカルデータベースから、もしあればデータを検索しようと試み（５６４）、かつメインスレッドとの非同期接続を介してメインアプリケーションに応答を返す（５６８）。
【００３７】
[0047]  いくつかの実施形態において、ローカルデータベースが、メインアプリケーションによって要求されたデータを有していない可能性があることに留意されたい。例えば、ユーザ命令が、ウェブベース電子メールサービスをリフレッシュすることである場合には、ローカルデータベースは、まだ最新のメッセージを受信箱に有していない可能性がある。したがって、補助プロセスから応答を受信すると（５７０）、メインアプリケーションは、最初に、応答が、要求されたデータを含むか否かを判定する。真（５７２、ｙｅｓ）の場合には、メインアプリケーションは、次に、検索されたデータを用いて、ユーザインターフェースを更新する（５９０）。偽（５７２、ｎｏ）の場合には、メインアプリケーションは、非同期接続５１４を介してリモートサーバアプリケーション３２２にデータ要求を送信する（５７４）。
【００３８】
[0048]  データ要求を受信すると（５７６）、リモートサーバアプリケーションは、要求されたデータを中央データベース１２０から検索し、要求されたデータをクライアント装置に返す（５７８）。クライアント側において、要求されたデータを受信した（５８０）後で、メインアプリケーションは、２つのオペレーション、すなわち、（ｉ）非同期接続を介してデータ更新要求を補助プロセスに送信することと（５８２）、（ｉｉ）ユーザインターフェースを更新することと（５９０）、を実行する。２つのオペレーションが、任意の順序で、または並列に実行可能であることに留意されたい。サーバアプリケーションによって返されたデータを含むデータ更新要求を受信すると（５８６）、補助プロセスは、ローカルデータベースを更新する（５８８）。
【００３９】
[0049]  ここで、図５Ｅに目を向ける。図５Ｅは、いくつかの実施形態に従ってマルチスレッドソフトウェアアプリケーションに関連する複数のスレッドの起動プロセスを説明する。起動プロセスは、１つまたは複数のプロセッサと、１つまたは複数のプロセッサによって実行されるプログラムを記憶するメモリと、を有する計算装置によって実行される。例示的な計算装置には、デスクトップコンピュータ、ラップトップコンピュータ、ならびにＰＤＡおよび／または音楽プレーヤ機能などの他の機能もまた含む携帯電話などの携帯通信装置が含まれる。
【００４０】
[0050]  いくつかの実施形態において、計算装置は、最初に、第１のスレッド上でメインアプリケーションを初期化する（５３２）。メインアプリケーションは、ターゲットアプリケーションとの第１の同期接続を有する。例示的なターゲットアプリケーションには、計算装置におけるデータベースアプリケーション、計算装置において画像をレンダリングするためのアプリケーション、ファイルをアクセス、転送またはダウンロードするためのアプリケーション、および数値計算などを実行するためのアプリケーションが含まれる。実例のために、後続の説明は、ウェブベース電子メールサービスに向けられ、ターゲットアプリケーションは、クライアント装置上で実行されるローカルデータベースである。しかし、当業者は、同じ方法論を他のタイプのソフトウェアアプリケーションに適用できるであろうが、これらの他のタイプのソフトウェアアプリケーションは、プロセスが、アプリケーションの起動コストを遅らせることができ、したがってユーザ体験を改善できる限り、ウェブベースであってもなくてもよい。
【００４１】
[0051]  いくつかの実施形態において、初期化後に、メインアプリケーションは、携帯電話の表示パネルなど、計算装置にユーザインターフェースを表示する（５３２−１）。ユーザインターフェースには、携帯電話のユーザに向けられた電子メールメッセージを含む、電子メールサービスの受信箱フォルダのアイコンを含んでもよい。ユーザインターフェースとのユーザ対話をサポートするために、計算装置は、これらの電子メールメッセージなどのデータをデータベースアプリケーションから検索し（５３２−２）、電子メールメッセージをユーザインターフェースに読み込む（５３２−３）。メインアプリケーションの初期化の終了後に、ユーザは、着信メッセージを見ること、新しいメッセージを作成すること、および既存メッセージを削除することなど、電子メールサービスによってサポートされた様々な命令を出すことができなければならない。
【００４２】
[0052]  メインアプリケーションが、第１の同期接続を介しローカルデータベースにおいて１つまたは複数のオペレーションを実行した後で、計算装置は、第２のスレッド上で補助プロセスを初期化する（５３４）。いくつかの実施形態において、補助プロセスは、ターゲットアプリケーションとの第２の同期接続、およびメインアプリケーションとの非同期接続を有する（例えば図５Ｂを参照）。いくつかの実施形態において、メインアプリケーションとローカルデータベースとの間の第１の同期接続は、補助プロセスが初期化され、かつメインアプリケーションとターゲットアプリケーションとの間の通信ユニットが完了した後で終了される（５３４−１）。例えば、検索されたメッセージをユーザインターフェースに読み込んだ後で、メインアプリケーションは、もはや、ローカルデータベースとの直接接続を維持しなくてもよい。代わりに、メインアプリケーションは、補助プロセスが初期化された後で、補助プロセスから準備完了通知を受信するのを待つ。この準備完了通知は、補助プロセスが、非同期接続を介してメインアプリケーションからデータアクセス要求を受け入れ、かつ次に、同期接続を介してローカルデータベース上で要求を実行する準備ができていることを示す。その結果、メインアプリケーションは、ローカルデータベースを管理することから解放され、かつ電子メールサービスと共にユーザ命令を処理することに集中する。
【００４３】
[0053]  補助プロセスの初期化、およびメインアプリケーションによるモジュールタスク（例えば、ユーザインターフェースにデータが読み込まれる）の完了後に、メインアプリケーションは、ユーザ命令を処理する準備ができている。ローカルデータベースにおける電子メールメッセージを削除するなどのユーザ命令を受信すると、メインアプリケーションは、補助プロセスに要求を送信する。非同期接続を介してメインアプリケーションから要求を受信すると（５３６）、補助プロセスは、第２の同期接続を介しターゲットアプリケーションにおいて１つまたは複数のオペレーションを実行する（５３８）。いくつかの実施形態において、補助プロセスは、非同期接続を介してメインアプリケーションからデータ要求を受信し（５３６−１）、ローカルデータベースにアクセスする。
【００４４】
[0054]  データ要求の受信に応じて、補助プロセスは、データベースアプリケーションにおいてデータ要求を同期して実行し（５３８−１）、かつデータ要求に対する応答をデータベースアプリケーションから受信する（５３８−２）。補助プロセスは、データ要求に対する応答をメインアプリケーションに非同期で返す（５３８−３）。応答が、要求されたデータを含む場合には、メインアプリケーションは、そのデータを用いて、ユーザインターフェースを更新してもよい。応答が、要求されたデータを含まない場合には、メインアプリケーションは、要求されたデータ用の新しい要求をリモートサーバシステムに非同期で出して、次に、要求されたデータをリモートサーバシステムから受信する。要求されたデータをリモートサーバシステムから受信した後で、メインアプリケーションは、要求されたデータを補助プロセスに非同期で転送する。補助プロセスは、それに応じて、要求されたデータを用いてデータベースアプリケーションを同期して更新する。
【００４５】
[0055]  ローカルデータベースオペレーションにおける特定の場合に関して本明細書で説明するように、補助プロセス／第２のスレッドの初期化を遅らせることは、以下の条件の１つまたは複数が存在する多数の状況において有用である。すなわち、１）アプリケーションを実行する役割を担うメインスレッドが、補助プロセス／第２のスレッドによって実行されることになっている同期オペレーションを直接実行することができる。２）補助プロセスを生成／初期化することにコストがかかる。３）補助プロセスを生成するために必要とされる作業が、通常、アプリケーションの初期化プロセスの一部である。かかる状況において、メインスレッドが、通常は、初期化において補助プロセスに割り当てられるタスクを実行できるように、かつこれらの初期オペレーションと並列に補助プロセス／第２のスレッドを生成できる（それによって、アプリケーションとの満足なユーザ対話を提供する）ように、かつ次に、実行しても安全な場合には制御を補助スレッドに委ねることができるようにすることは、アプリケーションに対するユーザ体験を改善する。この戦略は、メインアプリケーションスレッドをサポートする同期タスクを実行するために、単一または複数の第２のスレッドを生成する必要がある場合に用いることができる。
【００４６】
[0056]  ここで、図６Ａに目を向ける。図６Ａは、いくつかの実施形態に従ってウェブアプリケーションに関連するサーバシステムにおけるデータ構造を示す。いくつかの実施形態において、中央データベース１２０には、サーバディレクトリ６０２が含まれる。サーバディレクトリ６０２は、一意の識別子（例えば「ユニークＩＤ」６０４−１）を、データ項目（例えば、データ項目１  ２２６−１）のステータス（例えば「ステータス」６０６−１）およびデータ項目の参照（例えば「参照１」６０８−１）に関連付けるルックアップテーブルである。
【００４７】
[0057]  いくつかの実施形態において、一意の識別子（例えば「ユニークＩＤ」６０４−Ｎ）には、データ項目タイプ６０９およびデータ項目識別子６１０が含まれる。いくつかの実施形態において、データ項目タイプ６０９は、一意の識別子によって参照されるデータ項目タイプを示す。例えば、データ項目が会話（例えば、メッセージリスト）である場合には、データ項目タイプ６０９には、「会話」または対応する英数字タグが含まれ、データ項目がスレッドリスト（例えば、会話リスト）である場合には、データ項目タイプ６０９には、「スレッドリスト」または対応する英数字タグが含まれる。代替として、データ項目がスレッドリスト（例えば、会話リスト）である場合には、データ項目タイプ６０９には、スレッドリストの名前が含まれる。例えば、スレッドリストが電子メール受信箱である場合には、データ項目タイプには、英数字タグ「受信箱」が含まれ、スレッドリストにラベル「仕事」に関連する複数の会話が含まれる場合には、データ項目タイプには、英数字タグ「仕事」が含まれる。いくつかの実施形態において、データ項目タイプ識別子は、データ項目タイプ識別子の組み合わせであってもよい。
【００４８】
[0058]  いくつかの実施形態において、データ項目識別子は、（例えば、データ項目タイプ６０９が「会話」であるか、またはデータ項目タイプ６０９が「メッセージ」である）特定タイプであるデータ項目のサブセット内でデータ項目を一意に識別する識別子である。例えば、いくつかの実施形態において、データ項目識別子は、会話ＩＤ（例えば６２０）またはメッセージＩＤである。データ項目が会話（例えば、メッセージリスト）である実施形態において、データ項目識別子は、メッセージリストにおける第１のメッセージのメッセージ識別子である。
【００４９】
[0059]  いくつかの実施形態において、データ項目（例えば２２６−１）のステータス（例えば６０６−１）は、データ項目が更新されたか（例えば、新しいデータ項目と取り替えられた）、修正されたか、またはアクセスされた（例えば、見られた、コピーされた、送信された等）最後の時間を示す。ステータスは、データ項目に対してオペレーションが実行された場合に更新される。
【００５０】
[0060]  いくつかの実施形態において、データ項目に対する参照は、データ項目からデータ項目の各コンポーネントへの参照を含む関係表６１１に対する参照である。いくつかの実施形態において、データ項目は、複数のコンポーネントを有する。例えば、サーバディレクトリ６０２における参照１  ６０８−１は、関係表６１１においてデータ項目１  ２２６−１用の２つのエントリ、すなわちスレッド１  ６１２−１およびスレッド２  ６１２−２を参照する。（この状況が生じるのは、これら２つの会話／スレッドが、参照６０８−１によって識別されるスレッドリストにそれぞれ関連付けられるからである）。いくつかの実施形態において、データ項目は、単一のコンポーネントを有する。例えば、参照２  ６０８−２は、関係表６１１においてデータ項目２  ２２６−２用の単一のエントリ、すなわちスレッド２  ６１２−２を参照する。いくつかの実施形態において、複数の別個のデータ項目に、共通コンポーネントが含まれる。例えば、データ項目１  ２２６−１およびデータ項目２  ２２６−２は、それぞれ、関係表６１１においてスレッド２  ６１２−２に関連する。換言すれば、単一の会話（例えば、メッセージリスト）は、複数のスレッドリストに含んでもよい。例えば、ウェブアプリケーションがウェブベース電子メールアプリケーションであり、かつ電子メールメッセージが会話（例えば、電子メールメッセージの順序付きリスト）に配列される実施形態において、会話の１つまたは複数は、複数のラベルを含んでもよく、各ラベルは、スレッドリストに関連付けられる（例えば、「受信箱」ラベルおよび「仕事」ラベルを含む会話は、「受信箱」スレッドリストおよび「仕事」スレッドリストの両方に関連付けられることになろう）。
【００５１】
[0061]  いくつかの実施形態において、コンポーネントは、メッセージである。上記のように、データ項目には、単一のコンポーネントまたは複数のコンポーネントを含んでもよい。例えば、参照３  ６０８−３（これは、会話用の参照である）は、データ項目３  ２２６−３用の関係表６１１における３つのエントリ、すなわちメッセージ１  ６１４−１、メッセージ２  ６１４−２、およびメッセージ３  ６１４−３を参照し、一方で参照Ｎ  ６０８−Ｎは、関係表における単一のエントリ、すなわちデータ項目Ｎ  ２２６−Ｎ（例えば、メッセージＱ  ６１４−Ｑ）を参照する。
【００５２】
[0062]  いくつかの実施形態において、関係表における関係が、スレッド（例えば、スレッド１  ６１２−１）に対するものである場合には、関係は、複数のスレッド（例えば、スレッド１  ６１２−１、スレッド２  ６１２−２、およびスレッドＰ  ６１２−Ｐ）を含むスレッド表６１６を参照する。スレッド表６１６において、各スレッドは、スレッドに関する会話識別子６２０および会話情報６２２に関連付けられる。会話識別子６２０は、会話に関連しているメッセージを識別するために、サーバシステムによって用いられる識別子である。いくつかの実施形態において、会話情報６２２には、会話に含まれたメッセージの件名、会話における最新のメッセージを要約する短い「抜粋」、および／またはメッセージリストが含まれる。
【００５３】
[0063]  いくつかの実施形態において、関係表における関係が、メッセージ（例えば、メッセージ１  ６１４−１）に対するものである場合には、関係は、複数のメッセージ（例えば、メッセージ１  ６１４−１、メッセージ２  ６１４−２、メッセージ３  ６１４−３、メッセージＱ  ６１４−Ｑ）を含むメッセージ表６１８を参照する。メッセージ表６１８において、各メッセージは、メッセージに関するメッセージ情報６２４に関連付けられる。いくつかの実施形態において、メッセージ情報６２４には、任意の添付ファイルを含むメッセージのテキストが含まれる。
【００５４】
[0064]  ここで、図６Ｂに目を向ける。図６Ｂは、いくつかの実施形態に従って、クライアント装置におけるウェブアプリケーションに関連付けられたデータを示す。いくつかの実施形態において、ローカルデータベース１１６には、クライアントディレクトリ６５２が含まれる。クライアントディレクトリ６５２は、一意の識別子（例えば、「ユニークＩＤ」６０４−１）を、データ項目（例えば、データ項目１  ２２６−１）のステータス（例えば、「ステータス」６５６−１）およびデータ項目に対する参照（例えば、「参照１」６６０−１）と関連付けるルックアップテーブルである。いくつかの実施形態において、チェックサム（例えば、６５８−１、６５８−２、６５８−３、６５８−Ｍ）が、キャッシュコヒーレンスを維持するために用いられる場合には、各データ項目（例えば、２２６−１）用のチェックサムであるチェックサム（例えば、６５８−１）が、ローカルデータベース１１６に記憶され、データ項目に関連付けられる。図６Ｂに示す実施形態において、チェックサム（例えば、６５８−１）は、クライアントディレクトリ６５２に記憶される。しかしながら、チェックサムは、ローカルデータベース１１６の別の部分に記憶され得ることを理解されたい。
【００５５】
[0065]  いくつかの実施形態において、一意の識別子（例えば、「ユニークＩＤ」６０４−Ｎ）には、図６Ａに関連して上記でより詳細に説明したように、データ項目タイプ６０９およびデータ項目識別子６１０が含まれる。いくつかの実施形態において、サーバ上の一意の識別子（例えば、図６Ａにおける「ユニークＩＤ」６０４−１）は、クライアント上の一意の識別子（例えば、図６Ｂにおける「ユニークＩＤ」６０４−１）と同一であり、かつ両方の一意の識別子が同じデータ項目に関連付けられることを示す。
【００５６】
[0066]  いくつかの実施形態において、データ項目（例えば、２２６−１）のステータス（例えば、６５６−１）は、データ項目が、更新された（例えば、新しいデータ項目と取り替えられた）か、修正されたか、またはアクセスされた（例えば、見られた、コピーされた、送信された等）最後の時間を示す。ステータスは、データ項目に対してオペレーションが実行された場合に更新される。いくつかの実施形態において、サーバ上のデータ項目のステータス（例えば、図６Ａにおける６０６−２）、およびクライアント上の同じデータ項目のステータス（例えば、図６Ｂにおける６５６−２）は、（例えば、ローカルデータベースおよび中央データベースが同期されている場合には）同一である。いくつかの実施形態において、サーバ上のデータ項目のステータス（例えば、図６Ａにおける６０６−３）、およびクライアント上の同じデータ項目のステータス（例えば、図６Ｂにおける６５６−３）は、（例えば、ローカルデータベースおよび中央データベースが同期されていない場合には）異なる。
【００５７】
[0067]  いくつかの実施形態において、データ項目への参照は、データ項目とデータ項目の各コンポーネントとの間の関係を含む関係表６６６への参照である。いくつかの実施形態において、データ項目は、複数のコンポーネントを有する。例えば、クライアントディレクトリ６５２における参照１  ６６０−１は、関係表６６６においてデータ項目１  ２２６−１用の２つのエントリ、すなわちスレッド１  ６６８−１およびスレッド２  ６６８−２を参照する。（この状況が生じるのは、これら２つの会話／スレッドが、参照６０８−１によって識別されたスレッドリストにそれぞれ関連付けられるからである）。いくつかの実施形態において、データ項目は、単一のコンポーネントを有する（例えば、参照２  ６６０−２は、関係表６６６においてデータ項目２  ２２６−２用の単一のエントリ、すなわちスレッド２  ６６８−２を参照する）。いくつかの実施形態において、複数の別個のデータ項目には、共通コンポーネントが含まれる。例えば、データ項目１およびデータ項目２には、それぞれ、スレッド２  ６６８−２に対する関係が含まれる。換言すれば、単一の会話（例えば、メッセージリスト）は、複数のスレッドリストに含んでもよい。例えば、ウェブアプリケーションがモバイル電子メールアプリケーションであり、かつ電子メールメッセージが会話に配列される実施形態において、会話の１つまたは複数は、複数のラベルを含んでもよく、各ラベルは、スレッドリストに関連付けられる（例えば、「受信箱」ラベルおよび「仕事」ラベルを含む会話は、「受信箱」スレッドリストおよび「仕事」スレッドリストの両方に関連付けられることになろう）。
【００５８】
[0068]  いくつかの実施形態において、コンポーネントは、メッセージである。上記のように、データ項目には、単一のコンポーネントまたは複数のコンポーネントを含んでもよい。例えば、参照３  ６６０−３（これは、会話への参照である）は、関係表６６６においてデータ項目３  ２２６−３用の２つのエントリ、すなわちメッセージ１  ６７０−１およびメッセージ２  ６７０−２を参照し、一方で参照Ｍ  ６６０−Ｍは、関係表において単一のエントリであるデータ項目Ｍ  ２２６−Ｍ（例えば、「メッセージＳ」６７０−Ｓ）を参照する。
【００５９】
[0069]  いくつかの実施形態において、参照表における参照が、スレッド（例えば、スレッド１  ６６８−１）に対するものである場合には、参照は、複数のスレッド（例えば、スレッド１  ６６８−１、スレッド２  ６６８−２、スレッドＲ  ６６８−Ｒ）を含むスレッド表６７２を参照する。スレッド表６７２において、各スレッドは、スレッドに関する会話識別子６７６および会話情報６７８に関連付けられる。会話識別子６７６は、会話（例えば、メッセージリスト）に関連付けられたメッセージを識別するために、クライアント装置によって用いられる識別子である。いくつかの実施形態において、会話情報６７８には、会話に含まれたメッセージの件名、会話における最新のメッセージを要約する短い「抜粋」、および／またはメッセージリストが含まれる。
【００６０】
[0070]  いくつかの実施形態において、参照表における参照が、メッセージ（例えば、メッセージ１  ６７０−１）に対するものである場合には、参照は、複数のメッセージ（例えば、メッセージ１  ６７０−１、メッセージ２  ６７０−２、メッセージＳ  ６７０−Ｓ）を含むメッセージ表６７４を参照する。メッセージ表６７４において、各メッセージは、メッセージに関するメッセージ情報６８０に関連付けられる。いくつかの実施形態において、メッセージ情報６８０には、任意の添付ファイルを含むメッセージのテキストが含まれる。
【００６１】
[0071]  いくつかの実施形態において、図６Ａおよび６Ｂに示すように、図６Ａにおける中央データベース１２０および図６Ｂにおけるローカルデータベース１１６は、類似のデータ構造を有する。しかしながら、これらのデータ構造に記憶されるデータは、必ずしも同一とは限らない。いくつかの実施形態において、図６Ａにおける中央データベース１２０および図６Ｂにおけるローカルデータベース１１６は、異なるデータ項目、メッセージおよびスレッドをそれぞれのデータ構造に記憶している。いくつかの実施形態において、図６Ｂのローカルデータベース１１６および図６Ａの中央データベース１２０におけるデータ項目、メッセージおよびスレッドは、同期されており（例えば、コヒーレントにされており）同一である。いくつかの実施形態によれば、図８Ａ−８Ｄに関連して以下でより詳細に説明するように、図６Ｂにおけるローカルデータベース１１６および図６Ａにおける中央データベース１２０が同期されていない場合を検出するための、およびデータベースを同期させるための方法が開示される。
【００６２】
[0072]  例えば、図６Ａにおいて、中央データベースは、Ｎデータ項目、ＰスレッドおよびＱメッセージ（ここで、Ｎ、ＰおよびＱは、全て、０を超える整数を表す）を有し、一方で図６Ｂにおいて、ローカルデータベース１１６は、Ｍデータ項目、ＲスレッドおよびＳメッセージ（ここで、Ｍ、ＲおよびＳは、全て、０を超える整数を表す）を有する。いくつかの実施形態において、Ｎ＝Ｍ、Ｐ＝Ｒ、Ｑ＝Ｓであり、図６Ａの中央データベース１２０におけるデータ構造は、図６Ｂのローカルデータベース１１６におけるデータ構造と同一の情報を記憶する。しかしながら、いくつかの実施形態において、図６Ａの中央データベース１２０は、図６Ｂのローカルデータベース１１６に含まれない追加データを含み、かつ／または図６Ｂのローカルデータベース１１６は、図６Ａの中央データベース１２０に含まれない追加データを含む（例えば、中央データベースは、１つまたは複数の新しい電子メールメッセージを受信するウェブベース電子メールサーバに関連付けられ、一方でクライアント装置は、電子メールサーバに接続されず、したがって、中央データベースは、ローカルデータベースに含まれない１つまたは複数の新しい電子メールメッセージを含む。
【００６３】
[0073]  さらに、いくつかの実施形態において、チェックサム６５８−１が、図６Ｂのローカルデータベース１１６に記憶され、一方でそれらが図６Ａの中央データベース１２０に記憶されていないことに留意されたい。より正確に言うと、図８Ａ−８Ｄに関連して以下でより詳細に説明するように、チェックサムは、サーバシステムによってオンザフライで（例えば、「必要に応じて」）計算され、したがって図６Ａの中央データベース１２０には記憶されない。
【００６４】
[0074]  説明の目的で例示的なデータ構造を本明細書で説明したが、それらの代わりに代替データ構造を用いて、上記のデータ項目およびデータ項目に関する関連情報を記憶し得ることを理解されたい。いくつかの実施形態において、複数のデータベースを含む複数のサーバが、データ項目をサーバシステム上に記憶するために用いられ、かかる分散システムに特に適合された様々なデータ構造が使用可能である。１つのかかる代替実施形態において、米国特許出願公開第２００５／０２２２９８５  Ａ１号（これによって、その全体において参照により援用される）に記載のデータ構造などのデータ構造が、中央データベース１２０に記憶されているものとして説明されているデータ項目、会話および関連情報を記憶するために用いられる。例えば、ウェブベース電子メールアプリケーションにおいて、電子メール、会話および他の関連情報は、アクセス速度および耐故障性を改善するために、複数のサーバおよびデータベース間に分散されるように特に適合されたデータ構造で記憶してもよい。
【００６５】
[0075]  ここで、図７Ａ−７Ｂに目を向ける。図７Ａ−７Ｂは、いくつかの実施形態に従って、クライアント上の永続的なウェブアプリケーションとサーバシステムとの間でデータを転送するプロセスにおけるクライアントおよびサーバの役割を示す。クライアント（図２における１０２）は、ローカルウェブアプリケーション（例えば、図２における１１４）を含むクライアントアプリケーション（例えば、図２におけるウェブブラウザ１１２）を有する。いくつかの実施形態において、ローカルウェブアプリケーション（例えば、図２における１１４）は、オンラインモードおよびオフラインモードの両方を有する。例えば、ウェブアプリケーションが、ウェブベース電子メールプログラムである場合には、プログラムは、頻繁に使用される電子メールメッセージのいくつか（例えば、図２におけるデータ項目２２６−１）をローカルデータベース（例えば、図２における１１６）に記憶してもよい。
【００６６】
[0076]  プロセスは、ウェブアプリケーションが、電子メッセージ（例えば、電子メール）、会話（例えば、電子メッセージリスト）またはスレッドリスト（例えば、会話リスト）などのデータ項目にアクセスする必要がある（７０２）場合に始まる。一例において、ウェブアプリケーションは、データ項目を表示するか、データ項目を送信するか、データ項目を編集するか、またはデータ項目に対して他のあるオペレーションを実行する要求をユーザから受信する。クライアントは、データ項目がローカルデータベースにあるかどうかを確認する。データ項目がローカルデータベースで見つかった場合には（７０４）、データ項目は、ローカルデータベースから検索され（７０６）、ウェブアプリケーションは、データ項目を受信する（７０８）。
【００６７】
[0077]  いくつかの実施形態において、ウェブアプリケーションは、オフライン機能を備えたウェブベース電子メールアプリケーション（例えば、Ｇｍａｉｌ）である（例えば、永続的なウェブベースアプリケーションである）。例えば、クライアントがネットワーク接続にアクセスできる場合には、ウェブアプリケーションは、ちょうど通常のウェブベース電子メールインターフェースのように動作し、この場合に、ユーザは、ウェブページにログインし、電子メールメッセージをチェックし、他のオペレーションを実行する。しかしながら、いくつかの実施形態において、ウェブベース電子メールプログラムはオフライン機能を有する。なぜなら、ウェブベース電子メールプログラムが、ウェブアプリケーションによって最もアクセスされそうな電子メールメッセージのいくつかおよび他のローカルアプリケーションデータを記憶するために用いられるローカルデータベースにアクセスできるからである。次に、クライアントが、ネットワーク接続にアクセスできず、かつユーザが、ウェブブラウザを介してウェブベース電子メールプログラムにアクセスしようと試みた場合には、ウェブアプリケーションは、やはり、ユーザが、ローカルデータベースに記憶された電子メールにアクセスし、かつローカルデータベースに記憶された電子メールに対してオペレーションを実行できるようにする。
【００６８】
[0078]  （例えば、ネットワーク待ち時間が大きい）いくつかの実施形態において、ユーザから入力を受信することと、入力によって示されたオペレーションを１つまたは複数のデータ項目に対して実行すること（例えば、表示すること）との間の遅延を低減するために、いくつかのデータ項目をローカルデータベースに記憶することが望ましい。したがって、ローカルデータベースは、サーバシステムから応答を受信する前に、ローカルデータベースにおけるデータ項目に対して、ウェブアプリケーションからの命令を実行できるように、データ項目用のキャッシュとして働くことができる。この構造は、プロセッサによる使用のためにデータをキャッシュすること、およびしたがってデータ要求と、要求されたデータの、マイクロプロセッサによる受信との間の通信待ち時間の影響を低減することによって、ハードウェアシステムにおいてオペレーションの処理を加速するために用いられる、マイクロプロセッサに関連するハードウェアキャッシュと類似している。
【００６９】
[0079]  いくつかの実施形態において、ウェブブラウザの文書オブジェクトモデルは、Ｌ１キャッシュとして用いられる。ハードウェアに見出されるキャッシュの種類が示唆するように、Ｌ１キャッシュとして文書オブジェクトモデルを用いるソフトウェアは、ライトバックまたはライトスルーであることが可能である。いくつかの実施形態において、Ｌ１キャッシュとしての文書オブジェクトモデルフラグメントのライトバックキャッシュは、ウェブアプリケーションが、文書オブジェクトモデルを直接修正することによっていくつかのユーザアクションを実行する場合には、適切である。いくつかの実施形態によれば、ハードウェアキャッシングとの類似性が示唆する実施形態における他の特徴は、データ項目のプリフェッチおよびロードフォワーディング（すなわち、サーバからの応答が、ローカルデータベース１１６に書き込まれる前に、ディスプレイ２０６上に表示するためにウェブブラウザ１１２へ直接転送される場合）である。
【００７０】
[0080]  いくつかの実施形態において、書き込みキュー２２０は、不揮発性メモリに記憶され、その結果、たとえウェブアプリケーションがクラッシュするか、またはウェブアプリケーションが実行されるウェブブラウザがクラッシュしても、その時点までにウェブアプリケーションによって書き込みキューに書き込まれたあらゆるペレーションが保存される。
【００７１】
[0081]  いくつかの実施形態において、要求されたデータ項目は、それがクライアントによって要求されたことがないために、ローカルデータベースにない可能性があり、または要求されたデータ項目は、キャッシュ置換ポリシーゆえにローカルデータベースから削除されたために、ローカルデータベースにない可能性がある。いくつかの実施形態において、ローカルデータベース（例えば、キャッシュ）が一杯であることをシステムが検出した場合には、ローカルデータベース（例えば、キャッシュ）におけるデータ項目の少なくともいくつかは、キャッシュ置換ポリシーに従って削除用の印を付けられるが、これは、複数のオプションの１つにすることができる。
【００７２】
[0082]  いくつかの実施形態において、キャッシュ置換ポリシーは、最長時間未使用のデータ項目がローカルデータベースから最初に削除されるという最長時間未使用（ＬＲＵ）ポリシーである。いくつかの実施形態において、キャッシュ置換ポリシーは、最小頻度でアクセスされるデータ項目がローカルデータベースから最初に削除されるという最小使用頻度ポリシーである。いくつかの実施形態において、キャッシュ置換ポリシーは、どのデータ項目が最も古いかまたは最大のファイルサイズを有するかを含む他のある要因によって決定される。いくつかの実施形態において、キャッシュ置換ポリシーはランダムであり、その場合にデータ項目は、キャッシュからランダムに（すなわち、データ項目に関連するいかなる基準も考慮せずに）削除される。いくつかの実施形態において、キャッシュ置換ポリシーは、（例えば、ある特徴を備えた電子メールが２回以上は読まれない可能性があることを知って）どのデータ項目が、ウェブアプリケーションによって最も必要とされそうもないかを決定する要因の組み合わせに基づいている。一実施形態において、置換優先度は、各データ項目用にサーバで計算されてローカルデータベースに記憶され、ローカルデータベースにおけるデータ項目は、置換優先度によって降順で削除用の印を付けられる。さらに、ハードウェアキャッシュにおいて用いられる任意のキャッシュ置換戦略が、ローカルデータベースにおけるどのデータ項目が削除用の印を付けられるかを決定するためにも使用可能であることを理解されたい。いくつかの実施形態において、クライアントは、削除用の印を付けられた全てのデータ項目をローカルデータベースから定期的に削除する。これらの置換戦略の適用に関する先行技術の教示は、本発明の様々な実施形態に関連する。
【００７３】
[0083]  データ項目がローカルデータベースで見つからず（７１０）、かつクライアントがネットワーク接続を検出できない場合には（７１２）、エラーが、ウェブアプリケーションに返される（７１４）。いくつかの実施形態において、エラーはまた、ウェブアプリケーションのユーザに返される（例えば、表示される）。
【００７４】
[0084]  ネットワーク接続が検出された場合には（７１６）、一意の識別子（例えば、図６Ｂにおける６０４−１）を含む要求が、通信インターフェース（例えば、ウェブインターフェース）を用いてサーバシステムに送信される。サーバシステムは、要求を受信し（７１８）、かついくつかの実施形態において、受信した一意の識別子を、サーバディレクトリ（例えば、図６Ａにおける６０２）における一意の識別子（例えば、図６Ａにおける６０４−１）とマッチングすることによって、中央データベース（例えば、図６Ａにおける１２０）においてデータ項目を調べるために、一意の識別子（例えば、図６Ｂにおける６０４−１）を用いる。サーバシステムは、中央データベースからデータ項目（およびいくつかの実施形態において、データ項目に関連する追加情報）を検索し（７１９）、データ項目（および任意の関連情報）をクライアントに送信する。
【００７５】
[0085]  いくつかの実施形態において、データ項目の圧縮表現のセレクションを検出した後で、データ項目の非圧縮表現（時には拡張表現と呼ばれる）を表示する要求などの要求は、ユーザによって指定される。一例において、電子メール受信箱が表示されるが、電子メール受信箱には、複数の電子メールメッセージまたは電子メールメッセージグループ（例えば、１つまたは複数の関連電子メールメッセージは、単一の会話として１つのヘッダの下でグループにまとめてもよい）用のヘッダ情報（例えば、送信者および件名）が含まれる。この例において、ユーザが、１つの電子メールメッセージまたは会話のヘッダを選択した場合に、ウェブアプリケーションは、電子メールメッセージ全体（ヘッダが単一のメッセージ用のヘッダである場合）または会話における少なくともいくつかの電子メールメッセージのリスト（ヘッダが電子メールメッセージの会話用のヘッダである場合）を表示する。
【００７６】
[0086]  いくつかの実施形態において、要求は、ウェブアプリケーションによって自動的に生成される。いくつかの実施形態において、自動的に生成される要求は、ユーザによって最もアクセスされそうなデータ項目を予めロードすることである。一例において、複数の電子メールメッセージまたは電子メールメッセージグループ（例えば、１つまたは複数の関連する電子メールメッセージは、単一の会話として１つのヘッダの下でグループにまとめてもよい）用のヘッダ情報（例えば、送信者および件名）を含む受信箱が表示される。この例において、ウェブアプリケーションは、受信箱の現在のビューにおけるヘッダのそれぞれに関連するデータ項目の要求を自動的に生成する。受信箱の現在のビューが、次のいずれか１つであり得ることを理解されたい。すなわち、受信箱におけるヘッダの全て（例えば、受信箱におけるメッセージ／会話の全てが要求される）と、受信箱の現在のページに含まれるヘッダの全て（例えば、ユーザが、スクリーン上で、スクロールできる範囲のメッセージ／会話の全てが要求される）と、ディスプレイ上に現在表示されているヘッダの全て（例えば、スクロールせずに、ユーザが現在見ることができるヘッダに関連するメッセージ／会話だけが要求される）と、である。
【００７７】
[0087]  クライアントは、データ項目を受信し（７０８）、データ項目に対してオペレーションを実行する（７２０）。いくつかの実施形態において、オペレーションは、データ項目を更新しない（例えば、電子メールは、ユーザに表示される）。いくつかの実施形態において、オペレーションは、データ項目を更新する（例えば、オペレーションは、電子メールメッセージを、電子メールメッセージの会話に追加するかまたはそこから削除するなどの修正オペレーションである）。オペレーションが、データ項目を更新しない場合には（７２２）、ウェブアプリケーションプロセスは終了する（７２３）。オペレーションがデータ項目を更新する場合には（７２４）、ウェブアプリケーションは、オペレーションを実行する要求を書き込みキュー（例えば、図４における２２０）に入れる（７２６）。いくつかの実施形態において、書き込みキューにおけるオペレーションには、オペレーションに関連する任意のデータ項目の一意の識別子が含まれる（例えば、オペレーションが、それぞれの会話にメッセージを追加することである場合には、オペレーションには、それぞれの会話の一意の識別子が含まれる）。いくつかの実施形態において、サーバシステムは、この一意の識別子を用いて、オペレーションが実行されることになる、中央データベースに記憶されたデータ項目を識別する（例えば、サーバシステムは、中央データベースに記憶されたそれぞれの会話を識別し、それにメッセージを追加する）。
【００７８】
[0088]  いくつかの実施形態において、オペレーションを書き込みキューに入れた後で、ウェブアプリケーションは、ネットワーク接続状態をチェックする（７２８）。クライアントがネットワークに接続されていない場合には（７３２）、クライアント装置は、タイムアウト（７３４）期間の間待機し、ネットワーク接続状態を再チェックする（７２８）。いくつかの実施形態において、ウェブアプリケーションは、オペレーションが書き込みキューに追加されたか否かに基づいて、ネットワーク接続状態を定期的にチェックする（例えば、５分ごと）。
【００７９】
[0089]  クライアント装置がネットワークに接続されていること（７３６）をウェブアプリケーションが検出すると、クライアントメモリに維持された書き込みキューは、接続されたサーバへ送出される。いくつかの実施形態において、実行されたが、（例えば、ネットワーク接続がないために）まだサーバシステムに送信されていないユーザアクションが、ウェブブラウザがクラッシュした場合に保存されるように、書き込みキューが不揮発性メモリに維持されることが重要である。いくつかの実施形態において、書き込みキューは、オペレーションが書き込みキューに追加された順序で送出される（例えば、最も古いオペレーションが、サーバシステムに最初に送信され、２番目に古いオペレーションが後に続く等である）。いくつかの実施形態において、書き込みキューにおけるアクションが、キューに追加された順序で実行されて、同じデータ項目を修正する複数のオペレーションがある場合にオペレーションが正確な順序で実行されることを保証するようにすることが重要である。（例えば、第１のオペレーションが、ラベル「仕事」をそれぞれのメッセージ／会話に適用し、第２のオペレーションが、「仕事」ラベルに関連する全てのメッセージ／会話に、メッセージ／会話がユーザによって読まれたことを示すフラグを付ける）。
【００８０】
[0090]  いくつかの実施形態において、サーバシステムは、ウェブアプリケーションから要求を受信し（７４０）、かつ（例えば、要求に関連する一意の識別子によって示された１つまたは複数のデータ項目に対して、要求に示されたオペレーションを実行することによって）要求に応答する（７４２）。いくつかの実施形態において、オペレーションによって修正されたあらゆるデータ項目が、サーバシステム上の中央データベースに記憶される（７４４）。いくつかの実施形態において、要求への応答には、任意の修正されたデータ項目を含む応答をクライアント上のウェブアプリケーションに送信することが含まれる。クライアントは、応答を受信し（７４６）、あらゆる修正されたデータ項目をローカルデータベースに記憶する（７４８）。いくつかの実施形態において、クライアントは、オペレーションを実行する要求に対する任意の応答をサーバから受信する代わりに（またはその前に）、オペレーションが書き込みキューから送出されるときにローカルデータベースにおいてデータ項目を修正する。
【００８１】
[0091]  ここで、図８Ａ−８Ｄに目を向ける。図８Ａ−８Ｄは、いくつかの実施形態に従い、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す。いくつかの実施形態において、クライアントには、サーバシステム、またはクライアント装置とは異なる他の別個の計算装置における中央データベースと同期される（例えば、コヒーレントにされる）必要のあるローカルデータベースが含まれる。一例において、ウェブアプリケーションは、電子メールメッセージ、関連する電子メールメッセージリスト（例えば、会話）、および関連する会話リスト（例えば、スレッドリスト）を記憶するウェブベース電子メールアプリケーションである。この例において、ウェブベース電子メールアプリケーションは、電子メールアカウントにおけるメッセージ／会話へのアクセス権をユーザに提供し、かつウェブアプリケーション（例えば、ウェブベース電子メールにアクセスするためのアプリケーション）を、サーバアプリケーション（例えば、電子メールアカウントに関連する電子メール／会話の全てを管理する電子メールサーバ）と同期させておくことが望ましい。
【００８２】
[0092]  プロセスは、ウェブアプリケーションが、電子メッセージ（例えば、電子メール）、会話（例えば、電子メッセージリスト）、またはスレッドリスト（例えば、会話リスト）などのデータ項目にアクセスする（８０２）必要がある場合に始まる。一例において、ウェブアプリケーションは、データ項目を表示する要求をユーザから受信するか、データ項目を送信するか、データ項目を編集するか、またはデータ項目に対して他のあるオペレーションを実行する。クライアントは、データ項目がローカルデータベースにあるかどうかを確認する。データ項目が、ローカルデータベースで見つかった（８０４）場合には、データ項目は、ローカルデータベースから検索され（８０６）、ウェブアプリケーションは、データ項目を受信する（８０８）。いくつかの実施形態において、以下でより詳細に説明するように、ローカルデータベースから検索されたデータ項目には、前にローカルデータベースに記憶された第１のチェックサムが含まれる。
【００８３】
[0093]  いくつかの実施形態において、ウェブアプリケーションは、オフライン機能を備えたウェブベース電子メールアプリケーション（例えば、Ｇｍａｉｌ）である。例えば、クライアントがネットワーク接続にアクセスできる場合に、ウェブアプリケーションは、ちょうど通常のウェブベース電子メールインターフェースのように動作し、ユーザは、ウェブページにログインし、電子メールメッセージをチェックし、他のオペレーションを実行する。しかしながら、いくつかの実施形態において、ウェブベース電子メールアプリケーションは、オフライン機能、すなわち、ウェブアプリケーションによって最もアクセスされそうな電子メールメッセージのいくつかを記憶するローカルデータベースへのアクセス権をアプリケーションに提供することによって可能にされるオフライン機能を有する。次に、クライアントが、ネットワーク接続にアクセスできず、ユーザが、ウェブブラウザを介してウェブベース電子メールプログラムにアクセスしようと試みた場合には、ウェブアプリケーション（例えば、ウェブベース電子メールアプリケーション）は、やはり、ユーザが、ローカルデータベースに記憶された電子メールにアクセスし、かつローカルデータベースに記憶された電子メールに対してオペレーションを実行できるようにする。
【００８４】
[0094]  いくつかの実施形態において、クライアントは、図７Ａ−７Ｂに関連して上記でより詳細に説明したように、ローカルデータベースに記憶されたデータ項目にアクセスすることと、データ項目に対して実行されたオペレーションを検出することと、データ項目の識別子と共に、オペレーションを特徴付ける情報を書き込みキューに書き込むことと、更新されたデータ項目のチェックサムを計算することと、計算されたチェックサムをローカルデータベースに記憶することとを含むオフラインモードで動作する。いくつかの実施形態において、ネットワーク接続が、ウェブアプリケーションとサーバシステムとの間で検出される場合には、クライアントは、書き込みキューをサーバシステム（例えば、ウェブベース電子メールサーバまたはサーバシステム）に送出するが、この場合に、サーバシステムに送信される各要求には、オペレーション、オペレーションによって修正された１つまたは複数のデータ項目の一意の識別子、および１つまたは複数のデータ項目のそれぞれのためのチェックサムが含まれる。
【００８５】
[0095]  ローカルデータベースは、不揮発性メモリに記憶され、その結果、たとえウェブアプリケーションがクラッシュした場合でも、その時点までにウェブアプリケーションによって書き込みキューに書き込まれたあらゆるオペレーションが保存される。
【００８６】
[0096]  データ項目は、それがクライアントによって要求されなかったために、ローカルデータベースにない可能性があり、またはそれが、キャッシュ置換ポリシーの実行を介してローカルデータベースから削除されたため、ローカルデータベースにない可能性がある。いくつかの実施形態において、図７Ａ−７Ｂに関連して上記でより詳細に説明したように、ローカルデータベース（例えば、キャッシュ）が一杯であることをシステムが検出した場合には、ローカルデータベース（例えば、キャッシュ）におけるデータ項目の少なくともいくつかは、キャッシュ置換ポリシーに従って削除用の印を付けられる。
【００８７】
[0097]  データ項目がローカルデータベースで見つからず（８１０）、かつクライアントがネットワーク接続を検出できない場合には（８１２）、エラーが、ウェブアプリケーションに返される（８１４）。いくつかの実施形態において、エラーはまた、ウェブアプリケーションのユーザに返される（例えば、表示される）。
【００８８】
[0098]  ネットワーク接続が検出された場合には（８１６）、一意の識別子（例えば、図６Ｂにおける６０４−１）を含む要求が、通信インターフェース（例えば、ウェブインターフェース）を用いてサーバシステムに送信される。サーバシステムは要求を受信し（８１８）、かついくつかの実施形態では、受信された一意の識別子をサーバディレクトリ（例えば図６Ａにおける６０２）における一意の識別子（例えば、図６Ａにおける６０４−１）とマッチングすることによって、中央データベース（例えば、図６Ａにおける１２０）におけるデータ項目を調べるために一意の識別子（例えば、図６Ｂにおける６０４−１）を用いる。サーバシステムは、中央データベースからデータ項目（およびいくつかの実施形態ではデータ項目に関連する追加情報）を検索し（８２０）、データ項目（および任意の関連情報）をクライアントに送信する。
【００８９】
[0099]  いくつかの実施形態において、サーバシステムは、データ項目に関する第１のチェックサムを計算し（８２０）、かつデータ項目およびデータ項目に関連する第１のチェックサムをクライアントに送信する。クライアントは、ローカルデータベースにおいてデータ項目および第１のチェックサムを受信し（８０８）、データ項目に対してオペレーションを実行する（例えば、データ項目を表示する）（８２６）。いくつかの実施形態において、データ項目に対するオペレーションの実行には、データ項目を修正することが含まれ、クライアントは、修正されたデータ項目用のチェックサムを計算し、ローカルデータベースに記憶された第１のチェックサムをクライアントが計算したチェックサムと交換する。
【００９０】
[00100]  いくつかの実施形態において、後の時点で、ウェブアプリケーションは、データ項目への２回目のアクセスを必要とする（８２８）。クライアントは、データ項目がローカルデータベースにあるかどうかを判定するためにチェックする。たとえデータ項目が、以前にサーバシステムから要求され、ローカルデータベースに記憶されていたとしても、データ項目は、もはや、ローカルデータベースに記憶されていない可能性がある。例えば、データ項目が、キャッシュ置換ポリシーの実行を介してローカルデータベースから削除されている場合には、クライアントは、ローカルデータベースではデータ項目を見つけられない。データ項目が、ローカルデータベースで見つからない場合には（８３０）、クライアントは、ネットワーク接続があるかどうかを確認する。ネットワーク接続がある場合には（８１６）、クライアントは、上記でより詳細に説明したように、データ項目の要求をサーバシステムに送信し、応答を受信する。例えば、ウェブアプリケーションがウェブベース電子メールアプリケーションである場合には、ウェブアプリケーションが、（例えば会話を表示するために）電子メール会話を必要とする最初のときに、ウェブアプリケーションは、ウェブベース電子メールサーバに会話を要求しなければならない。この例において、ウェブベース電子メールサーバは、会話に関するチェックサムを計算し、会話に関連する一意の識別子およびチェックサムをクライアントに送信し、これらが、ローカルデータベースに記憶される。次に、ウェブアプリケーションが２回目に会話を必要とするときに、ウェブアプリケーションは、単に、会話に関連する一意の識別子およびチェックサムをサーバに送信することができる。
【００９１】
[00101]  データ項目が、ローカルデータベースで見つかった場合には（８３２）、クライアントは、第１のチェックサム（またはクライアントが計算したチェックサム）およびデータ項目に関連する一意の識別子を含むデータ項目をローカルデータベースから検索する。クライアントは、要求をサーバシステムに送信する（８３６）。いくつかの実施形態において、この要求には、第１のチェックサム（またはクライアントが計算したチェックサム）が含まれる。いくつかの実施形態において、クライアント装置は、第１のチェックサムおよび一意の識別子をサーバシステムに定期的に送信し、サーバシステムにおいて、第１のチェックサムは、サーバにおけるデータ項目用のチェックサムと比較される。例えば、ウェブベース電子メールアプリケーションは、会話のチェックサムをウェブベース電子メールサーバに送信することによって、特定の会話が最新であることを定期的に確認することができる。この例において、サーバは、（サーバシステムに記憶された）会話のチェックサムを計算し、チェックサムが一致しない場合には、（サーバシステムに記憶された）会話をウェブベース電子メールアプリケーションに送信する。
【００９２】
[00102]  いくつかの実施形態において、データ項目は、複数の別個のコンポーネントを有し（例えば、データ項目は会話であり、別個のコンポーネントはメッセージである）、要求には、コンポーネントの識別子が含まれる（８３８）（例えば、データ項目が、メッセージリストである会話である場合には、要求には、メッセージ識別子が含まれる）。いくつかの実施形態において、コンポーネントの識別子には、クライアント上のデータ項目に関連するコンポーネントの全てが含まれる（例えば、クライアント上に記憶されているような、会話におけるメッセージの全てのためのメッセージ識別子）。
【００９３】
[00103]  いくつかの実施形態において、クライアントによってサーバシステムに送信される要求（例えば８３６）は、ウェブアプリケーションによって自動的に生成される。いくつかの実施形態において、自動的に生成される要求は、ユーザによって最もアクセスされそうなデータ項目を予めロードすることである。一例において、属性「受信箱」に関連する複数の電子メールメッセージまたは電子メールメッセージのグループ（例えば、１つまたは複数の関連する電子メールメッセージを、単一の会話として１つのヘッダの下でグループにまとめてもよい）用のヘッダ情報（例えば送信者および件名）を含む受信箱が表示される。この例において、ウェブアプリケーションは、受信箱の現在のビューにおけるヘッダのそれぞれに関連するデータ項目の要求を自動的に生成する。受信箱の現在のビューが、次のいずれか１つであり得ることを理解されたい。すなわち、受信箱におけるヘッダの全て（例えば、受信箱におけるメッセージ／会話の全てが要求される）と、受信箱の現在のページに含まれるヘッダの全て（例えば、ユーザが、スクリーン上で、スクロールできる範囲のメッセージ／会話の全てが要求される）と、ディスプレイ上に現在表示されているヘッダの全て（例えば、スクロールせずに、ユーザが現在見ることができるヘッダに関連するメッセージ／会話だけが要求される）とである。
【００９４】
[00104]  いくつかの実施形態において、データ項目は、圧縮表現として（例えば、圧縮形式で）、または非圧縮表現として（例えば非圧縮形式で）表示してもよい。圧縮形式で表示されるデータ項目には、非圧縮形式で表示されるデータ項目より少ない情報しか含まれない。いくつかの実施形態において、圧縮形式で表示されるデータ項目には、データ項目に関するヘッダ情報だけ（例えば件名、送信者および日付／時間）が含まれる（例えば、会話における第１のメッセージまたはスレッドリストにおける第１の会話に関するヘッダ情報）。いくつかの実施形態において、圧縮形式で表示されるデータ項目には、データ項目の複数のコンポーネント用のヘッダ情報を表示することが含まれる。例えば、データ項目がスレッドリスト（例えば受信箱）である場合には、圧縮形式でスレッドリストを表示することには、スレッドリストのコンポーネント（例えば会話）の１つまたは複数用のヘッダを表示することが含まれる。例えば、データ項目が会話（例えば会話）である場合には、圧縮形式で会話を表示することには、会話のコンポーネント（例えばメッセージ）の１つまたは複数用のヘッダを表示することが含まれる。
【００９５】
[00105]  いくつかの実施形態において、ウェブアプリケーションは、最初は、圧縮形式のデータ項目を表示するための、データ項目に関する十分な情報を有しているだけである（例えば、最初は、最新の会話全てのヘッダが、サーバからダウンロードされる）。ウェブアプリケーションが、特定のデータ項目（例えば、１つまたは複数の会話を含む、電子メール受信箱などのスレッドリスト）へのアクセスを要求すると、圧縮形式のデータ項目が表示される（例えば、受信箱における会話全てのヘッダが表示される）。さらに、ウェブアプリケーションが、特定のデータ項目（例えばウェブ電子メール受信箱）へのアクセスを要求すると、ウェブアプリケーションが非圧縮形式のデータ項目を表示できるように、完全なデータ項目がダウンロードされる（例えば、会話のそれぞれにおけるメッセージ全てのヘッダまたは内容）。別の例に関して、ウェブアプリケーションは、最初に圧縮形式で会話を表示してもよく（例えば、会話の電子メールメッセージの１つまたは複数におけるヘッダを表示するだけである）、かつ非圧縮形式の会話を表示する要求（例えば、会話におけるメッセージの１つの全文を見る要求）をユーザから受信した際に、非圧縮形式で会話を表示してもよい（例えば、会話における１つまたは複数の追加電子メールメッセージの全文を表示する）。
【００９６】
[00106]  いくつかの実施形態において、要求がサーバシステムに送信された後で、クライアントは、ローカルデータベースに記憶されるデータ項目に対してオペレーションを実行する（例えば、データ項目を表示する）（８４０）。いくつかの実施形態において、このオペレーションは、サーバシステムからの応答を待つ間に実行される。
【００９７】
[00107]  いくつかの実施形態において、サーバシステムは、ウェブアプリケーションからデータ項目の第２の要求を受信するが（８４２）、この場合に、第２の要求には、データ項目の識別子および第１のチェックサムが含まれる。いくつかの実施形態において、データ項目は、複数の別個のコンポーネントを有し（例えば、データ項目は会話であり、別個のコンポーネントはメッセージである）、要求には、コンポーネントの識別子が含まれる（８４３）（例えば、データ項目が、メッセージリストである会話の場合には、要求にはメッセージ識別子が含まれる）。それに応じて、サーバシステムは、中央データベース（８４４）からデータ項目を検索する。いくつかの実施形態において、サーバシステムは、データ項目に対して実行すべきオペレーション（例えば、書き込みキューに記憶され、かつ要求と共に送信されたオペレーション）を有する。サーバシステムは、データ項目を修正する任意のオペレーションを実行し（８４６）（例えば、図７Ａ−７Ｂに関連して上記でより詳細に説明したように、書き込みキューからの全てのオペレーションを実行する）、次に、データ項目の第２のチェックサムを計算する（８４８）。
【００９８】
[00108]  いくつかの実施形態において、サーバシステムは、第１のチェックサム（またはクライアントが計算したチェックサム）を第２のチェックサムと比較する。チェックサムが一致する場合には（８５０）、サーバシステムは、データ項目が更新されなかったと判定し、データ項目が更新されなかったことを示す応答をクライアント装置に送信する（８５２）。いくつかの実施形態において、データ項目が更新されなかったことを示す応答は、空応答である（例えば、空応答は、それが、ローカルデータベースにおけるデータ項目に追加すべきあらゆるデータが、データ項目と交換すべきデータを含まないことを除いて、データ項目が更新されたことを示す応答におおむね類似している）。クライアントは、サーバから応答を受信し（８５４）、プロセスは、交換データがないため（８５６）、終了する（８５７）。
【００９９】
[00109]  チェックサムが一致しない場合には（８５８）、サーバシステムは、データ項目が更新されたと判定し、データ項目が更新されたことを示す応答をクライアントに送信する（８６０）。ローカルデータベースにおけるデータ項目を更新するための複数の戦略が存在することを理解されたい。すなわち、いくつかの実施形態によれば、１）データ項目に関連するデータの全てが交換されるか、または２）変更されたかもしくは新しいデータ項目のコンポーネントだけが交換され／データ項目に追加される。
【０１００】
[00110]  いくつかの実施形態において、応答には、更新されたデータ項目（８６２）および第２のチェックサムが含まれる（例えば、更新されたデータ項目全体が、クライアントに送信される）。クライアントは、サーバから応答を受信し（８５４）、かつ交換データ（例えば交換会話）があるため（８６４）、サーバシステムから受信されたデータ項目および第２のチェックサムは、ローカルデータベースに記憶されて（８６６）、古いデータ項目（例えば、以前に記憶された会話）および第１のチェックサム（またはクライアントが計算したチェックサム）に取って代わる。この実施形態は、ネットワーク待ち時間が長く（例えば、通信に長い時間がかかる）、かつネットワーク接続が高帯域幅を有する（例えば、多量のデータを容易に転送できる）場合に、特に有利である。
【０１０１】
[00111]  いくつかの実施形態において、更新されたデータ項目（またはデータ項目コンポーネント）がサーバシステムから受信された後で、データ項目は、ウェブアプリケーションにおいて再表示される（８６７）。例えば、ユーザは、電子メール受信箱における会話（例えば、電子メールメッセージリスト）を見る要求を出してもよい。この例において、ウェブアプリケーションは、最初に、ローカルデータベースに記憶された会話のコピーを表示する。ローカルに記憶された会話を表示すると共に、ウェブアプリケーションは、同時に（またはほぼ同時に）ローカルに記憶された会話のチェックサムを含む要求をサーバシステムに送信する。この例において、サーバシステムが、交換会話（更新されたデータ項目）または会話用の追加電子メールメッセージ（新しい／更新されたコンポーネント）を送信する場合には、ウェブアプリケーションは、更新された会話（または会話における新しい電子メール）を再表示する。いくつかの実施形態において、データ項目は、自動的に更新される（例えば、自動的に再表示される）。いくつかの実施形態において、現在表示されているデータ項目が最新ではない（例えば、更新されたデータ項目が利用可能である）ことを示すメッセージが表示される。例えば、メッセージは、「この会話用の新しいメッセージが受信されました。それらを表示しますか？」などのメッセージとすることができる。いくつかの実施形態において、（例えば、「再ロード」ボタンを選択するか、または「新しいメッセージの表示」ボタンを選択することによって）ユーザが、更新されたデータ項目の表示を要求する場合には、更新されたデータ項目が表示される（例えば、データ項目が再表示される）。
【０１０２】
[00112]  いくつかの実施形態において、クライアントからの要求がコンポーネント識別子（例えばメッセージ識別子）を含んでいた場合には、応答には、１つまたは複数の新しいコンポーネントが含まれる（８６８）。いくつかの実施形態において、データ項目の新しいコンポーネントは、古いデータ項目のコンポーネント識別子のどれとも一致しないコンポーネント識別子を備えたコンポーネントである（例えば、新しい電子メールが、会話に追加された）。いくつかの実施形態において、新しいコンポーネントは、同じコンポーネント識別子を備えた古いコンポーネントとは異なるチェックサムを有する更新されたコンポーネントである（例えば、会話における電子メールが修正された）。新しいコンポーネントは、データ項目に関連するが、しかし要求に含まれたコンポーネント識別子のどれとも関連しないコンポーネントである。
【０１０３】
[00113]  例えば、データ項目が会話であり、かつコンポーネントが会話における電子メールメッセージである場合に、クライアントは、会話の識別子および会話のコンポーネントである電子メールメッセージリスト（例えば、第１の電子メール、第２の電子メール、および第３の電子メール）を含む要求をサーバに送信する。この例において、サーバは、中央データベースから会話を検索し、会話に含まれるメッセージ識別子（例えば、第１の電子メール、第２の電子メール、第３の電子メール、第４の電子メール、および第５の電子メール）に注目し、新しい電子メールメッセージ（例えば、第４の電子メールおよび第５の電子メール）だけを応答でクライアント装置に送信する。クライアントは、サーバから応答を受信し（８５４）、そして交換データがあるため（８６４）、データ項目の新しいコンポーネントが、ローカルデータベースに記憶され（８６６）、ローカルデータベースにおけるデータ項目に関連付けられる。さらに、第２のチェックサムが、ローカルデータベースにおける第１のチェックサム（またはクライアントが計算したチェックサム）に取って代わる。この実施形態は、ネットワーク待ち時間が長く（例えば、通信には長い時間がかかる）、ネットワーク接続が、より低い帯域幅を有する場合には、特に有利である（例えば、どれだけのデータを転送できるかに関していくつかの制限があり、したがってローカルデータベースに記憶されたデータ項目を中央データベースに記憶されたデータ項目と同期させるために、ほんの少数のコンポーネントが必要な場合には、データ項目のほんの少数のコンポーネントを送信することが有利である）。
【０１０４】
[00114]  いくつかの実施形態において、クライアントからの要求にコンポーネント識別子が含まれなかった場合には、応答には、データ項目におけるコンポーネント識別子の要求が含まれる（８７０）。この実施形態において、クライアントは、データ項目に関連するコンポーネント識別子（例えば、会話に関連するメッセージ識別子またはスレッドリストに関連するスレッド識別子）の要求を受信する（８７２）。クライアントは、データ項目に関連するコンポーネント識別子をローカルデータベースから検索し（８７４）、（データ項目用の関連する一意の識別子と共に）コンポーネント識別子をサーバシステムに送信する（８７６）。サーバシステムは、要求を受信し、かつ一意の識別子によって示されたデータ項目を中央データベースから検索する（８７８）。
【０１０５】
[00115]  サーバシステムは、中央データベースにおけるデータ項目に関連するコンポーネント識別子を、クライアント装置によってサーバシステムに送信されたコンポーネント識別子と比較する（８８０）。コンポーネント識別子の２つのセットを比較することによって、サーバシステムは、中央データベースにおけるデータ項目のコンポーネント（もしあれば）が新しいかどうかを判定する（８８２）。一例において、データ項目は、３つのメッセージ（例えば、コンポーネント）を備えた会話であり、この会話では、会話におけるクライアントのバージョンは、最初の２つのメッセージだけを有し、一方で会話におけるサーバシステムのバージョンは、３つの全てのメッセージを有する。この例において、クライアントは、会話における第１のメッセージおよび第２のメッセージ用のサーバシステムメッセージ識別子を送信する。この例において、サーバシステムは、中央データベースから会話を検索し、第１のメッセージ、第２のメッセージ、および第３のメッセージを識別する。この例において、サーバシステムは、クライアントからのメッセージ識別子を、中央データベースから検索されたメッセージと比較し、第３のメッセージが新しいメッセージ（例えば、新しいコンポーネント）であると判定する。
【０１０６】
[00116]  いくつかの実施形態において、１つまたは複数の新しいコンポーネントがデータ項目に存在すると判定した後で、サーバシステムは、１つまたは複数の新しいコンポーネントを第２のチェックサムと共にクライアントに送信する（８８４）。クライアントは、１つまたは複数の新しいコンポーネントおよび第２のチェックサムを受信し（８８６）、１つまたは複数の新しいコンポーネントおよび第２のチェックサムをローカルデータベースに記憶する（８８８）。この実施形態には、行ったり来たりする往復がより多く含まれるが、全体として往復には、クライアントとサーバとの間で転送される、より少量のデータしか含まれないことに留意されたい。したがって、この実施形態は、ネットワーク待ち時間が短く（例えば、通信には短い時間しかかからない）、ネットワーク接続が低帯域幅を有する（例えば、どれだけのデータを転送できるかには制限があり、したがって、送信することが必要な、データ項目のコンポーネントだけを送信することが有利である）場合に特に有利である。
【０１０７】
[00117]  いくつかの実施形態において、データ項目を更新する方法（例えば、データ項目全体を更新すること、コンポーネントを送信すること、またはコンポーネントリストの要求を送信し、次にコンポーネントを送信すること）の組み合わせが用いられ、クライアント装置は、クライアント装置とサーバシステムとの間の接続帯域幅および／または接続の待ち時間を判定し、かつ帯域幅の利用可能性またはネットワーク待ち時間による遅延時間の考慮に基づいて、使用すべき最良の方法を決定する。いくつかの実施形態において、サーバシステムは、クライアント装置とサーバシステムとの間の接続帯域幅および／または接続の待ち時間を判定し、かつ帯域幅の利用可能性またはネットワーク待ち時間による遅延時間の考慮に基づいて、使用すべき最良の方法を決定する。
【０１０８】
[00118]  本明細書で説明する方法のそれぞれは、コンピュータ可読記憶媒体に記憶された、かつ１つもしくは複数のサーバシステム１０６またはクライアント装置１０２における１つまたは複数のプロセッサによって実行される命令によって管理してもよい。図７Ａ−７Ｂおよび８Ａ−８Ｄに示すオペレーションのそれぞれは、コンピュータメモリまたはコンピュータ可読記憶媒体に記憶された命令に対応してもよい。
【０１０９】
[00119]  説明のための前述の記載は、特定の実施形態に関連して記載された。しかしながら、上記の実例的な説明は、網羅的であるようにも、開示された形態に本発明を正確に限定するようにも意図されていない。上記の教示を考慮すると多数の修正および変更が可能である。実施形態は、本発明の原理およびその実際的な用途を最も良く説明するために選択されて記載され、それによって、当業者が、考えられた特定の使用法に適した様々な修正と共に本発明および様々な実施形態を最もよく利用できるようにする。
【図１】
0005680620.tif 000002
【図２】
0005680620.tif 000003
【図３】
0005680620.tif 000004
【図４】
0005680620.tif 000005
【図５Ａ】
0005680620.tif 000006
【図５Ｂ】
0005680620.tif 000007
【図５Ｃ】
0005680620.tif 000008
【図５Ｄ】
0005680620.tif 000009
【図５Ｅ】
0005680620.tif 000010
【図６Ａ】
0005680620.tif 000011
【図６Ｂ】
0005680620.tif 000012
【図７Ａ】
0005680620.tif 000013
【図７Ｂ】
0005680620.tif 000014
【図８Ａ】
0005680620.tif 000015
【図８Ｂ】
0005680620.tif 000016
【図８Ｃ】
0005680620.tif 000017
【図８Ｄ】
0005680620.tif 000018