2005年10月02日
川俣晶の縁側ソフトウェア技術雑記total 40952 count

Ajaxの長所・短所・実装に関するメモ (暫定版)

Written By: 川俣 晶連絡先

 Ajaxについては日本語で読めるAjax関連情報のリンク集等を参照。

 以下は、私なりにより分かりやすくなるように考えた結果であって、本来あるべきAjaxの内容をストレートに反映しているか否かは分かりません。

Ajaxとは何か §

  • UIへの応答を含むJavaScriptで記述されたコードを含む
  • HTML+CSSにより記述され
  • Webブラウザに実装されたXMLHttpRequestオブジェクトにより
  • 主にXMLデータを
  • サーバより非同期に受け取り
  • Dynamic HTMLにより表示内容を構築するページ

 という理解は、まだ一面的でありすぎるように思われます。

 この解釈ではサーバ側の処理がどのようなものであるかが、致命的に欠落しているからです。

 サーバ側に何らかの処理を要求しない、つまりサーバ側の静的なリソースを取得するだけのAjaxアプリケーションはあり得ます。しかし、過半数のケースでは、サーバ側に何らかのインテリジェントなプログラムが必要とされ、Ajaxプログラムの要求に対して動的に応答することになると考えます。

 つまり、上記の列挙された条件を"Ajaxクライアントの定義"と見なし、それに対応する"Ajaxサーバ"が存在すると考え、Ajaxとは2層の分散アプリケーションモデルであると理解することも可能であると考えられます。(サーバ側にインテリジェンスが必要とされない場合は、"ダムAjaxサーバ"を使うと解釈する)

 ちなみに、サーバ側に更に階層が存在し、実質的に3層、4層といった階層を持つことも考えられます。しかし、それはAjaxサーバの実装の都合であり、Ajaxモデルとは直接関係がないと見なして一時的に忘れることにします。(が、実際にはRDBにせよXMLDBにせよ、DBを裸のまま外部に見せるのは危険なので、中間にラッピングするレイヤーが入り、少なくともDB-Ajaxサーバ-Ajaxクライアントの3層が標準的な構成になると思われる)

Ajax分散モデルの特徴 §

 分散アプリケーションというキーワードは流行しています。

 たとえば、いわゆるWebサービスなども、分散アプリケーションの一種と言えます。

 しかし、Ajax分散モデルは、いわゆるWebサービスの分散モデルとは決定的に異なります。

 いわゆるWebサービスの分散モデルは、不特定多数のサービスを検索によって集め、それらを組み合わせて応用システムを構築します。

 しかし、Ajax分散モデルは、「不特定多数のサービス」という概念も「検索」という概念もありません。1つの応用システムを構築するコンポーネントとしてAjaxクライアントとAjaxサーバが開発されます。

 このような特徴は、Ajaxが分散システムのあるべき理想の姿から逸脱した堕落であるという批判の対象になり得ます。

 しかし、いわゆるWebサービスにおいて、検索してサービスを集めることで応用システムが出来上がるという主張はこれだけの時間を待ってすら現実的に可能になったとは思えません。従って、それが誤りであることは経験的に実証済みであると見なして良いでしょう。(最初から無理だと思っていましたが)

 ですから、今ここで分散アプリケーションを語るならば、「多数のサービス」だの「検索」だのという「経験的に不可能であることが実証された機能性」を除外したモデルに立脚する必要があります。

 Ajax分散モデルは、その条件を満たします。

 ちなみに、専用サーバと専用クライアントが同時に開発される応用システムとしては、いわゆるネットワークゲームがあります。ネットワークゲームは非常に成功しており、多数の利用者を抱えています。成功したモデルと同じ特徴を有することは、Ajaxにとって好ましい点であると言えます。

バージョンアップ §

 Ajax分散モデルにおいて、サーバとクライアントの開発は同時並行で行われ、バージョンアップも同期して行われます。つまり、Ajaxアプリケーションのページにアクセスすると、いつでもその時点で最新のAjaxクライアントにアクセスでき、稼働しているAjaxサーバとのバージョン不整合は発生しないことになります。

 (このモデルはネットワークゲームのバージョンアップシステムに似ている)

 ただし、Ajaxクライアントを使用中にAjaxサーバがバージョンアップした場合、バージョンの不整合が発生する可能性があります。これを防止する何らかの仕組みを用意することが必要でしょう。(実装上の注意点)

