JP5680620B2 - ソフトウェアアプリケーションの起動コストを低減するためのシステムおよび方法 - Google Patents

ソフトウェアアプリケーションの起動コストを低減するためのシステムおよび方法 Download PDF

Info

Publication number
JP5680620B2
JP5680620B2 JP2012503690A JP2012503690A JP5680620B2 JP 5680620 B2 JP5680620 B2 JP 5680620B2 JP 2012503690 A JP2012503690 A JP 2012503690A JP 2012503690 A JP2012503690 A JP 2012503690A JP 5680620 B2 JP5680620 B2 JP 5680620B2
Authority
JP
Japan
Prior art keywords
application
data
target application
response
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012503690A
Other languages
English (en)
Other versions
JP2012523048A (ja
Inventor
ボロハン,マシュー,ジェイ.
クローガー,ロバート,ジェイ.
ケンバーグ,アレクサンダー,ブイ.
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2012523048A publication Critical patent/JP2012523048A/ja
Application granted granted Critical
Publication of JP5680620B2 publication Critical patent/JP5680620B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/161Computing infrastructure, e.g. computer clusters, blade chassis or hardware partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)

Description

[0001] 開示される実施形態は、一般にクライアント/サーバコンピュータネットワークシステムの分野に関し、特に、ソフトウェアアプリケーションの起動コストを低減するためのシステムおよび方法に関する。
[0002] コンピュータ上のソフトウェアアプリケーションの起動には、典型的には、コンピュータが、アプリケーションをメモリにロードし、ローカルソースおよび/またはリモートソースからデータを検索し、かつデータをメモリの指定された場所に記憶することを必要とする。アプリケーションが完全に初期化され、かつユーザ命令を処理する準備ができるまで、ユーザは、アプリケーションを使用できないことが多い。非常に多くの場合に、この初期化プロセスは、長い期間を必要とする可能性があり、その間、ユーザは、待つ以外に何もできない。この状況は、コンピュータが、限られたネットワーク帯域幅、メモリ空間およびプロセッサスループットのうちの1つまたは複数ゆえに資源が制限された、携帯電話などの携帯機器である場合には、ユーザ体験に重大な影響を及ぼす可能性がある。
[0003] いくつかの実施形態において、計算装置は、1つまたは複数のプロセッサ、および1つまたは複数のプロセッサによって実行されるプログラムを記憶するメモリを有する。計算装置は、第1のスレッドでメインアプリケーションを初期化する。メインアプリケーションは、ターゲットアプリケーションとの第1の同期接続を有する。メインアプリケーションが、第1の同期接続を介してターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行した後で、計算装置は、第2のスレッドで補助プロセスを初期化する。補助プロセスは、ターゲットアプリケーションとの第2の同期接続、およびメインアプリケーションとの非同期接続を有する。非同期接続を介してメインアプリケーションから要求を受信した後で、補助プロセスは、第2の同期接続を介してターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行する。
[0004] いくつかの実施形態において、コンピュータシステムには、1つまたは複数のプロセッサ、メモリ、および1つまたは複数のプログラムが含まれる。1つまたは複数のプログラムは、メモリに記憶され、かつ1つまたは複数のプロセッサによって実行されるように構成される。1つまたは複数のプログラムには、次のものが含まれる。すなわち、第1のスレッドでメインアプリケーションを初期化するための命令であって、メインアプリケーションが、ターゲットアプリケーションとの第1の同期接続を有する命令と、メインアプリケーションが、第1の同期接続を介してターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行した後で、第2のスレッドで補助プロセスを初期化するための命令であって、補助プロセスが、ターゲットアプリケーションとの第2の同期接続、およびメインアプリケーションとの非同期接続を有する命令と、非同期接続を介してメインアプリケーションからの要求を補助プロセスにおいて受信するための命令と、要求に応じ、第2の同期接続を介してターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行するための命令と、が含まれる。
[0005] いくつかの実施形態において、コンピュータ可読記憶媒体には、そこに埋め込まれた1つまたは複数のコンピュータプログラムが含まれる。1つまたは複数のコンピュータプログラムには、コンピュータシステムによって実行された場合にはコンピュータシステムに次のことをさせる命令が含まれる。すなわち、第1のスレッドでメインアプリケーションを初期化することであって、メインアプリケーションが、ターゲットアプリケーションとの第1の同期接続を有することと、メインアプリケーションが、第1の同期接続を介してターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行した後で、第2のスレッドで補助プロセスを初期化することであって、補助プロセスが、ターゲットアプリケーションとの第2の同期接続、およびメインアプリケーションとの非同期接続を有することと、非同期接続を介して、メインアプリケーションからの要求を補助プロセスにおいて受信することと、要求に応じて、第2の同期接続を介し、ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行することと、である。
[0017] 図面の全体にわたって、類似の参照数字は、対応する部分を指す。
[0006]いくつかの実施形態に従って、クライアント/サーバ分散システムのインフラストラクチャを示すブロック図である。 [0007]いくつかの実施形態に従って、例示的なクライアントシステムの構造を示すブロック図である。 [0008]いくつかの実施形態に従って、例示的なサーバシステムの構造を示すブロック図である。 [0009]いくつかの実施形態に従って、クライアント/サーバ分散システムのコンポーネント間の相互関係を示すブロック図である。 [0010]いくつかの実施形態に従って、クライアント/サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示すブロック図である。 いくつかの実施形態に従って、クライアント/サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示すブロック図である。 いくつかの実施形態に従って、クライアント/サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示すブロック図である。 [0011]いくつかの実施形態に従って、起動時におけるクライアントとサーバとの間の対話、およびクライアントシステムにおけるウェブベースソフトウェアアプリケーションとサーバシステムとの間でデータを転送するための後続オペレーションを示す流れ図である。 [0012]いくつかの実施形態に従って、マルチスレッドソフトウェアアプリケーションに関連する複数のスレッドの起動プロセスを示す流れ図である。 [0013]いくつかの実施形態に従って、ウェブアプリケーションに関連する、サーバシステムにおけるデータ構造を示すブロック図である。 [0014]いくつかの実施形態に従って、永続的なウェブアプリケーションに関連する、クライアントシステムにおけるデータ構造を示すブロック図である。 [0015]いくつかの実施形態に従って、クライアントシステム上の永続的なウェブアプリケーションとサーバシステムとの間でデータを転送するためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。 いくつかの実施形態に従って、クライアントシステム上の永続的なウェブアプリケーションとサーバシステムとの間でデータを転送するためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。 [0016]いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。 いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。 いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。 いくつかの実施形態に従って、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す流れ図を表す。
実施形態の説明
[0018] 図1は、いくつかの実施形態によるクライアント/サーバ分散システムのインフラストラクチャを示すブロック図である。分散システムには、複数のクライアント装置102および複数のサーバシステム106が含まれる。これらのコンポーネントは、様々なコンポーネントが互いに通信できるように、1つまたは複数の通信ネットワーク104(例えば、インターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク等)を介して一緒にリンクされる。いくつかの実施形態において、サーバシステム106のそれぞれは、単一のサーバである。他の実施形態において、サーバシステム106には、ウェブインターフェース(フロントエンドサーバ)108などの複数のサーバと、1つまたは複数のサーバアプリケーション110(これらは、1つまたは複数のサーバ上で実行してもよい)と、1つまたは複数の中央データベース120であって、ローカルエリアネットワーク(LAN)を介して互いに接続され、かつ共通インターフェース(例えば、フロントエンドサーバとも呼ばれる1つまたは複数のサーバシステム)を介してクライアント装置102と情報を交換する1つまたは複数の中央データベース120と、が含まれる。複数のサーバシステム106を有する実施形態において、サーバシステム106は、ローカルエリアネットワーク(LAN)または他の通信ネットワークを介して互いに接続してもよい。
[0019] クライアント装置102には、ウェブブラウザ112などのクライアントアプリケーションが含まれる。ユーザは、ウェブブラウザ112を用いて、サーバシステム106からの1つまたは複数のウェブアプリケーション114にアクセスすることができる。ウェブブラウザ112およびウェブブラウザ112内のウェブアプリケーション114は、クライアント102上のローカルデータベース116に記憶されたデータ項目にアクセスすることができる。いくつかの実施形態において、ウェブアプリケーション114へのアクセスには、サーバシステム106からプログラムをダウンロードすること、およびウェブアプリケーション114が用いるためのデータをローカルデータベース116に記憶することが含まれる。クライアント装置102(時には「クライアント装置」または「クライアントコンピュータ」と呼ばれる)は、サーバシステム106からデータを受信でき、かつ要求(例えば、ウェブアプリケーションデータ要求、検索問い合わせ、情報要求、ログイン要求等)をサーバシステム106に送信できる任意のコンピュータまたは類似の装置であってもよい。クライアント装置の例には、限定するわけではないが、デスクトップコンピュータ、ノート型コンピュータ、タブレットコンピュータ、携帯電話および携帯情報端末などの携帯機器、ならびにセットトップボックスが含まれる。本出願において、事実上、用語「ウェブアプリケーション」は、サーバシステム106から受信される内容へのアクセスをユーザに提供する任意の対話型アプリケーションを意味する。クライアント装置102からの要求は、通信インターフェース118を介し、http要求を用いてHTTPプロトコルを利用するか、または他の類似のネットワーク通信プロトコルを利用して、それぞれのサーバシステム106に伝達される。
[0020] サーバシステム106には、少なくともウェブインターフェース(フロントエンドサーバ)108、サーバアプリケーション110、および中央データベース120が含まれる。ウェブインターフェース108は、クライアント装置102からの要求を解析し、サーバアプリケーション110によって提供される、対応するウェブアプリケーションをフェッチし、要求しているクライアント装置102にウェブアプリケーションを返す。クライアント/サーバシステムのトポロジにおけるウェブインターフェースおよびサーバアプリケーションのそれぞれの位置に依存して、ウェブインターフェースは、セパレート(「フロントエンドサーバ」)108上で実行され、サーバアプリケーションは、セパレート(「バックエンドサーバ」)110上で実行される。本出願において、用語「ウェブインターフェース」および「フロントエンドサーバ」は、区別なく用いられる。他のいくつかの実施形態において、フロントエンドサーバ108およびバックエンドサーバ110は、1つのソフトウェアアプリケーションまたは1つのサーバシステム106に統合される。
[0021] いくつかの実施形態において、サーバシステム106は、電子メールサービス、検索エンジンサービス、地図サービス、ソーシャルネットワーキングサービスなどの異なるタイプのサービスを提供するために、複数のコンピュータ(図1ではNアプリケーションサーバおよびN中央データベースで表されている)にわたって配置される。また、他のいくつかの実施形態において、個別の一タイプのサービスを、複数サーバ間に分散してもよい。例えば、サーバアプリケーション110−1が、ウェブベース電子メールサービス(例えば、Gmail電子メールアプリケーション)であるシステムを検討する。電子メールメッセージ、会話(例えば、電子メールメッセージリスト)、スレッドリスト(例えば、会話リスト)、ならびにアカウント情報(例えば、ユーザプロファイル、ユーザ選好、およびアカウント履歴)などのデータ項目は、サーバアプリケーション110がアクセスできる1つまたは複数の中央データベース120に記憶してもよい。サーバアプリケーション110は、1つまたは複数の中央データベース120に接続してもよい。いくつかの実施形態において、単一のサーバアプリケーション110が、単一の中央データベース120にアクセスできてもよく(中央データベースに記憶された情報が、単一のサーバアプリケーションによってのみ必要とされる場合など)、一方で、他の実施形態において、複数のサーバアプリケーション110が、単一の中央データベース120にアクセスでき(少量の情報が多数のサーバアプリケーション110によって使用され、かつ情報が頻繁に更新される場合など)、他の実施形態において、複数のサーバアプリケーション110が、複数の中央データベース120に接続されてもよい(多量のデータが記憶され、多数のサーバアプリケーション110によって必要とされる場合など)。
[0022] ここで、図2に目を向ける。図2は、本発明の一実施形態に従ってコンピュータシステム(例えば、クライアント装置102)を示すブロック図である。クライアント装置102には、典型的には、1つまたは複数の処理装置(CPU)202、1つもしくは複数のネットワークまたは他の通信インターフェース204、メモリ212、およびこれらのコンポーネントを相互接続するための1つまたは複数の通信バス214が含まれる。クライアント装置102には、オプションとして、表示装置206およびキーボード/マウス208(または、いくつかの実施形態ではタッチセンシティブ表面209)を含むユーザインターフェース205を含んでもよい。メモリ212には、DRAM、SRAM、DDR RAMまたは他のランダムアクセス固体メモリデバイスなどの高速ランダムアクセスメモリが含まれ、かつ1つまたは複数の磁気ディスク記憶装置、光学ディスク記憶装置、フラッシュメモリデバイス、または他の不揮発性固体記憶装置などの不揮発性メモリを含んでもよい。メモリ212には、オプションとして、CPU202からリモートに位置する1つまたは複数の記憶装置を含んでもよい。メモリ212または代替としてメモリ212内の不揮発性メモリデバイスには、コンピュータ可読記憶媒体が含まれる。いくつかの実施形態において、メモリ212またはメモリ212のコンピュータ可読記憶媒体は、以下のプログラム、モジュールおよびデータ構造、またはそれらのサブセットを記憶する。
・ 様々な基本システムサービスを扱うための、およびハードウェア依存タスクを実行するための手順を含むオペレーティングシステム216。
・ 1つまたは複数の通信インターフェース204(有線または無線)、およびインターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの1つまたは複数の通信ネットワークを介して、クライアント装置102を他のコンピュータに接続するために用いられる通信モジュール218。
・ ウェブアプリケーション114用のユーザ要求を受信し、かつ要求されたウェブアプリケーション114を、ユーザインターフェースモジュール228を用いて表示装置206または他のユーザインターフェース装置上にレンダリングし、かつデータ項目をローカルデータベース116に記憶するためのウェブブラウザ112。いくつかの実施形態において、ウェブアプリケーション114、ローカルデータベース116、およびユーザインターフェースモジュールは、ウェブブラウザ内で実行される。
○ 1つまたは複数のウェブアプリケーション114には、ウェブアプリケーション114内のオペレーションを調整するためのウェブアプリケーションマネージャ219と、ウェブアプリケーションマネージャ219からのオペレーションをキューに入れるための書き込みキュー220と、ローカルデータベース116に書き込むためのアクションディスパッチャ222と、(オプションとして)データ項目に対してチェックサムを計算するためのチェックサム計算機224と、を含んでもよい。
○ ローカルデータベース116は、様々なサーバシステム106からウェブアプリケーション114において受信されたデータ項目(例えば、226−1、226−2)を記憶する。
○ ユーザインターフェースモジュール228には、ユーザインターフェースをレンダリングするためのビューモジュール230、およびユーザ対話イベントを検出してユーザ対話イベントを他のモジュールに伝達するためのコントローラモジュール232が含まれる。
・ データ項目をローカルデータベース116に記憶し、かつ情報をウェブアプリケーション114に伝達することによって、サーバシステムからの通信に応答するための応答ハンドラモジュール234。
[0023] 図2は、「クライアント装置102」を示すが、図2に関連して説明するクライアント装置は、本明細書で説明する実施形態の構造概略図としてよりも、クライアント装置102に存在し得る様々な特徴の機能的説明として、より一層意図されている。実際には、かつ当業者によって理解されるように、別々に示した項目は、組み合わせることが可能であり、いくつかの項目は、分離することが可能である。例えば、クライアントアプリケーション(例えば、ウェブブラウザ112)は、いくつかの実施形態ではオペレーティングシステム216と統合してもよい。いくつかの実施形態において、クライアントアプリケーション(例えば、ウェブブラウザ112)の様々な機能は、2つ以上の別個のアプリケーションによって実行してもよい。いくつかの実施形態において、ウェブブラウザ112の一部として示されたローカルデータベース116は、クライアント装置上の複数のクライアントアプリケーションにアクセスできるローカルデータベースとすることが可能である。
[0024] 上記で識別した要素のそれぞれは、前述のメモリデバイスの1つまたは複数に記憶してもよく、かつ上記の機能を実行するための命令セットに対応する。上記で識別したモジュールまたはプログラム(すなわち命令セット)は、別個のソフトウエアプログラム、手順、またはモジュールとして実行する必要はなく、したがってこれらのモジュールの様々なサブセットは、様々な実施形態において、組み合わせるか、さもなければ再配置してもよい。いくつかの実施形態において、メモリ212は、上記で識別したモジュールおよびデータ構造のサブセットを記憶してもよい。さらに、メモリ212は、上記で説明していない追加のモジュールおよびデータ構造を記憶してもよい。
[0025] ここで、図3に目を向ける。図3は、本発明の一実施形態に従ってサーバシステム106を示すブロック図である。サーバシステム106には、典型的には、1つまたは複数の処理装置(CPU)302、1つもしくは複数のネットワークまたは他の通信インターフェース304、メモリ312、およびこれらのコンポーネントを相互接続するための1つまたは複数の通信バス314が含まれる。メモリ312には、DRAM、SRAM、DDR RAMまたは他のランダムアクセス固体メモリデバイスなどの高速ランダムアクセスメモリが含まれ、かつ1つまたは複数の磁気ディスク記憶装置、光学ディスク記憶装置、フラッシュメモリデバイス、または他の不揮発性固体記憶装置などの不揮発性メモリを含んでもよい。メモリ312には、オプションとして、CPU302からリモートに位置する1つまたは複数の記憶装置を含んでもよい。メモリ312または代替としてメモリ312内の不揮発性メモリデバイスには、コンピュータ可読記憶媒体が含まれる。いくつかの実施形態において、メモリ312またはメモリ312のコンピュータ可読記憶媒体は、以下のプログラム、モジュールおよびデータ構造、またはそれらのサブセットを記憶する。
・ 様々な基本システムサービスを扱うための、およびハードウェア依存タスクを実行するための手順を含むオペレーティングシステム316。
・ 1つまたは複数の通信インターフェース304(有線または無線)、およびインターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワークなどの1つまたは複数の通信ネットワークを介して、サーバシステム106を他のコンピュータに接続するために用いられる通信モジュール318。
・ サーバシステム106とクライアント装置102との間で通信を伝達する応答ハンドラモジュール320。応答ハンドラモジュールは、別個のフロントエンドサーバ(図1の108)と共に、またはその代わりに用いることができる。
・ クライアント装置102から受信された要求に対して応答を準備するサーバアプリケーション110。いくつかの実施形態において、サーバアプリケーション110は、ウェブアプリケーション114をクライアント装置102に送信する。
・ サーバアプリケーション110および/またはウェブアプリケーション114に関連するデータ項目(例えば、226−1、226−2)を記憶するための中央データベース120。
・ データ項目に対してチェックサムを計算するためのチェックサム計算機(オプション)328。
・ ウェブアプリケーションから受信されたチェックサムを、サーバシステム106によって計算されたチェックサムと比較するためのチェックサム比較器(オプション)330。
[0026] 図3は、単一サーバシステム106を示すが、図3に関連して説明するサーバは、本明細書で説明する実施形態の構造概略図としてよりも、サーバシステムに存在し得る様々な特徴の機能的説明として、より一層意図されている。実際には、かつ当業者によって理解されるように、別々に示した項目は、組み合わせることが可能であり、いくつかの項目は、分離することが可能である。例えば、図3には別々に示されたいくつかの項目は、単一サーバ上で実行することが可能であり、単一項目は、1つまたは複数のサーバによって実行することが可能である。サーバシステム106(図1)を実行するために用いられるサーバの実際の数およびタイプ、ならびにそれらの間で機能がどのように割り当てられるかは、インプリメンテーションごとに異なり、かつ平均的な使用期間中とピーク使用期間中とにシステムが扱わなければならないデータトラフィック量に部分的に依存してもよい。
[0027] 上記で識別した要素のそれぞれは、前述のメモリデバイスの1つまたは複数に記憶してもよく、かつ上記の機能を実行するための命令セットに対応する。上記で識別したモジュールまたはプログラム(すなわち命令セット)は、別個のソフトウエアプログラム、手順、またはモジュールとして実行する必要はなく、したがってこれらのモジュールの様々なサブセットは、様々な実施形態において、組み合わせるか、さもなければ再配置してもよい。いくつかの実施形態において、メモリ312は、上記で識別したモジュールおよびデータ構造のサブセットを記憶してもよい。さらに、メモリ312は、上記で説明していない追加のモジュールおよびデータ構造を記憶してもよい。
[0028] ここで、図4に目を向ける。図4は、いくつかの実施形態に従ってクライアント/サーバ分散システムのコンポーネント間の相互関係を示すブロック図である。図4に示すように、ユーザインターフェースモジュール228には、(例えば、図2のディスプレイ206に)ユーザインターフェースをレンダリングするためのビューモジュール230と、ユーザ対話イベント(例えば、図2におけるキーボード/マウス208またはタッチセンシティブ表面209からのマウスクリックまたはキーボード入力)を検出し、かつユーザ対話イベントをウェブアプリケーションマネージャ219に伝達するためのコントローラモジュール232と、が含まれる。いくつかの実施形態において、コントローラモジュール232は、クリック、タッチおよび他のユーザ入力を扱うイベントハンドラ402(例えば、クリック/タッチイベントハンドラ)のセットとして実行される。いくつかの実施形態において、最初に全てのイベントハンドラが、アクティビティを表示し、ウェブアプリケーションマネージャ219(例えば、いくつかの実施形態では、JavaScript(登録商標)インメモリモデル)に要求を送信し、ウェブアプリケーションマネージャ219が、モデルイベントをビューモジュール230に返す。ビューモジュール230において、モデルイベントハンドラ406が、イベントを、ユーザインターフェースレンダラ408(例えば、HTMLレンダラ)および文書オブジェクトモデル410または文書を操作するための他のアプリケーションプログラマインターフェースに伝達する。ユーザインターフェースレンダラ408は、レンダリングされたユーザインターフェース要素を文書オブジェクトモデル410に送信し、文書オブジェクトモデル410は、新しいモデルを構成し、モデルを(例えばユーザに)表示し、かつ新しいモデルをコントローラモジュール232に伝達して、イベントハンドラ402によって検出された追加のイベントを待つ。
[0029] いくつかの実施形態において、ウェブアプリケーションマネージャ219が、ローカルデータベース116におけるデータ項目の1つまたは複数に対して実行されるオペレーションを示すイベントをイベントハンドラ402から検出するように構成される場合には、ウェブアプリケーションマネージャ219は、オペレーションを書き込みキュー220に送信する。いくつかの実施形態において、オペレーション412−1、412−2、412−3、412−4、412−5、412−6は、それらが書き込みキュー220に到着した順序で書き込みキュー220に記憶される(すなわち、これらの実施形態において、書き込みキューは、ウェブアプリケーションマネージャ219からの要求の時系列の記録である)。ウェブアプリケーションマネージャは、ユーザインターフェースモジュール228へのコールバックのリスト、書き込みキューにおける各オペレーション(例えば「オペレーション1」412−1)用のコールバック、コールバックが呼び出されたか否かを示すフラグ、およびオペレーション(例えば「オペレーション1」412−1)を果たさなかった試みのカウンタを維持する。いくつかの実施形態において、アクションディスパッチャ222は、書き込みキュー220からローカルデータベース116および通信モジュール218にオペレーション(例えば、「オペレーション1」412−1)を送信するように構成される。
[0030] いくつかの実施形態において、アクションディスパッチャ222は、オペレーションをチェックサム計算機に送信するように構成される。チェックサム計算機は、ローカルデータベース116に記憶される1つまたは複数のデータ項目のチェックサムを計算する。いくつかの実施形態において、チェックサムは、データ項目と共にローカルデータベース116に記憶される。ローカルデータベース116に記憶されたデータ項目用の前のチェックサムがあった場合には、計算されたチェックサムは、記憶されたチェックサムに取って代わる。いくつかの実施形態において、チェックサムは、データ項目全体を用いて計算される。チェックサムは、当該技術分野で周知の標準的なメカニズム(例えば、MD5チェックサムアルゴリズム(IETF RFC1321)またはSHA−1(FIPS PUB180−1)アルゴリズム)のいずれかで計算することができる。図8A−8Dに関連して以下でより詳細に説明するが、いくつかの実施形態において、データ項目用のチェックサムは、データ項目が更新されたかどうかを判定するために用いられる。
[0031] いくつかの実施形態において、通信モジュール218は、アクションディスパッチャ222から受信されたオペレーション(例えば、「オペレーション1」412−1)をサーバシステムにおける応答ハンドラモジュール320に送信するように構成される。いくつかの実施形態において、応答ハンドラモジュール320は、オペレーションをサーバアプリケーション110に伝達するように構成される。いくつかの実施形態において、サーバアプリケーション110は、オペレーションを実行する要求の受信に応じ、(例えば、要求に含まれた、データ項目に関連する一意の識別子を用いて)中央データベース120から1つまたは複数のデータ項目を検索するように構成される。いくつかの実施形態において、サーバアプリケーション110は、オペレーションの結果(例えば、データ項目および/またはデータ項目のチェックサム)を応答ハンドラ320に返すように構成され、応答ハンドラ320は、結果をクライアント装置102に送信するように構成される。いくつかの実施形態において、ローカルデータベース116が、中央データベース120と同期されていない(すなわち、コヒーレントでない)場合には、応答には、ローカルデータベース116を中央データベース116とコヒーレントに戻すために必要とされる交換データ項目またはデータ項目のコンポーネントが含まれる。いくつかの実施形態において、ローカルデータベース116が中央データベース120と同期されている(すなわち、コヒーレントである)場合には、応答は、ローカルデータベース116におけるデータ項目が最新であることを示す(例えば、応答は、データ項目もデータ項目の要素も含まない)。
[0032] いくつかの実施形態において、クライアント装置102上の通信モジュール218は、サーバアプリケーション110からの結果を、クライアント装置上の応答ハンドラモジュール234に伝達する。いくつかの実施形態において、オペレーションの結果は、ローカルデータベース116に記憶され、かつ/またはウェブアプリケーションマネージャ219に返される。いくつかの実施形態において、オペレーションは、表示オペレーションであり、データ項目はユーザに表示される。
[0033] 例えば、ユーザが、携帯機器上で電子メールアプリケーションを見ており、電子メールを見るために電子メールのヘッダを選択するシナリオを検討する。この例において、携帯機器上で電子メールメッセージを見る要求は、ウェブアプリケーションマネージャ219によって書き込みキュー220に送信される。アクションディスパッチャ222が、電子メールをローカルデータベース116において見つけた場合には、電子メールは、ユーザに表示するために、ウェブアプリケーションマネージャ219に送信される。アクションディスパッチャ222が、ローカルデータベース116において電子メールを見つけられなかった場合には、メッセージの要求が、電子メールデータベース120を備えたサーバシステム106に送信され、中央データベース120からの電子メールが、クライアント装置102に返される。この実施形態において、電子メールメッセージは、応答ハンドラ234に返され、応答ハンドラ234は、ローカルデータベース116に電子メールを記憶し、それを、ユーザに表示するために、ウェブアプリケーションマネージャ219に伝達する。
[0034] ここで、図5A−5Cに目を向ける。図5A−5Cは、いくつかの実施形態に従ってクライアント/サーバ分散システムにおけるマルチスレッドソフトウェアアプリケーションの起動プロセスを示す。
[0035] クライアント102における起動コストを低減するために、マルチスレッドソフトウェアアプリケーションは、図5A−5Cに示すような複数の段階にプロセスをそれぞれ分割する。初期化段階510において、ソフトウェアアプリケーションは、最初に、メインスレッド502上でメインアプリケーションを開始する。いくつかの実施形態において、ソフトウェアアプリケーションは、携帯電話などの携帯機器上のウェブベース電子メールサービスである。メインスレッド上のメインアプリケーションは、サービスのユーザインターフェースとのユーザ対話を扱う役割を担う。いくつかの実施形態において、メインアプリケーションは、単一スレッドである。他のいくつかの実施形態において、メインアプリケーションは、マルチスレッドである。
[0036] 図5Aに示すように、アプリケーションの初期化後に、メインアプリケーションスレッド502とローカルデータベース116との間に同期接続506が存在する。ローカルデータベース116は、電子メールサービスに関連する所定のデータ量をキャッシュする。ローカルデータベースのより詳細な説明は、図6Bに関連して以下で提供する。同期接続506を介して、メインスレッド502におけるメインアプリケーションは、ローカルデータベース116からデータ記録を検索すること、およびローカルデータベース116においてデータ記録を更新することなど、ローカルデータベース116上でオペレーションを同期して実行することができる。
[0037] また、メインスレッド502とリモートサーバシステム106におけるサーバアプリケーション322との間に非同期接続514が存在する。ウェブベースソフトウェアアプリケーションの一部として、クライアント102においてメインアプリケーションによってレンダリングされる全ての電子メールメッセージは、結局、サーバアプリケーション322から来るが、サーバアプリケーション322は、サーバ側において中央データベース120における電子メールメッセージを管理する。サーバアプリケーション322および中央データベース120のより詳細な説明は、図6Aおよび7A−7Bに関連して以下で提供する。以下で説明するように、メインアプリケーションは、データがローカルデータベース116に存在しない場合には、非同期接続514を用いて、中央データベース120からデータ検索する。
[0038] いくつかの実施形態において、メインスレッド502におけるメインアプリケーションの初期化には、ユーザインターフェースをクライアント102で表示すること、所定のデータ量をローカルデータベース116から検索すること、および検索されたデータをユーザインターフェースに読み込むことが含まれる。例えば、ウェブベース電子メールサービスの初期化中に、メインスレッド502上のメインアプリケーションは、同期接続506を用いて、ユーザの電子メールアカウントの受信箱フォルダに関連する電子メールメッセージをローカルデータベース116から検索する。なぜなら、電子メールサービスの平均的なユーザは、ユーザ宛ての、受信箱フォルダ内の未読メッセージを最初に見ることに最も関心があると仮定されているからである。同期接続506を介してローカルデータベース116からメッセージを検索した後で、メインアプリケーションは、検索されたメッセージを用いて、電子メールサービスに関連するユーザインターフェースにデータを読み込み、クライアント102のユーザが、少なくとも受信箱フォルダにおけるメッセージと対話できるようにする。図5Aに示すようなメインアプリケーションの初期化は、電子メールサービス全体の起動で終えなくてもよいが、受信箱フォルダにおける未読メッセージにできるだけ速くアクセスできることは、電子メールサービスに対する平均的なユーザの体験を著しく改善することができる。
[0039] 受信箱フォルダにデータを読み込むことに加えて、電子メールサービスの起動プロセスは、他のフォルダに関連する電子メールメッセージをローカルデータベース116からフェッチすること、およびローカルデータベース116を中央データベース120と同期させることなどの他のタスクを実行してもよい。その結果、起動プロセス全体の完了には、クライアント102における異なるコンポーネント間、およびクライアント102とサーバ106との間のかなりのデータ送信量を伴う可能性がある。メインスレッド502が、これらのタスクのいくつかを同期して扱う役割を担う場合には、それは、タイミングよくユーザインターフェースを呼び出してユーザ命令を受信する準備ができない可能性がある。さらに、初期化後に、ウェブアプリケーションは、データベース116における大きなデータ項目にアクセスすること、大きなグラフィックファイルをレンダリングすること、ネットワークを渡るダウンロードもしくは同期プロトコルを管理すること、ファイルの読み出しもしくは書き込みを実行すること、またはメインスレッド502によって同期して実行される場合には、ウェブアプリケーションのオペレーションをかなり遅くし、かつしたがってユーザ体験を損なう可能性がある、クライアント装置上の計算集約的なタスクを実行することなど、進行中のタスクを実行する必要があり得る。いくつかの実施形態において、これらのオペレーションの少なくともいくつかは、メインスレッド502によって直接実行できるが、メインスレッドと非同期で対話できる第2のスレッド上で動作する1つまたは複数の補助プロセスに委ねられ、それによってメインスレッド502上の負荷を低減する。これらの第2のスレッドがない場合には、メインスレッド502は、同期オペレーションが完了して結果を返すのを待つ必要ゆえに、ウェブアプリケーションの進行を妨げることになろう。
[0040] したがって、いくつかの実施形態において、電子メールサービスの準備ができているという印象をユーザに与える初期化段階510には、第2の段階520が続き、第2の段階520では、補助プロセスが、第2のスレッド504上で初期化される。上記のように、補助プロセスの目的は、メインスレッドによって実行された場合にはウェブアプリケーションの進行を妨げることになる同期タスクを実行することである。第2のスレッド504の開始を遅らせることによって、起動プロセス全体の役割をメインスレッド502に担わせることにより引き起こされる待ち時間は、回避されるかまたは少なくともかなり低減される。さらに、ウェブアプリケーションを開始することに関連する1つまたは複数の同期オペレーションをメインスレッド502が実行してしまう後まで、第2のスレッド504の開始を遅らせることによって、第2のスレッドを生成/初期化するコストは、ユーザがアプリケーションを使用し始めることができる後まで遅らせることができる。第2のスレッドを生成/初期化するコストには、ウェブアプリケーションコードをフェッチし、解析し、かつ初期化するために必要な時間が含まれるが、その時間は、携帯機器およびアプリケーションに依存して、1秒ほど、またはそれより長くかかる可能性がある。起動時にこの遅延を回避することによって、ユーザは、アプリケーションをほとんど瞬間的に使用し始めることができる。
[0041] 図5Bに示すように、メインスレッド502は、メインスレッド502におけるメインアプリケーションがメインスレッド502とローカルデータベース116との間の送信を終えた後で、例えば、電子メールサービスの受信箱フォルダにデータを読み込んだ後で、第2のスレッド504を生成する。第2のスレッド504における補助プロセスが、ローカルデータベース116と通信するために、およびウェブベース電子メールサービスアプリケーションを開始する残りのタスクを完了するために、メインスレッド502におけるメインアプリケーションの代わりをするように生成されることに留意されたい。また、第2のスレッド504とローカルデータベース116との間に同期接続512が存在する。この接続512を介して、補助プロセスは、メインアプリケーションが接続506を介して実行できる、ローカルデータベース116上の同じオペレーションを実行することができる。いくつかの実施形態において、補助プロセスは、メインアプリケーションによって残された、ウェブベースアプリケーションを初期化する残りのタスクを完了するように構成される。他のいくつかの実施形態において、メインアプリケーションは、ウェブベースアプリケーションの初期化に関連する全てのタスクを完了する。したがって、補助プロセスは、主として、メインスレッド502によって行われた、ローカルデータベース116と対話する役割に取って代わる役を担う。
[0042] 図5Cに示すように、メインスレッド502と第2のスレッド504との間に非同期接続508が存在する。同期接続512の確立と共に、メインアプリケーションは、もはや、それが初期化段階510中に行ったように同期接続506を介してローカルデータベース116上でオペレーションを直接実行する必要はない。より正確に言えば、今や、アプリケーション全体は、安定したオペレーションの段階530へと移動する。安定したオペレーション中に、メインアプリケーションは、非同期接続508を介し第2のスレッド504において補助プロセスと通信する。この通信のより詳細な説明は、図5Dに関連して以下で提供する。その結果、いくつかの実施形態において、メインスレッド502とローカルデータベース116との間の同期接続506は、(図5Cに破線で示すように)終了されるかまたは破棄される。他のいくつかの実施形態において、同期接続506は、まだ存在するが不活性化される。
[0043] ここで、図5Dに目を向ける。図5Dは、いくつかの実施形態に従って、起動時におけるクライアントとサーバとの間の対話と、クライアントシステム上のウェブベースソフトウェアアプリケーションとサーバシステムとの間でデータを転送するための後続のオペレーションとを説明する。
[0044] 最初に、メインアプリケーションが、メインスレッド502上で開始される(540)。いくつかの実施形態において、メインアプリケーションは、ユーザインターフェースをクライアント装置に表示し(542)、ローカルデータベースからデータを検索し(544)、検索されたデータをユーザインターフェースに読み込む(546)。例えば、この時点におけるウェブベース電子メールサービスは、ユーザインターフェースを介してユーザによって選択された電子メールメッセージを表示し、かつユーザインターフェースを介してユーザが入力したテキストを受信することによって、クライアント装置とのユーザ対話に応答する準備ができている。
[0045] 前述のオペレーションを実行した後で、メインアプリケーションは、アイドル状態に入り、次のユーザ命令を待つ(548)。しかし、ローカルデータベースとの後続の対話は、ユーザがクライアント装置と対話するのを妨げる可能性があり、この対話からメインアプリケーションを解放するために、補助プロセスが、第2のスレッド504上で開始される(550)。いくつかの実施形態において、補助プロセスは、その開始が、ユーザ命令にメインアプリケーションが応答するのをひどく妨げない限り、図5Dにおいて破線によって示すように、より早く開始してもよい。次に、補助プロセスは、メインアプリケーションとの非同期接続を確立し(552)、かつローカルデータベースとの同期接続を確立する(554)。いくつかの実施形態において、この時点で、補助プロセス/第2のスレッド504は、データベースを扱う準備ができており、「準備完了」メッセージをメインスレッド502に返し、その後メインスレッドは、実行しても安全な場合には、ローカルデータベースオペレーションに対する責任を補助プロセス/第2のスレッド504へ引き継ぐ。いくつかの実施形態において、これは、メインスレッドが、それが扱っている同期データベースオペレーションの合間にあるときである。
[0046] ここで、メインアプリケーションが、続いて、ローカルデータベースからデータを検索するユーザ命令を受信する(558)と仮定する。この瞬間には、補助プロセスは開始されており、メインアプリケーションとローカルデータベースとの間の同期接続(506、図5C)は、終了されている可能性がある。したがって、メインアプリケーションは、メインスレッドと第2のスレッドとの間の非同期接続を介して補助プロセスにデータアクセス要求を送信する(560)。データアクセス要求を受信すると(562)、補助プロセスは、第2のスレッドとローカルデータベースとの間の同期接続を介して、ローカルデータベースから、もしあればデータを検索しようと試み(564)、かつメインスレッドとの非同期接続を介してメインアプリケーションに応答を返す(568)。
[0047] いくつかの実施形態において、ローカルデータベースが、メインアプリケーションによって要求されたデータを有していない可能性があることに留意されたい。例えば、ユーザ命令が、ウェブベース電子メールサービスをリフレッシュすることである場合には、ローカルデータベースは、まだ最新のメッセージを受信箱に有していない可能性がある。したがって、補助プロセスから応答を受信すると(570)、メインアプリケーションは、最初に、応答が、要求されたデータを含むか否かを判定する。真(572、yes)の場合には、メインアプリケーションは、次に、検索されたデータを用いて、ユーザインターフェースを更新する(590)。偽(572、no)の場合には、メインアプリケーションは、非同期接続514を介してリモートサーバアプリケーション322にデータ要求を送信する(574)。
[0048] データ要求を受信すると(576)、リモートサーバアプリケーションは、要求されたデータを中央データベース120から検索し、要求されたデータをクライアント装置に返す(578)。クライアント側において、要求されたデータを受信した(580)後で、メインアプリケーションは、2つのオペレーション、すなわち、(i)非同期接続を介してデータ更新要求を補助プロセスに送信することと(582)、(ii)ユーザインターフェースを更新することと(590)、を実行する。2つのオペレーションが、任意の順序で、または並列に実行可能であることに留意されたい。サーバアプリケーションによって返されたデータを含むデータ更新要求を受信すると(586)、補助プロセスは、ローカルデータベースを更新する(588)。
[0049] ここで、図5Eに目を向ける。図5Eは、いくつかの実施形態に従ってマルチスレッドソフトウェアアプリケーションに関連する複数のスレッドの起動プロセスを説明する。起動プロセスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されるプログラムを記憶するメモリと、を有する計算装置によって実行される。例示的な計算装置には、デスクトップコンピュータ、ラップトップコンピュータ、ならびにPDAおよび/または音楽プレーヤ機能などの他の機能もまた含む携帯電話などの携帯通信装置が含まれる。
[0050] いくつかの実施形態において、計算装置は、最初に、第1のスレッド上でメインアプリケーションを初期化する(532)。メインアプリケーションは、ターゲットアプリケーションとの第1の同期接続を有する。例示的なターゲットアプリケーションには、計算装置におけるデータベースアプリケーション、計算装置において画像をレンダリングするためのアプリケーション、ファイルをアクセス、転送またはダウンロードするためのアプリケーション、および数値計算などを実行するためのアプリケーションが含まれる。実例のために、後続の説明は、ウェブベース電子メールサービスに向けられ、ターゲットアプリケーションは、クライアント装置上で実行されるローカルデータベースである。しかし、当業者は、同じ方法論を他のタイプのソフトウェアアプリケーションに適用できるであろうが、これらの他のタイプのソフトウェアアプリケーションは、プロセスが、アプリケーションの起動コストを遅らせることができ、したがってユーザ体験を改善できる限り、ウェブベースであってもなくてもよい。
[0051] いくつかの実施形態において、初期化後に、メインアプリケーションは、携帯電話の表示パネルなど、計算装置にユーザインターフェースを表示する(532−1)。ユーザインターフェースには、携帯電話のユーザに向けられた電子メールメッセージを含む、電子メールサービスの受信箱フォルダのアイコンを含んでもよい。ユーザインターフェースとのユーザ対話をサポートするために、計算装置は、これらの電子メールメッセージなどのデータをデータベースアプリケーションから検索し(532−2)、電子メールメッセージをユーザインターフェースに読み込む(532−3)。メインアプリケーションの初期化の終了後に、ユーザは、着信メッセージを見ること、新しいメッセージを作成すること、および既存メッセージを削除することなど、電子メールサービスによってサポートされた様々な命令を出すことができなければならない。
[0052] メインアプリケーションが、第1の同期接続を介しローカルデータベースにおいて1つまたは複数のオペレーションを実行した後で、計算装置は、第2のスレッド上で補助プロセスを初期化する(534)。いくつかの実施形態において、補助プロセスは、ターゲットアプリケーションとの第2の同期接続、およびメインアプリケーションとの非同期接続を有する(例えば図5Bを参照)。いくつかの実施形態において、メインアプリケーションとローカルデータベースとの間の第1の同期接続は、補助プロセスが初期化され、かつメインアプリケーションとターゲットアプリケーションとの間の通信ユニットが完了した後で終了される(534−1)。例えば、検索されたメッセージをユーザインターフェースに読み込んだ後で、メインアプリケーションは、もはや、ローカルデータベースとの直接接続を維持しなくてもよい。代わりに、メインアプリケーションは、補助プロセスが初期化された後で、補助プロセスから準備完了通知を受信するのを待つ。この準備完了通知は、補助プロセスが、非同期接続を介してメインアプリケーションからデータアクセス要求を受け入れ、かつ次に、同期接続を介してローカルデータベース上で要求を実行する準備ができていることを示す。その結果、メインアプリケーションは、ローカルデータベースを管理することから解放され、かつ電子メールサービスと共にユーザ命令を処理することに集中する。
[0053] 補助プロセスの初期化、およびメインアプリケーションによるモジュールタスク(例えば、ユーザインターフェースにデータが読み込まれる)の完了後に、メインアプリケーションは、ユーザ命令を処理する準備ができている。ローカルデータベースにおける電子メールメッセージを削除するなどのユーザ命令を受信すると、メインアプリケーションは、補助プロセスに要求を送信する。非同期接続を介してメインアプリケーションから要求を受信すると(536)、補助プロセスは、第2の同期接続を介しターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行する(538)。いくつかの実施形態において、補助プロセスは、非同期接続を介してメインアプリケーションからデータ要求を受信し(536−1)、ローカルデータベースにアクセスする。
[0054] データ要求の受信に応じて、補助プロセスは、データベースアプリケーションにおいてデータ要求を同期して実行し(538−1)、かつデータ要求に対する応答をデータベースアプリケーションから受信する(538−2)。補助プロセスは、データ要求に対する応答をメインアプリケーションに非同期で返す(538−3)。応答が、要求されたデータを含む場合には、メインアプリケーションは、そのデータを用いて、ユーザインターフェースを更新してもよい。応答が、要求されたデータを含まない場合には、メインアプリケーションは、要求されたデータ用の新しい要求をリモートサーバシステムに非同期で出して、次に、要求されたデータをリモートサーバシステムから受信する。要求されたデータをリモートサーバシステムから受信した後で、メインアプリケーションは、要求されたデータを補助プロセスに非同期で転送する。補助プロセスは、それに応じて、要求されたデータを用いてデータベースアプリケーションを同期して更新する。
[0055] ローカルデータベースオペレーションにおける特定の場合に関して本明細書で説明するように、補助プロセス/第2のスレッドの初期化を遅らせることは、以下の条件の1つまたは複数が存在する多数の状況において有用である。すなわち、1)アプリケーションを実行する役割を担うメインスレッドが、補助プロセス/第2のスレッドによって実行されることになっている同期オペレーションを直接実行することができる。2)補助プロセスを生成/初期化することにコストがかかる。3)補助プロセスを生成するために必要とされる作業が、通常、アプリケーションの初期化プロセスの一部である。かかる状況において、メインスレッドが、通常は、初期化において補助プロセスに割り当てられるタスクを実行できるように、かつこれらの初期オペレーションと並列に補助プロセス/第2のスレッドを生成できる(それによって、アプリケーションとの満足なユーザ対話を提供する)ように、かつ次に、実行しても安全な場合には制御を補助スレッドに委ねることができるようにすることは、アプリケーションに対するユーザ体験を改善する。この戦略は、メインアプリケーションスレッドをサポートする同期タスクを実行するために、単一または複数の第2のスレッドを生成する必要がある場合に用いることができる。
[0056] ここで、図6Aに目を向ける。図6Aは、いくつかの実施形態に従ってウェブアプリケーションに関連するサーバシステムにおけるデータ構造を示す。いくつかの実施形態において、中央データベース120には、サーバディレクトリ602が含まれる。サーバディレクトリ602は、一意の識別子(例えば「ユニークID」604−1)を、データ項目(例えば、データ項目1 226−1)のステータス(例えば「ステータス」606−1)およびデータ項目の参照(例えば「参照1」608−1)に関連付けるルックアップテーブルである。
[0057] いくつかの実施形態において、一意の識別子(例えば「ユニークID」604−N)には、データ項目タイプ609およびデータ項目識別子610が含まれる。いくつかの実施形態において、データ項目タイプ609は、一意の識別子によって参照されるデータ項目タイプを示す。例えば、データ項目が会話(例えば、メッセージリスト)である場合には、データ項目タイプ609には、「会話」または対応する英数字タグが含まれ、データ項目がスレッドリスト(例えば、会話リスト)である場合には、データ項目タイプ609には、「スレッドリスト」または対応する英数字タグが含まれる。代替として、データ項目がスレッドリスト(例えば、会話リスト)である場合には、データ項目タイプ609には、スレッドリストの名前が含まれる。例えば、スレッドリストが電子メール受信箱である場合には、データ項目タイプには、英数字タグ「受信箱」が含まれ、スレッドリストにラベル「仕事」に関連する複数の会話が含まれる場合には、データ項目タイプには、英数字タグ「仕事」が含まれる。いくつかの実施形態において、データ項目タイプ識別子は、データ項目タイプ識別子の組み合わせであってもよい。
[0058] いくつかの実施形態において、データ項目識別子は、(例えば、データ項目タイプ609が「会話」であるか、またはデータ項目タイプ609が「メッセージ」である)特定タイプであるデータ項目のサブセット内でデータ項目を一意に識別する識別子である。例えば、いくつかの実施形態において、データ項目識別子は、会話ID(例えば620)またはメッセージIDである。データ項目が会話(例えば、メッセージリスト)である実施形態において、データ項目識別子は、メッセージリストにおける第1のメッセージのメッセージ識別子である。
[0059] いくつかの実施形態において、データ項目(例えば226−1)のステータス(例えば606−1)は、データ項目が更新されたか(例えば、新しいデータ項目と取り替えられた)、修正されたか、またはアクセスされた(例えば、見られた、コピーされた、送信された等)最後の時間を示す。ステータスは、データ項目に対してオペレーションが実行された場合に更新される。
[0060] いくつかの実施形態において、データ項目に対する参照は、データ項目からデータ項目の各コンポーネントへの参照を含む関係表611に対する参照である。いくつかの実施形態において、データ項目は、複数のコンポーネントを有する。例えば、サーバディレクトリ602における参照1 608−1は、関係表611においてデータ項目1 226−1用の2つのエントリ、すなわちスレッド1 612−1およびスレッド2 612−2を参照する。(この状況が生じるのは、これら2つの会話/スレッドが、参照608−1によって識別されるスレッドリストにそれぞれ関連付けられるからである)。いくつかの実施形態において、データ項目は、単一のコンポーネントを有する。例えば、参照2 608−2は、関係表611においてデータ項目2 226−2用の単一のエントリ、すなわちスレッド2 612−2を参照する。いくつかの実施形態において、複数の別個のデータ項目に、共通コンポーネントが含まれる。例えば、データ項目1 226−1およびデータ項目2 226−2は、それぞれ、関係表611においてスレッド2 612−2に関連する。換言すれば、単一の会話(例えば、メッセージリスト)は、複数のスレッドリストに含んでもよい。例えば、ウェブアプリケーションがウェブベース電子メールアプリケーションであり、かつ電子メールメッセージが会話(例えば、電子メールメッセージの順序付きリスト)に配列される実施形態において、会話の1つまたは複数は、複数のラベルを含んでもよく、各ラベルは、スレッドリストに関連付けられる(例えば、「受信箱」ラベルおよび「仕事」ラベルを含む会話は、「受信箱」スレッドリストおよび「仕事」スレッドリストの両方に関連付けられることになろう)。
[0061] いくつかの実施形態において、コンポーネントは、メッセージである。上記のように、データ項目には、単一のコンポーネントまたは複数のコンポーネントを含んでもよい。例えば、参照3 608−3(これは、会話用の参照である)は、データ項目3 226−3用の関係表611における3つのエントリ、すなわちメッセージ1 614−1、メッセージ2 614−2、およびメッセージ3 614−3を参照し、一方で参照N 608−Nは、関係表における単一のエントリ、すなわちデータ項目N 226−N(例えば、メッセージQ 614−Q)を参照する。
[0062] いくつかの実施形態において、関係表における関係が、スレッド(例えば、スレッド1 612−1)に対するものである場合には、関係は、複数のスレッド(例えば、スレッド1 612−1、スレッド2 612−2、およびスレッドP 612−P)を含むスレッド表616を参照する。スレッド表616において、各スレッドは、スレッドに関する会話識別子620および会話情報622に関連付けられる。会話識別子620は、会話に関連しているメッセージを識別するために、サーバシステムによって用いられる識別子である。いくつかの実施形態において、会話情報622には、会話に含まれたメッセージの件名、会話における最新のメッセージを要約する短い「抜粋」、および/またはメッセージリストが含まれる。
[0063] いくつかの実施形態において、関係表における関係が、メッセージ(例えば、メッセージ1 614−1)に対するものである場合には、関係は、複数のメッセージ(例えば、メッセージ1 614−1、メッセージ2 614−2、メッセージ3 614−3、メッセージQ 614−Q)を含むメッセージ表618を参照する。メッセージ表618において、各メッセージは、メッセージに関するメッセージ情報624に関連付けられる。いくつかの実施形態において、メッセージ情報624には、任意の添付ファイルを含むメッセージのテキストが含まれる。
[0064] ここで、図6Bに目を向ける。図6Bは、いくつかの実施形態に従って、クライアント装置におけるウェブアプリケーションに関連付けられたデータを示す。いくつかの実施形態において、ローカルデータベース116には、クライアントディレクトリ652が含まれる。クライアントディレクトリ652は、一意の識別子(例えば、「ユニークID」604−1)を、データ項目(例えば、データ項目1 226−1)のステータス(例えば、「ステータス」656−1)およびデータ項目に対する参照(例えば、「参照1」660−1)と関連付けるルックアップテーブルである。いくつかの実施形態において、チェックサム(例えば、658−1、658−2、658−3、658−M)が、キャッシュコヒーレンスを維持するために用いられる場合には、各データ項目(例えば、226−1)用のチェックサムであるチェックサム(例えば、658−1)が、ローカルデータベース116に記憶され、データ項目に関連付けられる。図6Bに示す実施形態において、チェックサム(例えば、658−1)は、クライアントディレクトリ652に記憶される。しかしながら、チェックサムは、ローカルデータベース116の別の部分に記憶され得ることを理解されたい。
[0065] いくつかの実施形態において、一意の識別子(例えば、「ユニークID」604−N)には、図6Aに関連して上記でより詳細に説明したように、データ項目タイプ609およびデータ項目識別子610が含まれる。いくつかの実施形態において、サーバ上の一意の識別子(例えば、図6Aにおける「ユニークID」604−1)は、クライアント上の一意の識別子(例えば、図6Bにおける「ユニークID」604−1)と同一であり、かつ両方の一意の識別子が同じデータ項目に関連付けられることを示す。
[0066] いくつかの実施形態において、データ項目(例えば、226−1)のステータス(例えば、656−1)は、データ項目が、更新された(例えば、新しいデータ項目と取り替えられた)か、修正されたか、またはアクセスされた(例えば、見られた、コピーされた、送信された等)最後の時間を示す。ステータスは、データ項目に対してオペレーションが実行された場合に更新される。いくつかの実施形態において、サーバ上のデータ項目のステータス(例えば、図6Aにおける606−2)、およびクライアント上の同じデータ項目のステータス(例えば、図6Bにおける656−2)は、(例えば、ローカルデータベースおよび中央データベースが同期されている場合には)同一である。いくつかの実施形態において、サーバ上のデータ項目のステータス(例えば、図6Aにおける606−3)、およびクライアント上の同じデータ項目のステータス(例えば、図6Bにおける656−3)は、(例えば、ローカルデータベースおよび中央データベースが同期されていない場合には)異なる。
[0067] いくつかの実施形態において、データ項目への参照は、データ項目とデータ項目の各コンポーネントとの間の関係を含む関係表666への参照である。いくつかの実施形態において、データ項目は、複数のコンポーネントを有する。例えば、クライアントディレクトリ652における参照1 660−1は、関係表666においてデータ項目1 226−1用の2つのエントリ、すなわちスレッド1 668−1およびスレッド2 668−2を参照する。(この状況が生じるのは、これら2つの会話/スレッドが、参照608−1によって識別されたスレッドリストにそれぞれ関連付けられるからである)。いくつかの実施形態において、データ項目は、単一のコンポーネントを有する(例えば、参照2 660−2は、関係表666においてデータ項目2 226−2用の単一のエントリ、すなわちスレッド2 668−2を参照する)。いくつかの実施形態において、複数の別個のデータ項目には、共通コンポーネントが含まれる。例えば、データ項目1およびデータ項目2には、それぞれ、スレッド2 668−2に対する関係が含まれる。換言すれば、単一の会話(例えば、メッセージリスト)は、複数のスレッドリストに含んでもよい。例えば、ウェブアプリケーションがモバイル電子メールアプリケーションであり、かつ電子メールメッセージが会話に配列される実施形態において、会話の1つまたは複数は、複数のラベルを含んでもよく、各ラベルは、スレッドリストに関連付けられる(例えば、「受信箱」ラベルおよび「仕事」ラベルを含む会話は、「受信箱」スレッドリストおよび「仕事」スレッドリストの両方に関連付けられることになろう)。
[0068] いくつかの実施形態において、コンポーネントは、メッセージである。上記のように、データ項目には、単一のコンポーネントまたは複数のコンポーネントを含んでもよい。例えば、参照3 660−3(これは、会話への参照である)は、関係表666においてデータ項目3 226−3用の2つのエントリ、すなわちメッセージ1 670−1およびメッセージ2 670−2を参照し、一方で参照M 660−Mは、関係表において単一のエントリであるデータ項目M 226−M(例えば、「メッセージS」670−S)を参照する。
[0069] いくつかの実施形態において、参照表における参照が、スレッド(例えば、スレッド1 668−1)に対するものである場合には、参照は、複数のスレッド(例えば、スレッド1 668−1、スレッド2 668−2、スレッドR 668−R)を含むスレッド表672を参照する。スレッド表672において、各スレッドは、スレッドに関する会話識別子676および会話情報678に関連付けられる。会話識別子676は、会話(例えば、メッセージリスト)に関連付けられたメッセージを識別するために、クライアント装置によって用いられる識別子である。いくつかの実施形態において、会話情報678には、会話に含まれたメッセージの件名、会話における最新のメッセージを要約する短い「抜粋」、および/またはメッセージリストが含まれる。
[0070] いくつかの実施形態において、参照表における参照が、メッセージ(例えば、メッセージ1 670−1)に対するものである場合には、参照は、複数のメッセージ(例えば、メッセージ1 670−1、メッセージ2 670−2、メッセージS 670−S)を含むメッセージ表674を参照する。メッセージ表674において、各メッセージは、メッセージに関するメッセージ情報680に関連付けられる。いくつかの実施形態において、メッセージ情報680には、任意の添付ファイルを含むメッセージのテキストが含まれる。
[0071] いくつかの実施形態において、図6Aおよび6Bに示すように、図6Aにおける中央データベース120および図6Bにおけるローカルデータベース116は、類似のデータ構造を有する。しかしながら、これらのデータ構造に記憶されるデータは、必ずしも同一とは限らない。いくつかの実施形態において、図6Aにおける中央データベース120および図6Bにおけるローカルデータベース116は、異なるデータ項目、メッセージおよびスレッドをそれぞれのデータ構造に記憶している。いくつかの実施形態において、図6Bのローカルデータベース116および図6Aの中央データベース120におけるデータ項目、メッセージおよびスレッドは、同期されており(例えば、コヒーレントにされており)同一である。いくつかの実施形態によれば、図8A−8Dに関連して以下でより詳細に説明するように、図6Bにおけるローカルデータベース116および図6Aにおける中央データベース120が同期されていない場合を検出するための、およびデータベースを同期させるための方法が開示される。
[0072] 例えば、図6Aにおいて、中央データベースは、Nデータ項目、PスレッドおよびQメッセージ(ここで、N、PおよびQは、全て、0を超える整数を表す)を有し、一方で図6Bにおいて、ローカルデータベース116は、Mデータ項目、RスレッドおよびSメッセージ(ここで、M、RおよびSは、全て、0を超える整数を表す)を有する。いくつかの実施形態において、N=M、P=R、Q=Sであり、図6Aの中央データベース120におけるデータ構造は、図6Bのローカルデータベース116におけるデータ構造と同一の情報を記憶する。しかしながら、いくつかの実施形態において、図6Aの中央データベース120は、図6Bのローカルデータベース116に含まれない追加データを含み、かつ/または図6Bのローカルデータベース116は、図6Aの中央データベース120に含まれない追加データを含む(例えば、中央データベースは、1つまたは複数の新しい電子メールメッセージを受信するウェブベース電子メールサーバに関連付けられ、一方でクライアント装置は、電子メールサーバに接続されず、したがって、中央データベースは、ローカルデータベースに含まれない1つまたは複数の新しい電子メールメッセージを含む。
[0073] さらに、いくつかの実施形態において、チェックサム658−1が、図6Bのローカルデータベース116に記憶され、一方でそれらが図6Aの中央データベース120に記憶されていないことに留意されたい。より正確に言うと、図8A−8Dに関連して以下でより詳細に説明するように、チェックサムは、サーバシステムによってオンザフライで(例えば、「必要に応じて」)計算され、したがって図6Aの中央データベース120には記憶されない。
[0074] 説明の目的で例示的なデータ構造を本明細書で説明したが、それらの代わりに代替データ構造を用いて、上記のデータ項目およびデータ項目に関する関連情報を記憶し得ることを理解されたい。いくつかの実施形態において、複数のデータベースを含む複数のサーバが、データ項目をサーバシステム上に記憶するために用いられ、かかる分散システムに特に適合された様々なデータ構造が使用可能である。1つのかかる代替実施形態において、米国特許出願公開第2005/0222985 A1号(これによって、その全体において参照により援用される)に記載のデータ構造などのデータ構造が、中央データベース120に記憶されているものとして説明されているデータ項目、会話および関連情報を記憶するために用いられる。例えば、ウェブベース電子メールアプリケーションにおいて、電子メール、会話および他の関連情報は、アクセス速度および耐故障性を改善するために、複数のサーバおよびデータベース間に分散されるように特に適合されたデータ構造で記憶してもよい。
[0075] ここで、図7A−7Bに目を向ける。図7A−7Bは、いくつかの実施形態に従って、クライアント上の永続的なウェブアプリケーションとサーバシステムとの間でデータを転送するプロセスにおけるクライアントおよびサーバの役割を示す。クライアント(図2における102)は、ローカルウェブアプリケーション(例えば、図2における114)を含むクライアントアプリケーション(例えば、図2におけるウェブブラウザ112)を有する。いくつかの実施形態において、ローカルウェブアプリケーション(例えば、図2における114)は、オンラインモードおよびオフラインモードの両方を有する。例えば、ウェブアプリケーションが、ウェブベース電子メールプログラムである場合には、プログラムは、頻繁に使用される電子メールメッセージのいくつか(例えば、図2におけるデータ項目226−1)をローカルデータベース(例えば、図2における116)に記憶してもよい。
[0076] プロセスは、ウェブアプリケーションが、電子メッセージ(例えば、電子メール)、会話(例えば、電子メッセージリスト)またはスレッドリスト(例えば、会話リスト)などのデータ項目にアクセスする必要がある(702)場合に始まる。一例において、ウェブアプリケーションは、データ項目を表示するか、データ項目を送信するか、データ項目を編集するか、またはデータ項目に対して他のあるオペレーションを実行する要求をユーザから受信する。クライアントは、データ項目がローカルデータベースにあるかどうかを確認する。データ項目がローカルデータベースで見つかった場合には(704)、データ項目は、ローカルデータベースから検索され(706)、ウェブアプリケーションは、データ項目を受信する(708)。
[0077] いくつかの実施形態において、ウェブアプリケーションは、オフライン機能を備えたウェブベース電子メールアプリケーション(例えば、Gmail)である(例えば、永続的なウェブベースアプリケーションである)。例えば、クライアントがネットワーク接続にアクセスできる場合には、ウェブアプリケーションは、ちょうど通常のウェブベース電子メールインターフェースのように動作し、この場合に、ユーザは、ウェブページにログインし、電子メールメッセージをチェックし、他のオペレーションを実行する。しかしながら、いくつかの実施形態において、ウェブベース電子メールプログラムはオフライン機能を有する。なぜなら、ウェブベース電子メールプログラムが、ウェブアプリケーションによって最もアクセスされそうな電子メールメッセージのいくつかおよび他のローカルアプリケーションデータを記憶するために用いられるローカルデータベースにアクセスできるからである。次に、クライアントが、ネットワーク接続にアクセスできず、かつユーザが、ウェブブラウザを介してウェブベース電子メールプログラムにアクセスしようと試みた場合には、ウェブアプリケーションは、やはり、ユーザが、ローカルデータベースに記憶された電子メールにアクセスし、かつローカルデータベースに記憶された電子メールに対してオペレーションを実行できるようにする。
[0078] (例えば、ネットワーク待ち時間が大きい)いくつかの実施形態において、ユーザから入力を受信することと、入力によって示されたオペレーションを1つまたは複数のデータ項目に対して実行すること(例えば、表示すること)との間の遅延を低減するために、いくつかのデータ項目をローカルデータベースに記憶することが望ましい。したがって、ローカルデータベースは、サーバシステムから応答を受信する前に、ローカルデータベースにおけるデータ項目に対して、ウェブアプリケーションからの命令を実行できるように、データ項目用のキャッシュとして働くことができる。この構造は、プロセッサによる使用のためにデータをキャッシュすること、およびしたがってデータ要求と、要求されたデータの、マイクロプロセッサによる受信との間の通信待ち時間の影響を低減することによって、ハードウェアシステムにおいてオペレーションの処理を加速するために用いられる、マイクロプロセッサに関連するハードウェアキャッシュと類似している。
[0079] いくつかの実施形態において、ウェブブラウザの文書オブジェクトモデルは、L1キャッシュとして用いられる。ハードウェアに見出されるキャッシュの種類が示唆するように、L1キャッシュとして文書オブジェクトモデルを用いるソフトウェアは、ライトバックまたはライトスルーであることが可能である。いくつかの実施形態において、L1キャッシュとしての文書オブジェクトモデルフラグメントのライトバックキャッシュは、ウェブアプリケーションが、文書オブジェクトモデルを直接修正することによっていくつかのユーザアクションを実行する場合には、適切である。いくつかの実施形態によれば、ハードウェアキャッシングとの類似性が示唆する実施形態における他の特徴は、データ項目のプリフェッチおよびロードフォワーディング(すなわち、サーバからの応答が、ローカルデータベース116に書き込まれる前に、ディスプレイ206上に表示するためにウェブブラウザ112へ直接転送される場合)である。
[0080] いくつかの実施形態において、書き込みキュー220は、不揮発性メモリに記憶され、その結果、たとえウェブアプリケーションがクラッシュするか、またはウェブアプリケーションが実行されるウェブブラウザがクラッシュしても、その時点までにウェブアプリケーションによって書き込みキューに書き込まれたあらゆるペレーションが保存される。
[0081] いくつかの実施形態において、要求されたデータ項目は、それがクライアントによって要求されたことがないために、ローカルデータベースにない可能性があり、または要求されたデータ項目は、キャッシュ置換ポリシーゆえにローカルデータベースから削除されたために、ローカルデータベースにない可能性がある。いくつかの実施形態において、ローカルデータベース(例えば、キャッシュ)が一杯であることをシステムが検出した場合には、ローカルデータベース(例えば、キャッシュ)におけるデータ項目の少なくともいくつかは、キャッシュ置換ポリシーに従って削除用の印を付けられるが、これは、複数のオプションの1つにすることができる。
[0082] いくつかの実施形態において、キャッシュ置換ポリシーは、最長時間未使用のデータ項目がローカルデータベースから最初に削除されるという最長時間未使用(LRU)ポリシーである。いくつかの実施形態において、キャッシュ置換ポリシーは、最小頻度でアクセスされるデータ項目がローカルデータベースから最初に削除されるという最小使用頻度ポリシーである。いくつかの実施形態において、キャッシュ置換ポリシーは、どのデータ項目が最も古いかまたは最大のファイルサイズを有するかを含む他のある要因によって決定される。いくつかの実施形態において、キャッシュ置換ポリシーはランダムであり、その場合にデータ項目は、キャッシュからランダムに(すなわち、データ項目に関連するいかなる基準も考慮せずに)削除される。いくつかの実施形態において、キャッシュ置換ポリシーは、(例えば、ある特徴を備えた電子メールが2回以上は読まれない可能性があることを知って)どのデータ項目が、ウェブアプリケーションによって最も必要とされそうもないかを決定する要因の組み合わせに基づいている。一実施形態において、置換優先度は、各データ項目用にサーバで計算されてローカルデータベースに記憶され、ローカルデータベースにおけるデータ項目は、置換優先度によって降順で削除用の印を付けられる。さらに、ハードウェアキャッシュにおいて用いられる任意のキャッシュ置換戦略が、ローカルデータベースにおけるどのデータ項目が削除用の印を付けられるかを決定するためにも使用可能であることを理解されたい。いくつかの実施形態において、クライアントは、削除用の印を付けられた全てのデータ項目をローカルデータベースから定期的に削除する。これらの置換戦略の適用に関する先行技術の教示は、本発明の様々な実施形態に関連する。
[0083] データ項目がローカルデータベースで見つからず(710)、かつクライアントがネットワーク接続を検出できない場合には(712)、エラーが、ウェブアプリケーションに返される(714)。いくつかの実施形態において、エラーはまた、ウェブアプリケーションのユーザに返される(例えば、表示される)。
[0084] ネットワーク接続が検出された場合には(716)、一意の識別子(例えば、図6Bにおける604−1)を含む要求が、通信インターフェース(例えば、ウェブインターフェース)を用いてサーバシステムに送信される。サーバシステムは、要求を受信し(718)、かついくつかの実施形態において、受信した一意の識別子を、サーバディレクトリ(例えば、図6Aにおける602)における一意の識別子(例えば、図6Aにおける604−1)とマッチングすることによって、中央データベース(例えば、図6Aにおける120)においてデータ項目を調べるために、一意の識別子(例えば、図6Bにおける604−1)を用いる。サーバシステムは、中央データベースからデータ項目(およびいくつかの実施形態において、データ項目に関連する追加情報)を検索し(719)、データ項目(および任意の関連情報)をクライアントに送信する。
[0085] いくつかの実施形態において、データ項目の圧縮表現のセレクションを検出した後で、データ項目の非圧縮表現(時には拡張表現と呼ばれる)を表示する要求などの要求は、ユーザによって指定される。一例において、電子メール受信箱が表示されるが、電子メール受信箱には、複数の電子メールメッセージまたは電子メールメッセージグループ(例えば、1つまたは複数の関連電子メールメッセージは、単一の会話として1つのヘッダの下でグループにまとめてもよい)用のヘッダ情報(例えば、送信者および件名)が含まれる。この例において、ユーザが、1つの電子メールメッセージまたは会話のヘッダを選択した場合に、ウェブアプリケーションは、電子メールメッセージ全体(ヘッダが単一のメッセージ用のヘッダである場合)または会話における少なくともいくつかの電子メールメッセージのリスト(ヘッダが電子メールメッセージの会話用のヘッダである場合)を表示する。
[0086] いくつかの実施形態において、要求は、ウェブアプリケーションによって自動的に生成される。いくつかの実施形態において、自動的に生成される要求は、ユーザによって最もアクセスされそうなデータ項目を予めロードすることである。一例において、複数の電子メールメッセージまたは電子メールメッセージグループ(例えば、1つまたは複数の関連する電子メールメッセージは、単一の会話として1つのヘッダの下でグループにまとめてもよい)用のヘッダ情報(例えば、送信者および件名)を含む受信箱が表示される。この例において、ウェブアプリケーションは、受信箱の現在のビューにおけるヘッダのそれぞれに関連するデータ項目の要求を自動的に生成する。受信箱の現在のビューが、次のいずれか1つであり得ることを理解されたい。すなわち、受信箱におけるヘッダの全て(例えば、受信箱におけるメッセージ/会話の全てが要求される)と、受信箱の現在のページに含まれるヘッダの全て(例えば、ユーザが、スクリーン上で、スクロールできる範囲のメッセージ/会話の全てが要求される)と、ディスプレイ上に現在表示されているヘッダの全て(例えば、スクロールせずに、ユーザが現在見ることができるヘッダに関連するメッセージ/会話だけが要求される)と、である。
[0087] クライアントは、データ項目を受信し(708)、データ項目に対してオペレーションを実行する(720)。いくつかの実施形態において、オペレーションは、データ項目を更新しない(例えば、電子メールは、ユーザに表示される)。いくつかの実施形態において、オペレーションは、データ項目を更新する(例えば、オペレーションは、電子メールメッセージを、電子メールメッセージの会話に追加するかまたはそこから削除するなどの修正オペレーションである)。オペレーションが、データ項目を更新しない場合には(722)、ウェブアプリケーションプロセスは終了する(723)。オペレーションがデータ項目を更新する場合には(724)、ウェブアプリケーションは、オペレーションを実行する要求を書き込みキュー(例えば、図4における220)に入れる(726)。いくつかの実施形態において、書き込みキューにおけるオペレーションには、オペレーションに関連する任意のデータ項目の一意の識別子が含まれる(例えば、オペレーションが、それぞれの会話にメッセージを追加することである場合には、オペレーションには、それぞれの会話の一意の識別子が含まれる)。いくつかの実施形態において、サーバシステムは、この一意の識別子を用いて、オペレーションが実行されることになる、中央データベースに記憶されたデータ項目を識別する(例えば、サーバシステムは、中央データベースに記憶されたそれぞれの会話を識別し、それにメッセージを追加する)。
[0088] いくつかの実施形態において、オペレーションを書き込みキューに入れた後で、ウェブアプリケーションは、ネットワーク接続状態をチェックする(728)。クライアントがネットワークに接続されていない場合には(732)、クライアント装置は、タイムアウト(734)期間の間待機し、ネットワーク接続状態を再チェックする(728)。いくつかの実施形態において、ウェブアプリケーションは、オペレーションが書き込みキューに追加されたか否かに基づいて、ネットワーク接続状態を定期的にチェックする(例えば、5分ごと)。
[0089] クライアント装置がネットワークに接続されていること(736)をウェブアプリケーションが検出すると、クライアントメモリに維持された書き込みキューは、接続されたサーバへ送出される。いくつかの実施形態において、実行されたが、(例えば、ネットワーク接続がないために)まだサーバシステムに送信されていないユーザアクションが、ウェブブラウザがクラッシュした場合に保存されるように、書き込みキューが不揮発性メモリに維持されることが重要である。いくつかの実施形態において、書き込みキューは、オペレーションが書き込みキューに追加された順序で送出される(例えば、最も古いオペレーションが、サーバシステムに最初に送信され、2番目に古いオペレーションが後に続く等である)。いくつかの実施形態において、書き込みキューにおけるアクションが、キューに追加された順序で実行されて、同じデータ項目を修正する複数のオペレーションがある場合にオペレーションが正確な順序で実行されることを保証するようにすることが重要である。(例えば、第1のオペレーションが、ラベル「仕事」をそれぞれのメッセージ/会話に適用し、第2のオペレーションが、「仕事」ラベルに関連する全てのメッセージ/会話に、メッセージ/会話がユーザによって読まれたことを示すフラグを付ける)。
[0090] いくつかの実施形態において、サーバシステムは、ウェブアプリケーションから要求を受信し(740)、かつ(例えば、要求に関連する一意の識別子によって示された1つまたは複数のデータ項目に対して、要求に示されたオペレーションを実行することによって)要求に応答する(742)。いくつかの実施形態において、オペレーションによって修正されたあらゆるデータ項目が、サーバシステム上の中央データベースに記憶される(744)。いくつかの実施形態において、要求への応答には、任意の修正されたデータ項目を含む応答をクライアント上のウェブアプリケーションに送信することが含まれる。クライアントは、応答を受信し(746)、あらゆる修正されたデータ項目をローカルデータベースに記憶する(748)。いくつかの実施形態において、クライアントは、オペレーションを実行する要求に対する任意の応答をサーバから受信する代わりに(またはその前に)、オペレーションが書き込みキューから送出されるときにローカルデータベースにおいてデータ項目を修正する。
[0091] ここで、図8A−8Dに目を向ける。図8A−8Dは、いくつかの実施形態に従い、チェックサム交換を用いてデータベース間でデータを同期させるためのプロセスにおけるクライアントおよびサーバの役割を示す。いくつかの実施形態において、クライアントには、サーバシステム、またはクライアント装置とは異なる他の別個の計算装置における中央データベースと同期される(例えば、コヒーレントにされる)必要のあるローカルデータベースが含まれる。一例において、ウェブアプリケーションは、電子メールメッセージ、関連する電子メールメッセージリスト(例えば、会話)、および関連する会話リスト(例えば、スレッドリスト)を記憶するウェブベース電子メールアプリケーションである。この例において、ウェブベース電子メールアプリケーションは、電子メールアカウントにおけるメッセージ/会話へのアクセス権をユーザに提供し、かつウェブアプリケーション(例えば、ウェブベース電子メールにアクセスするためのアプリケーション)を、サーバアプリケーション(例えば、電子メールアカウントに関連する電子メール/会話の全てを管理する電子メールサーバ)と同期させておくことが望ましい。
[0092] プロセスは、ウェブアプリケーションが、電子メッセージ(例えば、電子メール)、会話(例えば、電子メッセージリスト)、またはスレッドリスト(例えば、会話リスト)などのデータ項目にアクセスする(802)必要がある場合に始まる。一例において、ウェブアプリケーションは、データ項目を表示する要求をユーザから受信するか、データ項目を送信するか、データ項目を編集するか、またはデータ項目に対して他のあるオペレーションを実行する。クライアントは、データ項目がローカルデータベースにあるかどうかを確認する。データ項目が、ローカルデータベースで見つかった(804)場合には、データ項目は、ローカルデータベースから検索され(806)、ウェブアプリケーションは、データ項目を受信する(808)。いくつかの実施形態において、以下でより詳細に説明するように、ローカルデータベースから検索されたデータ項目には、前にローカルデータベースに記憶された第1のチェックサムが含まれる。
[0093] いくつかの実施形態において、ウェブアプリケーションは、オフライン機能を備えたウェブベース電子メールアプリケーション(例えば、Gmail)である。例えば、クライアントがネットワーク接続にアクセスできる場合に、ウェブアプリケーションは、ちょうど通常のウェブベース電子メールインターフェースのように動作し、ユーザは、ウェブページにログインし、電子メールメッセージをチェックし、他のオペレーションを実行する。しかしながら、いくつかの実施形態において、ウェブベース電子メールアプリケーションは、オフライン機能、すなわち、ウェブアプリケーションによって最もアクセスされそうな電子メールメッセージのいくつかを記憶するローカルデータベースへのアクセス権をアプリケーションに提供することによって可能にされるオフライン機能を有する。次に、クライアントが、ネットワーク接続にアクセスできず、ユーザが、ウェブブラウザを介してウェブベース電子メールプログラムにアクセスしようと試みた場合には、ウェブアプリケーション(例えば、ウェブベース電子メールアプリケーション)は、やはり、ユーザが、ローカルデータベースに記憶された電子メールにアクセスし、かつローカルデータベースに記憶された電子メールに対してオペレーションを実行できるようにする。
[0094] いくつかの実施形態において、クライアントは、図7A−7Bに関連して上記でより詳細に説明したように、ローカルデータベースに記憶されたデータ項目にアクセスすることと、データ項目に対して実行されたオペレーションを検出することと、データ項目の識別子と共に、オペレーションを特徴付ける情報を書き込みキューに書き込むことと、更新されたデータ項目のチェックサムを計算することと、計算されたチェックサムをローカルデータベースに記憶することとを含むオフラインモードで動作する。いくつかの実施形態において、ネットワーク接続が、ウェブアプリケーションとサーバシステムとの間で検出される場合には、クライアントは、書き込みキューをサーバシステム(例えば、ウェブベース電子メールサーバまたはサーバシステム)に送出するが、この場合に、サーバシステムに送信される各要求には、オペレーション、オペレーションによって修正された1つまたは複数のデータ項目の一意の識別子、および1つまたは複数のデータ項目のそれぞれのためのチェックサムが含まれる。
[0095] ローカルデータベースは、不揮発性メモリに記憶され、その結果、たとえウェブアプリケーションがクラッシュした場合でも、その時点までにウェブアプリケーションによって書き込みキューに書き込まれたあらゆるオペレーションが保存される。
[0096] データ項目は、それがクライアントによって要求されなかったために、ローカルデータベースにない可能性があり、またはそれが、キャッシュ置換ポリシーの実行を介してローカルデータベースから削除されたため、ローカルデータベースにない可能性がある。いくつかの実施形態において、図7A−7Bに関連して上記でより詳細に説明したように、ローカルデータベース(例えば、キャッシュ)が一杯であることをシステムが検出した場合には、ローカルデータベース(例えば、キャッシュ)におけるデータ項目の少なくともいくつかは、キャッシュ置換ポリシーに従って削除用の印を付けられる。
[0097] データ項目がローカルデータベースで見つからず(810)、かつクライアントがネットワーク接続を検出できない場合には(812)、エラーが、ウェブアプリケーションに返される(814)。いくつかの実施形態において、エラーはまた、ウェブアプリケーションのユーザに返される(例えば、表示される)。
[0098] ネットワーク接続が検出された場合には(816)、一意の識別子(例えば、図6Bにおける604−1)を含む要求が、通信インターフェース(例えば、ウェブインターフェース)を用いてサーバシステムに送信される。サーバシステムは要求を受信し(818)、かついくつかの実施形態では、受信された一意の識別子をサーバディレクトリ(例えば図6Aにおける602)における一意の識別子(例えば、図6Aにおける604−1)とマッチングすることによって、中央データベース(例えば、図6Aにおける120)におけるデータ項目を調べるために一意の識別子(例えば、図6Bにおける604−1)を用いる。サーバシステムは、中央データベースからデータ項目(およびいくつかの実施形態ではデータ項目に関連する追加情報)を検索し(820)、データ項目(および任意の関連情報)をクライアントに送信する。
[0099] いくつかの実施形態において、サーバシステムは、データ項目に関する第1のチェックサムを計算し(820)、かつデータ項目およびデータ項目に関連する第1のチェックサムをクライアントに送信する。クライアントは、ローカルデータベースにおいてデータ項目および第1のチェックサムを受信し(808)、データ項目に対してオペレーションを実行する(例えば、データ項目を表示する)(826)。いくつかの実施形態において、データ項目に対するオペレーションの実行には、データ項目を修正することが含まれ、クライアントは、修正されたデータ項目用のチェックサムを計算し、ローカルデータベースに記憶された第1のチェックサムをクライアントが計算したチェックサムと交換する。
[00100] いくつかの実施形態において、後の時点で、ウェブアプリケーションは、データ項目への2回目のアクセスを必要とする(828)。クライアントは、データ項目がローカルデータベースにあるかどうかを判定するためにチェックする。たとえデータ項目が、以前にサーバシステムから要求され、ローカルデータベースに記憶されていたとしても、データ項目は、もはや、ローカルデータベースに記憶されていない可能性がある。例えば、データ項目が、キャッシュ置換ポリシーの実行を介してローカルデータベースから削除されている場合には、クライアントは、ローカルデータベースではデータ項目を見つけられない。データ項目が、ローカルデータベースで見つからない場合には(830)、クライアントは、ネットワーク接続があるかどうかを確認する。ネットワーク接続がある場合には(816)、クライアントは、上記でより詳細に説明したように、データ項目の要求をサーバシステムに送信し、応答を受信する。例えば、ウェブアプリケーションがウェブベース電子メールアプリケーションである場合には、ウェブアプリケーションが、(例えば会話を表示するために)電子メール会話を必要とする最初のときに、ウェブアプリケーションは、ウェブベース電子メールサーバに会話を要求しなければならない。この例において、ウェブベース電子メールサーバは、会話に関するチェックサムを計算し、会話に関連する一意の識別子およびチェックサムをクライアントに送信し、これらが、ローカルデータベースに記憶される。次に、ウェブアプリケーションが2回目に会話を必要とするときに、ウェブアプリケーションは、単に、会話に関連する一意の識別子およびチェックサムをサーバに送信することができる。
[00101] データ項目が、ローカルデータベースで見つかった場合には(832)、クライアントは、第1のチェックサム(またはクライアントが計算したチェックサム)およびデータ項目に関連する一意の識別子を含むデータ項目をローカルデータベースから検索する。クライアントは、要求をサーバシステムに送信する(836)。いくつかの実施形態において、この要求には、第1のチェックサム(またはクライアントが計算したチェックサム)が含まれる。いくつかの実施形態において、クライアント装置は、第1のチェックサムおよび一意の識別子をサーバシステムに定期的に送信し、サーバシステムにおいて、第1のチェックサムは、サーバにおけるデータ項目用のチェックサムと比較される。例えば、ウェブベース電子メールアプリケーションは、会話のチェックサムをウェブベース電子メールサーバに送信することによって、特定の会話が最新であることを定期的に確認することができる。この例において、サーバは、(サーバシステムに記憶された)会話のチェックサムを計算し、チェックサムが一致しない場合には、(サーバシステムに記憶された)会話をウェブベース電子メールアプリケーションに送信する。
[00102] いくつかの実施形態において、データ項目は、複数の別個のコンポーネントを有し(例えば、データ項目は会話であり、別個のコンポーネントはメッセージである)、要求には、コンポーネントの識別子が含まれる(838)(例えば、データ項目が、メッセージリストである会話である場合には、要求には、メッセージ識別子が含まれる)。いくつかの実施形態において、コンポーネントの識別子には、クライアント上のデータ項目に関連するコンポーネントの全てが含まれる(例えば、クライアント上に記憶されているような、会話におけるメッセージの全てのためのメッセージ識別子)。
[00103] いくつかの実施形態において、クライアントによってサーバシステムに送信される要求(例えば836)は、ウェブアプリケーションによって自動的に生成される。いくつかの実施形態において、自動的に生成される要求は、ユーザによって最もアクセスされそうなデータ項目を予めロードすることである。一例において、属性「受信箱」に関連する複数の電子メールメッセージまたは電子メールメッセージのグループ(例えば、1つまたは複数の関連する電子メールメッセージを、単一の会話として1つのヘッダの下でグループにまとめてもよい)用のヘッダ情報(例えば送信者および件名)を含む受信箱が表示される。この例において、ウェブアプリケーションは、受信箱の現在のビューにおけるヘッダのそれぞれに関連するデータ項目の要求を自動的に生成する。受信箱の現在のビューが、次のいずれか1つであり得ることを理解されたい。すなわち、受信箱におけるヘッダの全て(例えば、受信箱におけるメッセージ/会話の全てが要求される)と、受信箱の現在のページに含まれるヘッダの全て(例えば、ユーザが、スクリーン上で、スクロールできる範囲のメッセージ/会話の全てが要求される)と、ディスプレイ上に現在表示されているヘッダの全て(例えば、スクロールせずに、ユーザが現在見ることができるヘッダに関連するメッセージ/会話だけが要求される)とである。
[00104] いくつかの実施形態において、データ項目は、圧縮表現として(例えば、圧縮形式で)、または非圧縮表現として(例えば非圧縮形式で)表示してもよい。圧縮形式で表示されるデータ項目には、非圧縮形式で表示されるデータ項目より少ない情報しか含まれない。いくつかの実施形態において、圧縮形式で表示されるデータ項目には、データ項目に関するヘッダ情報だけ(例えば件名、送信者および日付/時間)が含まれる(例えば、会話における第1のメッセージまたはスレッドリストにおける第1の会話に関するヘッダ情報)。いくつかの実施形態において、圧縮形式で表示されるデータ項目には、データ項目の複数のコンポーネント用のヘッダ情報を表示することが含まれる。例えば、データ項目がスレッドリスト(例えば受信箱)である場合には、圧縮形式でスレッドリストを表示することには、スレッドリストのコンポーネント(例えば会話)の1つまたは複数用のヘッダを表示することが含まれる。例えば、データ項目が会話(例えば会話)である場合には、圧縮形式で会話を表示することには、会話のコンポーネント(例えばメッセージ)の1つまたは複数用のヘッダを表示することが含まれる。
[00105] いくつかの実施形態において、ウェブアプリケーションは、最初は、圧縮形式のデータ項目を表示するための、データ項目に関する十分な情報を有しているだけである(例えば、最初は、最新の会話全てのヘッダが、サーバからダウンロードされる)。ウェブアプリケーションが、特定のデータ項目(例えば、1つまたは複数の会話を含む、電子メール受信箱などのスレッドリスト)へのアクセスを要求すると、圧縮形式のデータ項目が表示される(例えば、受信箱における会話全てのヘッダが表示される)。さらに、ウェブアプリケーションが、特定のデータ項目(例えばウェブ電子メール受信箱)へのアクセスを要求すると、ウェブアプリケーションが非圧縮形式のデータ項目を表示できるように、完全なデータ項目がダウンロードされる(例えば、会話のそれぞれにおけるメッセージ全てのヘッダまたは内容)。別の例に関して、ウェブアプリケーションは、最初に圧縮形式で会話を表示してもよく(例えば、会話の電子メールメッセージの1つまたは複数におけるヘッダを表示するだけである)、かつ非圧縮形式の会話を表示する要求(例えば、会話におけるメッセージの1つの全文を見る要求)をユーザから受信した際に、非圧縮形式で会話を表示してもよい(例えば、会話における1つまたは複数の追加電子メールメッセージの全文を表示する)。
[00106] いくつかの実施形態において、要求がサーバシステムに送信された後で、クライアントは、ローカルデータベースに記憶されるデータ項目に対してオペレーションを実行する(例えば、データ項目を表示する)(840)。いくつかの実施形態において、このオペレーションは、サーバシステムからの応答を待つ間に実行される。
[00107] いくつかの実施形態において、サーバシステムは、ウェブアプリケーションからデータ項目の第2の要求を受信するが(842)、この場合に、第2の要求には、データ項目の識別子および第1のチェックサムが含まれる。いくつかの実施形態において、データ項目は、複数の別個のコンポーネントを有し(例えば、データ項目は会話であり、別個のコンポーネントはメッセージである)、要求には、コンポーネントの識別子が含まれる(843)(例えば、データ項目が、メッセージリストである会話の場合には、要求にはメッセージ識別子が含まれる)。それに応じて、サーバシステムは、中央データベース(844)からデータ項目を検索する。いくつかの実施形態において、サーバシステムは、データ項目に対して実行すべきオペレーション(例えば、書き込みキューに記憶され、かつ要求と共に送信されたオペレーション)を有する。サーバシステムは、データ項目を修正する任意のオペレーションを実行し(846)(例えば、図7A−7Bに関連して上記でより詳細に説明したように、書き込みキューからの全てのオペレーションを実行する)、次に、データ項目の第2のチェックサムを計算する(848)。
[00108] いくつかの実施形態において、サーバシステムは、第1のチェックサム(またはクライアントが計算したチェックサム)を第2のチェックサムと比較する。チェックサムが一致する場合には(850)、サーバシステムは、データ項目が更新されなかったと判定し、データ項目が更新されなかったことを示す応答をクライアント装置に送信する(852)。いくつかの実施形態において、データ項目が更新されなかったことを示す応答は、空応答である(例えば、空応答は、それが、ローカルデータベースにおけるデータ項目に追加すべきあらゆるデータが、データ項目と交換すべきデータを含まないことを除いて、データ項目が更新されたことを示す応答におおむね類似している)。クライアントは、サーバから応答を受信し(854)、プロセスは、交換データがないため(856)、終了する(857)。
[00109] チェックサムが一致しない場合には(858)、サーバシステムは、データ項目が更新されたと判定し、データ項目が更新されたことを示す応答をクライアントに送信する(860)。ローカルデータベースにおけるデータ項目を更新するための複数の戦略が存在することを理解されたい。すなわち、いくつかの実施形態によれば、1)データ項目に関連するデータの全てが交換されるか、または2)変更されたかもしくは新しいデータ項目のコンポーネントだけが交換され/データ項目に追加される。
[00110] いくつかの実施形態において、応答には、更新されたデータ項目(862)および第2のチェックサムが含まれる(例えば、更新されたデータ項目全体が、クライアントに送信される)。クライアントは、サーバから応答を受信し(854)、かつ交換データ(例えば交換会話)があるため(864)、サーバシステムから受信されたデータ項目および第2のチェックサムは、ローカルデータベースに記憶されて(866)、古いデータ項目(例えば、以前に記憶された会話)および第1のチェックサム(またはクライアントが計算したチェックサム)に取って代わる。この実施形態は、ネットワーク待ち時間が長く(例えば、通信に長い時間がかかる)、かつネットワーク接続が高帯域幅を有する(例えば、多量のデータを容易に転送できる)場合に、特に有利である。
[00111] いくつかの実施形態において、更新されたデータ項目(またはデータ項目コンポーネント)がサーバシステムから受信された後で、データ項目は、ウェブアプリケーションにおいて再表示される(867)。例えば、ユーザは、電子メール受信箱における会話(例えば、電子メールメッセージリスト)を見る要求を出してもよい。この例において、ウェブアプリケーションは、最初に、ローカルデータベースに記憶された会話のコピーを表示する。ローカルに記憶された会話を表示すると共に、ウェブアプリケーションは、同時に(またはほぼ同時に)ローカルに記憶された会話のチェックサムを含む要求をサーバシステムに送信する。この例において、サーバシステムが、交換会話(更新されたデータ項目)または会話用の追加電子メールメッセージ(新しい/更新されたコンポーネント)を送信する場合には、ウェブアプリケーションは、更新された会話(または会話における新しい電子メール)を再表示する。いくつかの実施形態において、データ項目は、自動的に更新される(例えば、自動的に再表示される)。いくつかの実施形態において、現在表示されているデータ項目が最新ではない(例えば、更新されたデータ項目が利用可能である)ことを示すメッセージが表示される。例えば、メッセージは、「この会話用の新しいメッセージが受信されました。それらを表示しますか?」などのメッセージとすることができる。いくつかの実施形態において、(例えば、「再ロード」ボタンを選択するか、または「新しいメッセージの表示」ボタンを選択することによって)ユーザが、更新されたデータ項目の表示を要求する場合には、更新されたデータ項目が表示される(例えば、データ項目が再表示される)。
[00112] いくつかの実施形態において、クライアントからの要求がコンポーネント識別子(例えばメッセージ識別子)を含んでいた場合には、応答には、1つまたは複数の新しいコンポーネントが含まれる(868)。いくつかの実施形態において、データ項目の新しいコンポーネントは、古いデータ項目のコンポーネント識別子のどれとも一致しないコンポーネント識別子を備えたコンポーネントである(例えば、新しい電子メールが、会話に追加された)。いくつかの実施形態において、新しいコンポーネントは、同じコンポーネント識別子を備えた古いコンポーネントとは異なるチェックサムを有する更新されたコンポーネントである(例えば、会話における電子メールが修正された)。新しいコンポーネントは、データ項目に関連するが、しかし要求に含まれたコンポーネント識別子のどれとも関連しないコンポーネントである。
[00113] 例えば、データ項目が会話であり、かつコンポーネントが会話における電子メールメッセージである場合に、クライアントは、会話の識別子および会話のコンポーネントである電子メールメッセージリスト(例えば、第1の電子メール、第2の電子メール、および第3の電子メール)を含む要求をサーバに送信する。この例において、サーバは、中央データベースから会話を検索し、会話に含まれるメッセージ識別子(例えば、第1の電子メール、第2の電子メール、第3の電子メール、第4の電子メール、および第5の電子メール)に注目し、新しい電子メールメッセージ(例えば、第4の電子メールおよび第5の電子メール)だけを応答でクライアント装置に送信する。クライアントは、サーバから応答を受信し(854)、そして交換データがあるため(864)、データ項目の新しいコンポーネントが、ローカルデータベースに記憶され(866)、ローカルデータベースにおけるデータ項目に関連付けられる。さらに、第2のチェックサムが、ローカルデータベースにおける第1のチェックサム(またはクライアントが計算したチェックサム)に取って代わる。この実施形態は、ネットワーク待ち時間が長く(例えば、通信には長い時間がかかる)、ネットワーク接続が、より低い帯域幅を有する場合には、特に有利である(例えば、どれだけのデータを転送できるかに関していくつかの制限があり、したがってローカルデータベースに記憶されたデータ項目を中央データベースに記憶されたデータ項目と同期させるために、ほんの少数のコンポーネントが必要な場合には、データ項目のほんの少数のコンポーネントを送信することが有利である)。
[00114] いくつかの実施形態において、クライアントからの要求にコンポーネント識別子が含まれなかった場合には、応答には、データ項目におけるコンポーネント識別子の要求が含まれる(870)。この実施形態において、クライアントは、データ項目に関連するコンポーネント識別子(例えば、会話に関連するメッセージ識別子またはスレッドリストに関連するスレッド識別子)の要求を受信する(872)。クライアントは、データ項目に関連するコンポーネント識別子をローカルデータベースから検索し(874)、(データ項目用の関連する一意の識別子と共に)コンポーネント識別子をサーバシステムに送信する(876)。サーバシステムは、要求を受信し、かつ一意の識別子によって示されたデータ項目を中央データベースから検索する(878)。
[00115] サーバシステムは、中央データベースにおけるデータ項目に関連するコンポーネント識別子を、クライアント装置によってサーバシステムに送信されたコンポーネント識別子と比較する(880)。コンポーネント識別子の2つのセットを比較することによって、サーバシステムは、中央データベースにおけるデータ項目のコンポーネント(もしあれば)が新しいかどうかを判定する(882)。一例において、データ項目は、3つのメッセージ(例えば、コンポーネント)を備えた会話であり、この会話では、会話におけるクライアントのバージョンは、最初の2つのメッセージだけを有し、一方で会話におけるサーバシステムのバージョンは、3つの全てのメッセージを有する。この例において、クライアントは、会話における第1のメッセージおよび第2のメッセージ用のサーバシステムメッセージ識別子を送信する。この例において、サーバシステムは、中央データベースから会話を検索し、第1のメッセージ、第2のメッセージ、および第3のメッセージを識別する。この例において、サーバシステムは、クライアントからのメッセージ識別子を、中央データベースから検索されたメッセージと比較し、第3のメッセージが新しいメッセージ(例えば、新しいコンポーネント)であると判定する。
[00116] いくつかの実施形態において、1つまたは複数の新しいコンポーネントがデータ項目に存在すると判定した後で、サーバシステムは、1つまたは複数の新しいコンポーネントを第2のチェックサムと共にクライアントに送信する(884)。クライアントは、1つまたは複数の新しいコンポーネントおよび第2のチェックサムを受信し(886)、1つまたは複数の新しいコンポーネントおよび第2のチェックサムをローカルデータベースに記憶する(888)。この実施形態には、行ったり来たりする往復がより多く含まれるが、全体として往復には、クライアントとサーバとの間で転送される、より少量のデータしか含まれないことに留意されたい。したがって、この実施形態は、ネットワーク待ち時間が短く(例えば、通信には短い時間しかかからない)、ネットワーク接続が低帯域幅を有する(例えば、どれだけのデータを転送できるかには制限があり、したがって、送信することが必要な、データ項目のコンポーネントだけを送信することが有利である)場合に特に有利である。
[00117] いくつかの実施形態において、データ項目を更新する方法(例えば、データ項目全体を更新すること、コンポーネントを送信すること、またはコンポーネントリストの要求を送信し、次にコンポーネントを送信すること)の組み合わせが用いられ、クライアント装置は、クライアント装置とサーバシステムとの間の接続帯域幅および/または接続の待ち時間を判定し、かつ帯域幅の利用可能性またはネットワーク待ち時間による遅延時間の考慮に基づいて、使用すべき最良の方法を決定する。いくつかの実施形態において、サーバシステムは、クライアント装置とサーバシステムとの間の接続帯域幅および/または接続の待ち時間を判定し、かつ帯域幅の利用可能性またはネットワーク待ち時間による遅延時間の考慮に基づいて、使用すべき最良の方法を決定する。
[00118] 本明細書で説明する方法のそれぞれは、コンピュータ可読記憶媒体に記憶された、かつ1つもしくは複数のサーバシステム106またはクライアント装置102における1つまたは複数のプロセッサによって実行される命令によって管理してもよい。図7A−7Bおよび8A−8Dに示すオペレーションのそれぞれは、コンピュータメモリまたはコンピュータ可読記憶媒体に記憶された命令に対応してもよい。
[00119] 説明のための前述の記載は、特定の実施形態に関連して記載された。しかしながら、上記の実例的な説明は、網羅的であるようにも、開示された形態に本発明を正確に限定するようにも意図されていない。上記の教示を考慮すると多数の修正および変更が可能である。実施形態は、本発明の原理およびその実際的な用途を最も良く説明するために選択されて記載され、それによって、当業者が、考えられた特定の使用法に適した様々な修正と共に本発明および様々な実施形態を最もよく利用できるようにする。

Claims (28)

  1. 1つまたは複数のプロセッサ、および前記1つまたは複数のプロセッサによって実行されるプログラムを記憶するメモリを有する計算装置において、
    第1のスレッドでメインアプリケーションを初期化することであって、前記メインアプリケーションが、ターゲットアプリケーションとの第1の同期接続を有することと、
    前記メインアプリケーションが、前記第1の同期接続を介して前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行した後で、第2のスレッドで補助プロセスを初期化することであって、前記補助プロセスが、前記ターゲットアプリケーションとの第2の同期接続、および前記メインアプリケーションとの非同期接続を有することと、
    前記非同期接続を介して前記メインアプリケーションからの要求を、前記補助プロセスにおいて受信することと、
    前記要求に応じて、前記第2の同期接続を介し、前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行することと、
    を含むコンピュータ実行方法。
  2. 前記ターゲットアプリケーションが、前記計算装置におけるデータベースアプリケーションである、請求項1に記載のコンピュータ実行方法。
  3. 前記第1の同期接続を介した、前記ターゲットアプリケーションにおける前記1つまたは複数のオペレーションが、
    前記メインアプリケーションが、ユーザインターフェースを前記計算装置に表示することと、
    前記メインアプリケーションが、前記ターゲットアプリケーションからデータを検索することと、
    前記メインアプリケーションが、前記検索されたデータを前記ユーザインターフェースに読み込むことと、
    をさらに含む、請求項1または2に記載のコンピュータ実行方法。
  4. 前記第2の同期接続を介した、前記ターゲットアプリケーションにおける前記1つまたは複数のオペレーションが、
    前記補助プロセスが、前記メインアプリケーションからデータ要求を受信することと、
    前記データ要求の受信に応じて、
    前記補助プロセスが、前記ターゲットアプリケーションにおいて前記データ要求を同期して実行することと、
    前記補助プロセスが、前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
    前記補助プロセスが、前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
    をさらに含む、請求項1〜3のいずれか一項に記載のコンピュータ実行方法。
  5. 前記第2の同期接続を介した、前記ターゲットアプリケーションにおける前記1つまたは複数のオペレーションが、
    前記補助プロセスが、前記メインアプリケーションからデータ要求を受信することと、
    前記データ要求の受信に応じて、
    前記補助プロセスが、前記ターゲットアプリケーションにおいて前記データ要求を同期して実行することと、
    前記補助プロセスが、前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
    前記補助プロセスが、前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
    をさらに含み、
    前記応答が、前記要求されたデータを含む場合に、前記メインアプリケーションが、前記要求されたデータで前記ユーザインターフェースを更新することをさらに含む、請求項3に記載のコンピュータ実行方法。
  6. 前記応答が、前記要求されたデータを含まない場合に、
    前記メインアプリケーションが、前記要求されたデータの要求をリモートサーバシステムに非同期で出すことと、
    前記メインアプリケーションが、前記要求されたデータを前記リモートサーバシステムから非同期で受信することと、
    前記要求されたデータを前記リモートサーバシステムから受信した後で、
    前記メインアプリケーションが、前記要求されたデータを前記補助プロセスに非同期で転送することと、
    前記補助プロセスが、前記要求されたデータで前記ターゲットアプリケーションを同期して更新することと、
    をさらに含む、請求項4または5に記載のコンピュータ実行方法。
  7. 前記ターゲットアプリケーションが、前記計算装置において画像をレンダリングするためのアプリケーションである、請求項1〜4のいずれか一項に記載のコンピュータ実行方法。
  8. 前記ターゲットアプリケーションが、ファイルにアクセスするか、ファイルを転送するか、またはファイルをダウンロードするためのアプリケーションである、請求項1〜4のいずれか一項に記載のコンピュータ実行方法。
  9. 前記ターゲットアプリケーションが、数値計算を実行するためのアプリケーションである、請求項1〜4のいずれか一項に記載のコンピュータ実行方法。
  10. 前記メインアプリケーションが、前記補助プロセスが初期化された後で、前記補助プロセスから準備完了通知を受信することをさらに含む、請求項1〜4のいずれか一項に記載のコンピュータ実行方法。
  11. 前記補助プロセスが初期化され、かつ前記メインアプリケーションと前記ターゲットアプリケーションとの間の通信ユニットが完了した後で、前記第1の同期接続が終了される、請求項1〜4のいずれか一項に記載のコンピュータ実行方法。
  12. 前記計算装置が、モバイル携帯機器である、請求項1〜4のいずれか一項に記載のコンピュータ実行方法。
  13. 前記メインアプリケーションが、単一スレッドである、請求項1〜6のいずれか一項に記載のコンピュータ実行方法。
  14. 1つまたは複数のプロセッサと、
    メモリと、
    前記メモリに記憶され、かつ前記1つまたは複数のプロセッサによって実行されるように構成された1つまたは複数のプログラムであって、
    第1のスレッドでメインアプリケーションを初期化するための命令であって、前記メインアプリケーションが、ターゲットアプリケーションとの第1の同期接続を有する命令と、
    前記メインアプリケーションが、前記第1の同期接続を介して前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行した後で、第2のスレッドで補助プロセスを初期化するための命令であって、前記補助プロセスが、前記ターゲットアプリケーションとの第2の同期接続、および前記メインアプリケーションとの非同期接続を有する命令と、
    前記非同期接続を介して前記メインアプリケーションからの要求を前記補助プロセスにおいて受信するための命令と、
    前記要求に応じ、前記第2の同期接続を介して前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行するための命令と、を含む1つまたは複数のプログラムと、
    を含むコンピュータシステム。
  15. 前記ターゲットアプリケーションが、前記コンピュータシステムにおけるデータベースアプリケーションである、請求項14に記載のコンピュータシステム。
  16. 前記第1の同期接続を介し、前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行するための前記命令が、
    ユーザインターフェースを前記コンピュータシステムに表示するための命令と、
    前記ターゲットアプリケーションからデータを検索するための命令と、
    前記検索されたデータを前記ユーザインターフェースに読み込むための命令と、
    をさらに含む、請求項14または15に記載のコンピュータシステム。
  17. 前記第2の同期接続を介し、前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行するための前記命令が、
    前記メインアプリケーションからデータ要求を受信するための命令と、
    前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行するための命令と、
    前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信するための命令と、
    前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すための命令と、
    をさらに含む、請求項14〜16のいずれか一項に記載のコンピュータシステム。
  18. 前記第2の同期接続を介し、前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行するための前記命令が、
    前記メインアプリケーションからデータ要求を受信するための命令と、
    前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行するための命令と、
    前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信するための命令と、
    前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すための命令と、
    をさらに含み、
    前記応答が、前記要求されたデータを含む場合に、前記要求されたデータで前記ユーザインターフェースを更新するための命令をさらに含む、請求項16に記載のコンピュータシステム。
  19. 前記応答が、前記要求されたデータを含まない場合に、
    前記要求されたデータの要求をリモートサーバシステムに非同期で出すための命令と、
    前記要求されたデータを前記リモートサーバシステムから非同期で受信するための命令と、
    をさらに含み、
    前記要求されたデータを前記リモートサーバシステムから受信した後で、
    前記要求されたデータを前記補助プロセスに非同期で転送するための命令と、
    前記要求されたデータで前記ターゲットアプリケーションを同期して更新するための命令と、
    をさらに含む、請求項17または18に記載のコンピュータシステム。
  20. 前記補助プロセスが初期化された後で、前記メインアプリケーションが、前記補助プロセスから準備完了通知を受信することをさらに含む、請求項14、15、16または17に記載のコンピュータシステム。
  21. 前記補助プロセスが初期化され、かつ前記メインアプリケーションと前記ターゲットアプリケーションとの間の通信ユニットが完了した後で、前記第1の同期接続が終了される、請求項14〜17のいずれか一項に記載のコンピュータシステム。
  22. 前記コンピュータシステムが、モバイル携帯機器である、請求項14〜17のいずれか一項に記載のコンピュータシステム。
  23. 1つまたは複数のコンピュータプログラムを格納するコンピュータ可読記憶媒体であって、前記1つまたは複数のコンピュータプログラムが命令を含み、これらの命令が、コンピュータシステムによって実行された場合に、
    前記コンピュータシステムに、第1のスレッドでメインアプリケーションを初期化させ、この場合に、前記メインアプリケーションが、ターゲットアプリケーションとの第1の同期接続を有し、
    前記メインアプリケーションが、前記第1の同期接続を介して前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行した後で、前記コンピュータシステムに、第2のスレッドで補助プロセスを初期化させ、この場合に、前記補助プロセスが、前記ターゲットアプリケーションとの第2の同期接続、および前記メインアプリケーションとの非同期接続を有し、
    前記コンピュータシステムに、非同期接続を介して前記メインアプリケーションからの要求を前記補助プロセスにおいて受信させ、
    前記コンピュータシステムに、前記要求に応じ前記第2の同期接続を介して前記ターゲットアプリケーションにおいて1つまたは複数のオペレーションを実行させる、
    コンピュータ可読記憶媒体。
  24. 前記ターゲットアプリケーションが、前記コンピュータシステムにおけるデータベースアプリケーションである、請求項23に記載のコンピュータ可読記憶媒体。
  25. 前記第1の同期接続を介した、前記ターゲットアプリケーションにおける前記1つまたは複数のオペレーションが、
    ユーザインターフェースを前記コンピュータシステムに表示することと、
    前記ターゲットアプリケーションからデータを検索することと、
    前記検索されたデータを前記ユーザインターフェースに読み込むことと、
    をさらに含む、請求項23または24に記載のコンピュータ可読記憶媒体。
  26. 前記第2の同期接続を介した、前記ターゲットアプリケーションにおける前記1つまたは複数のオペレーションが、
    前記メインアプリケーションからデータ要求を受信することと、
    前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行することと、
    前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
    前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
    をさらに含む、請求項23〜25のいずれか一項に記載のコンピュータ可読記憶媒体。
  27. 前記第2の同期接続を介した、前記ターゲットアプリケーションにおける前記1つまたは複数のオペレーションが、
    前記メインアプリケーションからデータ要求を受信することと、
    前記データ要求の受信に応じて、前記データ要求を前記ターゲットアプリケーションにおいて同期して実行することと、
    前記データ要求に対する応答を前記ターゲットアプリケーションから同期して受信することと、
    前記データ要求に対する前記応答を前記メインアプリケーションに非同期で返すことと、
    をさらに含み、
    前記応答が、前記要求されたデータを含む場合に、前記要求されたデータで前記ユーザインターフェースを更新するための命令をさらに含む、請求項25に記載のコンピュータ可読記憶媒体。
  28. 前記応答が、前記要求されたデータを含まない場合に、
    前記要求されたデータの要求をリモートサーバシステムに非同期で出すための命令と、
    前記要求されたデータを前記リモートサーバシステムから非同期で受信するための命令と、
    をさらに含み、
    前記要求されたデータを前記リモートサーバシステムから受信した後で、
    前記要求されたデータを前記補助プロセスに非同期で転送するための命令と、
    前記要求されたデータで前記ターゲットアプリケーションを同期して更新するための命令と、
    をさらに含む、請求項26または27に記載のコンピュータ可読記憶媒体。