自動セーブによる救済 §

 個人的に、Webアプリケーションを使用していて最も腹が立つのは、長文のテキストを入力中に誤ってEscキーを押すとそれが消えてしまったり、別のページに移動してしまい、戻ってみると入力テキストが消えていたりするような状況です。

 しかし、Ajaxアプリケーションは、非同期通信という特徴を活かして、ページ間遷移を行うことなく、入力中のテキストをサーバに送って保存させることができます。

 自動セーブは、Webアプリケーションの短所を補うという意味で、事実上必須の機能と言えると思います。(実装への要請)

リンクできない問題 §

 Ajaxアプリケーションは、動的に様々なデータをWebブラウザ上に表示することができます。しかし、その内容は、ユーザー、サーバとの間のインタラクションによって動的に構築されるものであり、ある表示内容をBookmarkに保存しようと思ってもできません。また、容易に他人に教えることもできません。

 この問題を解決するために、Google マップの「このページのリンク」に相当する機能は(それが不用であるという明確な理由がない限り)必須であると考えられます。(「このページのリンク」の使用例) (実装への要請)

 ただし、どのような形でユーザーに示すのが良いかは、要検討です。

2005年10月3日追記 §

観測気球さんのAjax雑感 その2よりトラックバックを頂きました。既に様々な方法が提案されているそうです。実際、このページより参照されている「JKL.ParseXML+ECS 4.0なページ」で遊んでみるの事例は非常に面白いので必見です。ページの初期化の段階でlocation.hashからパラメタ値を取り出し、パラメタ値が変更された場合はその値を動的にlocation.hashに反映させていきます。これにより、Webブラウザのアドレス欄のURLは、常に表示されている情報を示す内容に維持されます。

ロボット相手に見せる内容 §

 検索エンジンのロボットなどは、Ajaxアプリケーションを操作することができません。従って、そのページでいかなる情報が提供されるかを知ることが出来ません。

 もし、検索エンジンによって読者を得たいと思うならば、ロボットに対してはロボットが解釈可能なデータを送信するように実装する必要が生じます。(実装への要請)

 その際、上の「リンクできない問題」で示した個別の内容への固有のリンクが役立ちます。この問題に対処するためにも、個別の内容へリンクする固有のURLを解釈する機能が必要とされます。

ロボットにより好ましい内容を見せる §

 ブログなどで、相互に関係がない複数の情報が1つのページ上にある場合、複数キーワードを用いた検索の精度が落ちる問題があります。つまり、ある特定の2つのキーワードについて言及されている話題を探しているにもかかわらず、全く別個の話題でそれぞれのキーワードが言及されたページがヒットしてしまうのです。

 ロボット相手に見せる内容を別途生成する場合、この問題への対処が容易に可能となります。

 つまり、Ajaxクライアントが、相互に関係のない複数の情報をまとめて表示する能力を持っているとしても、ロボット相手にはそのような内容は提示しないように制限する(個別の話題を提示する相互に異なるURLを提示する)という実装にしておけば、検索の精度が上がります。(実装上の提案)

非同期通信の難しさ §

 非同期通信は、一般的に同期通信と比較して扱いが難しく、プログラム開発の難度が上昇することが考えられます。(短所)

 しかし、非同期通信は好ましい使い勝手を実現してくれる切り札とも言うべき機能です。(長所)

開発にはhttpdを用意する方が良い (2005年10月3日内容入れ替え) §

 IEのXMLHttpRequestオブジェクトのresponseXMLプロパティの値は、Content-Typeが"text/xml"ではない場合にはnullになります。そのためか、ローカルファイルから開いた場合には値が常にnullになります。他にも動作に相違点がある可能性があるので、Ajaxコンテンツの開発には、動的なサーバ側のコーディングが必要ないとしても、httpdを用意した方がベターでしょう。

 Firefox, OperaはローカルのXML文書ファイルをresponseXMLプロパティで取り出すことができます。