JP2012503690A 2009-04-03 2010-04-01 ソフトウェアアプリケーションの起動コストを低減するためのシステムおよび方法 Expired - Fee Related JP5680620B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/418,444 2009-04-03
US12/418,444 US8260876B2 (en) 2009-04-03 2009-04-03 System and method for reducing startup cost of a software application
PCT/US2010/029564 WO2010114963A1 (en) 2009-04-03 2010-04-01 System and method for reducing startup cost of a software application

Publications (2)

Publication Number Publication Date
JP2012523048A JP2012523048A (ja) 2012-09-27
JP5680620B2 true JP5680620B2 (ja) 2015-03-04

Family

ID=42237778

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012503690A Expired - Fee Related JP5680620B2 (ja) 2009-04-03 2010-04-01 ソフトウェアアプリケーションの起動コストを低減するためのシステムおよび方法

Country Status (8)

Country Link
US (2) US8260876B2 (ja)
EP (1) EP2414938A1 (ja)
JP (1) JP5680620B2 (ja)
KR (1) KR101678245B1 (ja)
CN (1) CN102449602A (ja)
AU (1) AU2010232613B2 (ja)
CA (1) CA2757535A1 (ja)
WO (1) WO2010114963A1 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8725793B2 (en) * 2009-04-03 2014-05-13 Google Inc. Architectural pattern for persistent web application design
US8842680B2 (en) * 2009-04-30 2014-09-23 Blackberry Limited Method of maintaining data collections in a mobile communication device
EP2336967B1 (fr) * 2009-12-15 2019-06-12 Orange Messagerie personnalisée sur encarts web.
US9268664B2 (en) 2010-04-06 2016-02-23 Paypal, Inc. Method and system for synchronous and asynchronous monitoring
US8244698B2 (en) 2010-07-23 2012-08-14 Google Inc. Encoding a schema version in table names
JP5840525B2 (ja) * 2012-02-16 2016-01-06 シャープ株式会社 情報処理装置
EP2650799A1 (en) * 2012-04-11 2013-10-16 Bigpoint GmbH Online game system and method
US8990818B2 (en) * 2012-06-01 2015-03-24 Microsoft Technology Licensing, Llc Multiple top level user interface displays
CN103412740B (zh) * 2012-06-01 2016-09-14 微软技术许可有限责任公司 多顶层用户界面显示
US9405602B1 (en) * 2012-06-25 2016-08-02 Google Inc. Method for application notification and tasking
TWI477978B (zh) * 2012-12-07 2015-03-21 Inst Information Industry 資料同步系統以及資料同步方法
US10348821B2 (en) * 2012-12-21 2019-07-09 Dropbox, Inc. Prioritizing structural operations and distributing changes in a synced online content management system
US9614932B2 (en) * 2013-03-14 2017-04-04 Microsoft Technology Licensing, Llc Managing and implementing web application data snapshots
CN103164267A (zh) * 2013-03-29 2013-06-19 汉柏科技有限公司 无锁消息队列实现方法
US10656800B2 (en) 2013-03-29 2020-05-19 Microsoft Technology Licensing, Llc Visual configuration and activation
US10452222B2 (en) 2013-05-29 2019-10-22 Microsoft Technology Licensing, Llc Coordination of system readiness tasks
US9596196B1 (en) * 2013-10-17 2017-03-14 Amazon Technologies, Inc. Message grouping
US20160218873A1 (en) * 2015-01-22 2016-07-28 Vermont Secure Computing Inc. Method and system for securely storing and using private cryptographic keys
WO2017117216A1 (en) * 2015-12-29 2017-07-06 Tao Tao Systems and methods for caching task execution
CN107491346B (zh) * 2016-06-12 2021-03-12 阿里巴巴集团控股有限公司 一种应用的任务处理方法、装置及系统
US10706069B2 (en) 2016-06-30 2020-07-07 Facebook, Inc. Techniques for replication of a client database to remote devices
US20180013714A1 (en) * 2016-07-06 2018-01-11 Facebook, Inc. Techniques for messaging using replication of a client database
JP6971578B2 (ja) * 2017-01-23 2021-11-24 キヤノン株式会社 情報処理装置及びその制御方法
US11340872B1 (en) 2017-07-21 2022-05-24 State Farm Mutual Automobile Insurance Company Method and system for generating dynamic user experience applications
JP7080033B2 (ja) * 2017-11-07 2022-06-03 株式会社日立製作所 タスク管理システム、タスク管理方法、及びタスク管理プログラム
CN109359256A (zh) * 2018-09-29 2019-02-19 北京城市网邻信息技术有限公司 页面加载方法、装置、设备及存储介质
CN112559070B (zh) * 2020-12-09 2024-06-14 北京展心展力信息科技有限公司 应用程序启动时的初始化方法、装置、电子设备及介质

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5453992A (en) * 1993-08-02 1995-09-26 Texas Instruments Incorporated Method and apparatus for selectable parallel execution of test operations
US5913060A (en) * 1995-10-11 1999-06-15 Citrix Systems, Inc. Method for deadlock avoidance in a distributed process system using a synchronous procedure call
JPH1063524A (ja) * 1996-04-29 1998-03-06 Fujitsu Ltd ネットワーク資源共用方式
FI108478B (fi) * 1998-01-21 2002-01-31 Nokia Corp Sulautettu jõrjestelmõ
JP2000047887A (ja) * 1998-07-30 2000-02-18 Toshiba Corp 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置
US6633547B1 (en) * 1999-04-29 2003-10-14 Mitsubishi Electric Research Laboratories, Inc. Command and control transfer
US6964008B1 (en) 1999-11-12 2005-11-08 Maxtor Corporation Data checksum method and apparatus
US20010044837A1 (en) * 2000-03-30 2001-11-22 Iqbal Talib Methods and systems for searching an information directory
US6704024B2 (en) 2000-08-07 2004-03-09 Zframe, Inc. Visual content browsing using rasterized representations
DE10047216A1 (de) 2000-09-23 2002-04-11 Philips Corp Intellectual Pty Ein Verfahren zur Erkennung von Schreibkonflikten in replizierten Datenbanken ohne Speicheroverhead
US8234338B1 (en) * 2001-04-20 2012-07-31 Microsoft Corporation System and method for reliable message delivery
JP3823040B2 (ja) 2001-10-12 2006-09-20 インターナショナル・ビジネス・マシーンズ・コーポレーション データ記憶装置、データ処理装置、書き込み要求の実行順序を最適化する方法、データ処理方法およびハード・ディスク・ドライブ
TW573257B (en) 2002-03-29 2004-01-21 Hon Hai Prec Ind Co Ltd Automatic data download system and method
US7366894B1 (en) * 2002-06-25 2008-04-29 Cisco Technology, Inc. Method and apparatus for dynamically securing voice and other delay-sensitive network traffic
US7152242B2 (en) 2002-09-11 2006-12-19 Enterasys Networks, Inc. Modular system for detecting, filtering and providing notice about attack events associated with network security
US7412532B2 (en) * 2002-12-13 2008-08-12 Aol Llc, A Deleware Limited Liability Company Multimedia scheduler
US7487502B2 (en) * 2003-02-19 2009-02-03 Intel Corporation Programmable event driven yield mechanism which may activate other threads
US7092703B1 (en) * 2003-03-24 2006-08-15 Sprint Spectrum L.P. Method and system for accessing a universal message handler on a mobile device
US20050017675A1 (en) * 2003-07-16 2005-01-27 Potter Hsieh Hub Structure having a charging function
JP4243571B2 (ja) 2003-08-05 2009-03-25 パナソニック株式会社 放送受信装置
US7831693B2 (en) * 2003-08-18 2010-11-09 Oracle America, Inc. Structured methodology and design patterns for web services
US8432562B2 (en) * 2004-02-17 2013-04-30 Ricoh Company, Ltd. Image processing apparatus, method, program, and computer readable recording medium for controlling operation switching and displaying at occurrence of error conditions
JP2005301791A (ja) 2004-04-14 2005-10-27 Nec Corp 移動通信端末および移動通信端末のアプリケーション起動制御方法
JP2006163714A (ja) * 2004-12-06 2006-06-22 Fuji Photo Film Co Ltd 撮影装置
US8230423B2 (en) 2005-04-07 2012-07-24 International Business Machines Corporation Multithreaded processor architecture with operational latency hiding
JP2008537432A (ja) * 2005-04-19 2008-09-11 エスケーテレコム株式会社 デュアルバンド/デュアルモードを支援する移動通信端末のハンドオーバ方法
US7594003B2 (en) 2005-08-02 2009-09-22 Aol Llc Client/server web application architectures for offline usage, data structures, and related methods
US8873539B2 (en) * 2005-09-06 2014-10-28 Nokia Corporation Multimedia call control mechanism and communication equipment using the same
US8595744B2 (en) * 2006-05-18 2013-11-26 Oracle America, Inc. Anticipatory helper thread based code execution
US7792792B2 (en) 2006-05-22 2010-09-07 Microsoft Corporation Synchronizing structured web site contents
US7769144B2 (en) 2006-07-21 2010-08-03 Google Inc. Method and system for generating and presenting conversation threads having email, voicemail and chat messages
US20080155118A1 (en) * 2006-12-21 2008-06-26 International Business Machines Corporation Really simple syndication (rss) feed customization
EP1962192A1 (en) 2007-02-21 2008-08-27 Deutsche Telekom AG Method and system for the transparent migration of virtual machine storage
US20080247278A1 (en) * 2007-03-07 2008-10-09 Jason Walker Programmable watch winder
US8244907B2 (en) 2007-10-16 2012-08-14 International Business Machines Corporation Browser-based logoff from distributed and federated environments
US8045922B2 (en) * 2007-11-23 2011-10-25 Texas Instruments Incorporated Apparatus for and method of bluetooth and wireless local area network coexistence using a single antenna in a collocated device
US20100008338A1 (en) * 2008-07-14 2010-01-14 Texas Instruments Incorporated High transmission power using shared bluetooth and wireless local area network front end module
US8819560B2 (en) 2008-08-04 2014-08-26 International Business Machines Corporation Dispatching events to multiple browser windows/tabs using a single connection
US9792384B2 (en) 2009-02-26 2017-10-17 Red Hat, Inc. Remote retreival of data files
US8301996B2 (en) * 2009-03-19 2012-10-30 Microsoft Corporation Annotating images with instructions
US8218454B2 (en) * 2009-09-21 2012-07-10 At&T Intellectual Property I, L.P. Methods and apparatus to implement scalable routing in network communication systems
US20110178940A1 (en) * 2010-01-19 2011-07-21 Matt Kelly Automated assessment center
US10395031B2 (en) * 2010-12-30 2019-08-27 Verisign, Inc. Systems and methods for malware detection and scanning
US10096033B2 (en) * 2011-09-15 2018-10-09 Stephan HEATH System and method for providing educational related social/geo/promo link promotional data sets for end user display of interactive ad links, promotions and sale of products, goods, and/or services integrated with 3D spatial geomapping, company and local information for selected worldwide locations and social networking
US8965897B2 (en) * 2012-02-29 2015-02-24 International Business Machines Corporation Intelligent product feedback analytics tool