開発には少なくともIE, Firefox, Operaを用意する (2005年10月3日追加) §

 これらのWebブラウザは細かい挙動に相違があり、そのままでは動かない事例も珍しくありません。少なくとも、この3つぐらいは用意して動作テストを行う必要があるでしょう。

(未完)

Facebook

トラックバック一覧

2007年03月20日IEのXMLHttpRequestオブジェクトのresponseXMLプロパティの値についてFrom: らくがき部隊・yahoo駐屯地

IEのXMLHttpRequestオブジェクトのresponseXMLプロパティの値はContent-typeがtext/xmlでないと値が常にnullになるという仕様らしい。 ajaxについて勉強しようと買ってきた本の中にあったXML読み込みのサンプルをテストしていたらfirefoxでは動くのにIEでは動かないという現象が起こったため、色々調べてみたら、どうやらそういうことらしいです。 なんというか素晴らしく清清しい気分で、絵で表すとこんな感じです。 [[attached(1)]... 続きを読む

2005年10月04日[Clip] 中小企業のWeb活用、ゲーム感覚でWebビジネス、Ajaxの長所・短所From: アークウェブ ビジネスブログ

10月4日のクリップです。 Japan.internet.com - 中小企業... 続きを読む

2005年10月03日Ajax雑感 その2From: 観測気球

Ajax では、そのままでは URL が変化しないため、ブックマークしたり、他の Web ページからリンクしたりするときに不都合です。その解決法はすでにいくつか提示されています。 続きを読む

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2005年
10月
03日
XMLとAjaxの関係は希薄か濃厚か?
3days 0 count
total 1622 count
【技術雑記】の前のコンテンツ
2005年
09月
28日
日本語で読めるAjax関連情報のリンク集
3days 0 count
total 86074 count
2005年10月02日
川俣晶の縁側ソフトウェア技術雑記total 40952 count

Ajaxの長所・短所・実装に関するメモ (暫定版)

Written By: 川俣 晶連絡先

 Ajaxについては日本語で読めるAjax関連情報のリンク集等を参照。

 以下は、私なりにより分かりやすくなるように考えた結果であって、本来あるべきAjaxの内容をストレートに反映しているか否かは分かりません。

Ajaxとは何か §

  • UIへの応答を含むJavaScriptで記述されたコードを含む
  • HTML+CSSにより記述され
  • Webブラウザに実装されたXMLHttpRequestオブジェクトにより
  • 主にXMLデータを
  • サーバより非同期に受け取り
  • Dynamic HTMLにより表示内容を構築するページ

 という理解は、まだ一面的でありすぎるように思われます。

 この解釈ではサーバ側の処理がどのようなものであるかが、致命的に欠落しているからです。

 サーバ側に何らかの処理を要求しない、つまりサーバ側の静的なリソースを取得するだけのAjaxアプリケーションはあり得ます。しかし、過半数のケースでは、サーバ側に何らかのインテリジェントなプログラムが必要とされ、Ajaxプログラムの要求に対して動的に応答することになると考えます。

 つまり、上記の列挙された条件を"Ajaxクライアントの定義"と見なし、それに対応する"Ajaxサーバ"が存在すると考え、Ajaxとは2層の分散アプリケーションモデルであると理解することも可能であると考えられます。(サーバ側にインテリジェンスが必要とされない場合は、"ダムAjaxサーバ"を使うと解釈する)

 ちなみに、サーバ側に更に階層が存在し、実質的に3層、4層といった階層を持つことも考えられます。しかし、それはAjaxサーバの実装の都合であり、Ajaxモデルとは直接関係がないと見なして一時的に忘れることにします。(が、実際にはRDBにせよXMLDBにせよ、DBを裸のまま外部に見せるのは危険なので、中間にラッピングするレイヤーが入り、少なくともDB-Ajaxサーバ-Ajaxクライアントの3層が標準的な構成になると思われる)

Ajax分散モデルの特徴 §

 分散アプリケーションというキーワードは流行しています。

 たとえば、いわゆるWebサービスなども、分散アプリケーションの一種と言えます。

 しかし、Ajax分散モデルは、いわゆるWebサービスの分散モデルとは決定的に異なります。

 いわゆるWebサービスの分散モデルは、不特定多数のサービスを検索によって集め、それらを組み合わせて応用システムを構築します。

 しかし、Ajax分散モデルは、「不特定多数のサービス」という概念も「検索」という概念もありません。1つの応用システムを構築するコンポーネントとしてAjaxクライアントとAjaxサーバが開発されます。

 このような特徴は、Ajaxが分散システムのあるべき理想の姿から逸脱した堕落であるという批判の対象になり得ます。

 しかし、いわゆるWebサービスにおいて、検索してサービスを集めることで応用システムが出来上がるという主張はこれだけの時間を待ってすら現実的に可能になったとは思えません。従って、それが誤りであることは経験的に実証済みであると見なして良いでしょう。(最初から無理だと思っていましたが)

 ですから、今ここで分散アプリケーションを語るならば、「多数のサービス」だの「検索」だのという「経験的に不可能であることが実証された機能性」を除外したモデルに立脚する必要があります。

 Ajax分散モデルは、その条件を満たします。

 ちなみに、専用サーバと専用クライアントが同時に開発される応用システムとしては、いわゆるネットワークゲームがあります。ネットワークゲームは非常に成功しており、多数の利用者を抱えています。成功したモデルと同じ特徴を有することは、Ajaxにとって好ましい点であると言えます。

バージョンアップ §

 Ajax分散モデルにおいて、サーバとクライアントの開発は同時並行で行われ、バージョンアップも同期して行われます。つまり、Ajaxアプリケーションのページにアクセスすると、いつでもその時点で最新のAjaxクライアントにアクセスでき、稼働しているAjaxサーバとのバージョン不整合は発生しないことになります。

 (このモデルはネットワークゲームのバージョンアップシステムに似ている)

 ただし、Ajaxクライアントを使用中にAjaxサーバがバージョンアップした場合、バージョンの不整合が発生する可能性があります。これを防止する何らかの仕組みを用意することが必要でしょう。(実装上の注意点)

自動セーブによる救済 §

 個人的に、Webアプリケーションを使用していて最も腹が立つのは、長文のテキストを入力中に誤ってEscキーを押すとそれが消えてしまったり、別のページに移動してしまい、戻ってみると入力テキストが消えていたりするような状況です。

 しかし、Ajaxアプリケーションは、非同期通信という特徴を活かして、ページ間遷移を行うことなく、入力中のテキストをサーバに送って保存させることができます。

 自動セーブは、Webアプリケーションの短所を補うという意味で、事実上必須の機能と言えると思います。(実装への要請)

リンクできない問題 §

 Ajaxアプリケーションは、動的に様々なデータをWebブラウザ上に表示することができます。しかし、その内容は、ユーザー、サーバとの間のインタラクションによって動的に構築されるものであり、ある表示内容をBookmarkに保存しようと思ってもできません。また、容易に他人に教えることもできません。

 この問題を解決するために、Google マップの「このページのリンク」に相当する機能は(それが不用であるという明確な理由がない限り)必須であると考えられます。(「このページのリンク」の使用例) (実装への要請)

 ただし、どのような形でユーザーに示すのが良いかは、要検討です。

2005年10月3日追記 §

観測気球さんのAjax雑感 その2よりトラックバックを頂きました。既に様々な方法が提案されているそうです。実際、このページより参照されている「JKL.ParseXML+ECS 4.0なページ」で遊んでみるの事例は非常に面白いので必見です。ページの初期化の段階でlocation.hashからパラメタ値を取り出し、パラメタ値が変更された場合はその値を動的にlocation.hashに反映させていきます。これにより、Webブラウザのアドレス欄のURLは、常に表示されている情報を示す内容に維持されます。

ロボット相手に見せる内容 §

 検索エンジンのロボットなどは、Ajaxアプリケーションを操作することができません。従って、そのページでいかなる情報が提供されるかを知ることが出来ません。

 もし、検索エンジンによって読者を得たいと思うならば、ロボットに対してはロボットが解釈可能なデータを送信するように実装する必要が生じます。(実装への要請)

 その際、上の「リンクできない問題」で示した個別の内容への固有のリンクが役立ちます。この問題に対処するためにも、個別の内容へリンクする固有のURLを解釈する機能が必要とされます。

ロボットにより好ましい内容を見せる §

 ブログなどで、相互に関係がない複数の情報が1つのページ上にある場合、複数キーワードを用いた検索の精度が落ちる問題があります。つまり、ある特定の2つのキーワードについて言及されている話題を探しているにもかかわらず、全く別個の話題でそれぞれのキーワードが言及されたページがヒットしてしまうのです。

 ロボット相手に見せる内容を別途生成する場合、この問題への対処が容易に可能となります。

 つまり、Ajaxクライアントが、相互に関係のない複数の情報をまとめて表示する能力を持っているとしても、ロボット相手にはそのような内容は提示しないように制限する(個別の話題を提示する相互に異なるURLを提示する)という実装にしておけば、検索の精度が上がります。(実装上の提案)

非同期通信の難しさ §

 非同期通信は、一般的に同期通信と比較して扱いが難しく、プログラム開発の難度が上昇することが考えられます。(短所)

 しかし、非同期通信は好ましい使い勝手を実現してくれる切り札とも言うべき機能です。(長所)

開発にはhttpdを用意する方が良い (2005年10月3日内容入れ替え) §

 IEのXMLHttpRequestオブジェクトのresponseXMLプロパティの値は、Content-Typeが"text/xml"ではない場合にはnullになります。そのためか、ローカルファイルから開いた場合には値が常にnullになります。他にも動作に相違点がある可能性があるので、Ajaxコンテンツの開発には、動的なサーバ側のコーディングが必要ないとしても、httpdを用意した方がベターでしょう。

 Firefox, OperaはローカルのXML文書ファイルをresponseXMLプロパティで取り出すことができます。

開発には少なくともIE, Firefox, Operaを用意する (2005年10月3日追加) §

 これらのWebブラウザは細かい挙動に相違があり、そのままでは動かない事例も珍しくありません。少なくとも、この3つぐらいは用意して動作テストを行う必要があるでしょう。

(未完)

Facebook

トラックバック一覧

2007年03月20日IEのXMLHttpRequestオブジェクトのresponseXMLプロパティの値についてFrom: らくがき部隊・yahoo駐屯地

IEのXMLHttpRequestオブジェクトのresponseXMLプロパティの値はContent-typeがtext/xmlでないと値が常にnullになるという仕様らしい。 ajaxについて勉強しようと買ってきた本の中にあったXML読み込みのサンプルをテストしていたらfirefoxでは動くのにIEでは動かないという現象が起こったため、色々調べてみたら、どうやらそういうことらしいです。 なんというか素晴らしく清清しい気分で、絵で表すとこんな感じです。 [[attached(1)]... 続きを読む

2005年10月04日[Clip] 中小企業のWeb活用、ゲーム感覚でWebビジネス、Ajaxの長所・短所From: アークウェブ ビジネスブログ

10月4日のクリップです。 Japan.internet.com - 中小企業... 続きを読む

2005年10月03日Ajax雑感 その2From: 観測気球

Ajax では、そのままでは URL が変化しないため、ブックマークしたり、他の Web ページからリンクしたりするときに不都合です。その解決法はすでにいくつか提示されています。 続きを読む

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2005年
10月
03日
XMLとAjaxの関係は希薄か濃厚か?
3days 0 count
total 1622 count
【技術雑記】の前のコンテンツ
2005年
09月
28日
日本語で読めるAjax関連情報のリンク集
3days 0 count
total 86074 count
【技術雑記】のコンテンツ全リスト【技術雑記】の表紙

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20051002182645
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Google

Powered by MagSite2 Version 0.21 (Alpha-Test) Copyright (c) 2004-2015 Pie Dey.Co.,Ltd.