Also Published As

Publication number Publication date
CN102449602A (zh) 2012-05-09
JP2012523048A (ja) 2012-09-27
KR20120005488A (ko) 2012-01-16
CA2757535A1 (en) 2010-10-07
US8260876B2 (en) 2012-09-04
WO2010114963A1 (en) 2010-10-07
US9086914B2 (en) 2015-07-21
WO2010114963A8 (en) 2011-11-17
KR101678245B1 (ko) 2016-11-21
AU2010232613A1 (en) 2011-11-17
US20120303756A1 (en) 2012-11-29
US20100257229A1 (en) 2010-10-07
EP2414938A1 (en) 2012-02-08
AU2010232613B2 (en) 2015-11-19

Similar Documents

Publication Publication Date Title
JP5680620B2 (ja) ソフトウェアアプリケーションの起動コストを低減するためのシステムおよび方法
EP2665001B1 (en) Architectural pattern for persistent web application design
US8200896B2 (en) Increasing remote desktop performance with video caching
US11899618B2 (en) Architecture for management of digital files across distributed network
US8666954B2 (en) Reduced bandwidth cache coherency via checksum exchange
US20130339469A1 (en) Self-replenishing caches
KR20230080902A (ko) 분산 컴퓨팅 환경에서의 데이터 선 적재 장치 및 이를 이용한 방법
KR20130038715A (ko) 룰 데이터 처리 시스템 및 그 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130319

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140225

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140523

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140530

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140618

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140714

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141009

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20141211

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150107

R150 Certificate of patent or registration of utility model

Ref document number: 5680620

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

LAPS Cancellation because of no payment of annual fees
R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350