AJAXを使用してサイトを構築する際の最大の問題は、 AHAH(非同期HTMLおよびHTTP)メカニズムを実装するときに発生します。 特に、ロードされたJavascriptのオンザフライ実行。 また、AJAXサイトおよびWebアプリケーションを開発する際に、追加の「hem」があります。 既存の問題の詳細な説明を読むことができます。 これらの困難のため、多くの開発者は、AJAXのより豊富な実装を放棄しています。
ただし、これらの問題を解決できることを知っている人はほとんどいません。 さらに、複雑なAJAX Webアプリケーションを開発するときや、埋め込まれたスクリプトでHTMLページを動的にロードするときに、問題やボトルネックを簡単に回避できるソリューションが既にいくつかあります。
これらのソリューションの1つは、AJAXを使用してサイトとWebアプリケーションを構築するためのテクノロジーであるFullajaxです。 これは、AJAXおよびAHAHのフルパワーの実装を最大化するためのアルゴリズム、アプローチ、ルール、およびメソッドの組み合わせです。 このテクノロジーの目的は、複雑さを軽減し、AJAXアプリケーションの狭い焦点を拡大することです。
Fullajaxは、独立した独立したライブラリで表現されます。 これは、jQuery、Mootools、ExtJS、Prototype、YASSの類似物ではありません。 ただし、最新のJavaScriptライブラリとの共有は矛盾せず、競合を引き起こしません。逆もまた同様です。 ライブラリは、純粋に通信を目的としています。 すべての重点は、クライアントとサーバー間でデータを交換するためのメソッドと機能の使いやすさ、柔軟性、および使いやすさに置かれています。 前述のライブラリには、DOMナビゲーションと操作、さまざまな視覚効果、視覚コンポーネントのセットがあります。 Fullajaxにはこのすべてがありません。 しかし、他の可能性もあります。
主な機能のリスト:
- シンプルな通信インターフェースの実装
- Fly AJAX(「オンザフライ」でAJAXに変換)、AJAXフィルター-指定された基準に応じたリンクとフォームは自動的にAJAXに変換されます
- 通常のサイトのように検索ロボットによってインデックスを作成する機能
- 動的にロードされたWebページのコンテンツ内のスクリプト、リンク、およびスタイルの解析と実行
- スクリプトダウンロードアクセラレータ(アクセラレータ)-順次使用による並列読み込み
- HTMLページ、スクリプト、スタイルをキャッシュするいくつかのレベル
- スクリプト関数の再初期化を無効にする機能(再実行)-生産性の向上、コンピューティングリソースとRAMの節約
- 「AJAX生成」Webページへの直接リンクのサポート
- AJAXナビゲーション履歴の実装(ブラウザボタン「戻る」および「進む」)
- document.writeと<frameset>の完全な処理。 動的にロードされたページの各ストリームで
- <body>およびwindow.onloadタグのonloadおよびonunloadイベントのサポート
- TITLEは読み込まれたコンテンツに応じて変化します
- マルチスレッド作業エミュレーション、スレッドごとに個別の履歴
- カウンターの正しい動作
- 情報が更新されるたびにバナーを更新する
- AJAXは、再起動せずにサーバーにファイルをアップロード(アップロード)します
- 単純なイベントモデルの実装
- ローカルストレージフラッシュストレージを使用する機能
- HTMLページをリクエストするための2つのモデル-1対1および1対多(1つのリクエストは多くのブロックに対する答えです)
- ローカルファイルシステムでの作業のサポート
- 標準のアンカーとAJAXリンクを共有する機能
もちろん、ある記事では、時間と文字数の両方で費用がかかるため、すべてのこと、特に例や詳細について話すことはうまくいきません。
この記事では、ライブラリの最も重要な機能に焦点を当てます。 一連の記事を書く予定です。 最も単純なものから始めましょう。
1. idによる要素へのアクセス
<div id= "my-div" ></div>
<script>
id( 'my-div' ).innerHTML = 'test1' ;
//
SRAX.get( 'my-div' ).innerHTML = 'test2' ;
</script>
2. SRAX.onReady-DOMの準備
DOMの準備ができたときにすぐに呼び出される関数。 このような関数は、最新のすべてのjabaskriptライブラリに存在します。
SRAX.onReady( function (){alert(1)})
function mytest(){
document .body.appendChild( document .cereateElement( 'div' )).innerHTML = 'New Div' ;
}
SRAX.onReady(mytest)
今すぐ直接通信機能に。
AJAXリクエストを処理するために、ライブラリには2つの関数daxとhaxが実装されています。
基本的なルール:
- テキストデータ、xml、jsonなどを要求するには、dax( D ata A ja X )を使用する必要があります
- htmlリクエストの場合、hax( H tml A ja X )を使用する必要があります-このメソッドはAHAHサポートです(非同期HTMLおよびHTTP)
3. daxの使用例
dax({url: 'myurl' , id: 'save-data' , form: 'myform' , method: 'post' , cb: function (resp, cbo){
alert(resp.text || resp.xml)
}})
id = 'myform'のフォームからのすべてのフィールド(入力、テキストエリア、選択、...)のデータは自動的に収集され、postメソッドを使用してurl = myurlに送信されます
id-サーバーへのリクエストのフローを分離するように設計されたストリームの内部識別子を定義します。同時に、同じidの2つのスレッド(リクエスト)は存在できません。次のリクエストは前のリクエストをキャンセルします。 idを使用すると、メモリ内に作成されたオブジェクトを再利用することもできます。
ダックスワークオプションリスト
- url / src-リクエストURL
- id-内部スレッドID
- method-postまたはgetのデータ要求メソッド(デフォルト)
- form-フォームID、フォーム自体、要素のID、またはパラメーターを収集する要素自体
- params-リクエストに含まれるパラメーターの文字列(name = val1&name = val2)
- callback / cb-コールバック関数
- callbackOps / cbo-コールバック関数に渡されるオプション
- destroy-要求がtrueまたはfalseになった後、メモリからプロセスを自動的に削除するフラグ(デフォルト)
- anticache / nocache-アンチカッシングフラグtrueまたはfalse(デフォルト)
- async-非同期リクエスト実行フラグtrue(デフォルト)またはfalse
- xml-XML、応答エミュレーション、このパラメーターが存在する場合、サーバーからのデータ要求は実行されません
- text-テキスト、応答のエミュレーション;このパラメーターが存在する場合、サーバーからデータは要求されません
- user-ユーザー名、接続にはユーザー名が必要
- pswd-パスワード、パスワードが必要な接続用
- headers-サーバーに渡す必要のある{key:value}オブジェクトのヘッダーの配列。 例->ヘッダー:[{Etag: '123'}、{'Accept-Encoding': 'gzip、deflate'}]
- loader-定義されていない場合、ローダーインジケータ-デフォルトのローダーが使用されます
- storage-ローカルストレージを使用するためのフラグtrue(デフォルト)またはfalse-SRAX.Storageが接続されている場合のみ有効
- etag-Etagを使用してローカルストレージ内のデータの新規性を識別するフラグtrue(デフォルト)またはfalse-SRAX.Storageが接続されている場合にのみ有効
4. haxの例
すべてのライブラリコードの〜70%がhaxの実装です。 この関数は、HTMLコードのさまざまなバリアントを処理するためのすべての複雑な操作を実行します。 haxは、HTMLドキュメントを分析および処理するための本格的なコアであると言えます。 スタイルとギルスクリプトを自動的に選択して適用し、ロードシーケンス、手動(dax経由)または自動(ブラウザーにロードプロセスを与える)、AJAXナビゲーション履歴の実装、document.write、window.onloadの処理、自動タイトル変更、サポートを自動的に調整します直接AJAXリンクなど。
内部haxアルゴリズムを検討してください。 html応答を受信すると、ドキュメントが分析され、スタイルとスクリプトが解析されます。 外部スタイルとスクリプトが作成されると、それらは自動的に再帰的に再ロードされます。 再帰とは、再読み込み可能なスクリプト、スタイル内に外部リンクがまだある場合、プロセスが繰り返されることを意味します。 スクリプト、別のドメインのスタイル、ダウンロードプロセスがブラウザに渡され、そのようなスクリプトのその後の分析が行われた場合、スタイルは実行されません。
複雑なHTMLページの処理時に明確で安定した操作を実装するために、ロード可能性とスクリプト、スタイル、およびリンクのシーケンスを制御するアルゴリズムが開発され、ブラウザーからこれらの責任が取り除かれます。 このため、主要なWebブラウザーでの安定した、最も重要な同等の予測可能なAHAH作業が実装されています。
サンダルウッドの石の1つは、AJAXとdocument.writeの併用です。 document.writeがスクリプトに表示される場合、AJAX(AHAH)を使用するサイトはデフォルトでは使用できません。 document.writeは、メインページの出力ストリームの終わりまでしか使用できないためです。 それ以外の場合、ページのコンテンツは単純に消去されます。 Fullajaxでは、プログラマが意図したものがエラーなしで実行されるように、document.write関数が再定義されています。 この関数をエミュレートするためのアルゴリズムは、ライブラリの開発で最も困難な瞬間の1つでした。
また、ライブラリの最も複雑な機能の1つは、AJAXナビゲーションのブラウザ間の履歴の実装です。 最終的に、Fullajaxでは、AJAX履歴の操作は1つのパラメーターのオン/オフの定義に帰着します。
haxの使用例:
hax({url: 'index.html' , id: 'my-div' })
id = 'my-div'の要素は、AJAX履歴を使用してページ 'index.html'を読み込みます。
hax({url: 'index.html' , id: 'my-div' , nohistory:1, onload: function (){
alert( 'Hey Bingo!!' )
}})
ページ 'index.html'は、AJAX履歴を使用せずにid = 'my-div'の要素にロードされ、ロード後にアラートがクラッシュします。
Haxジョブオプションリスト
- url / src-リクエストURL
- id-親要素のID
- method-postまたはgetのデータ要求メソッド(デフォルト)
- form-フォームID、フォーム自体、要素のID、またはパラメーターを収集する要素自体
- params-リクエストに含まれるパラメーターの文字列(name = val1&name = val2)
- callback / cb-コールバック関数
- callbackOps / cbo-コールバック関数に渡されるオプション
- nohistory(noHistory)-AJAXナビゲーション履歴を使用するためのフラグ、デフォルトではfalse-つまり ストーリーが含まれています
- rc-相対リンクパスの修正を使用する(true)または使用しない(false-デフォルト)
- overwrite-Fly AJAXでonclickおよびonsubmitイベントを上書きするtrueまたはfalse(デフォルト)フラグ(デフォルト-onclickおよびonsubmitイベントの関数は上書きされませんが、補足されます)
- destroy-リクエストの終了後にプロセスをメモリから自動的に削除するフラグ
- html-HTMLテキスト、応答のエミュレーション;このパラメーターが存在する場合、サーバーからのデータ要求は実行されません
- anticache / nocache-アンチカッシングフラグtrueまたはfalse(デフォルト)
- startpage-履歴の最初のページのフラグtrueまたはfalse(デフォルト)
- async-非同期リクエスト実行フラグtrue(デフォルト)またはfalse
- historycache-履歴キャッシュを使用するフラグtrueまたはfalse(デフォルトはUSE_HISTORY_CACHE)
- seal-「isolation」フラグtrueまたはfalse(デフォルト)-CSSスタイルの競合を解決するために使用
- user-ユーザー名、接続にはユーザー名が必要
- pswd-パスワード、パスワードが必要な接続用
- headers-サーバーに渡す必要のある{key:value}オブジェクトのヘッダーの配列。 例->ヘッダー:[{Etag: '123'}、{'Accept-Encoding': 'gzip、deflate'}]
- add-フラグtrueまたはfalse(デフォルト)、ロードされたコンテンツを親要素に追加する原則を定義します:上書き(false)または追加(true)
- onload-コンテンツが要素に完全にロードされた後に呼び出される関数
- loader-定義されていない場合、ローダーインジケータ-デフォルトのローダーが使用されます
- notitle-trueまたはfalseのフラグ(デフォルト)、タイトルの自動変更を無効にします
- onerror-コンテンツの読み込みエラーの場合に呼び出される関数
- storage-ローカルストレージを使用するためのフラグtrue(デフォルト)またはfalse-SRAX.Storageが接続されている場合のみ有効
- etag-Etagを使用してローカルストレージ内のデータの新規性を識別するフラグtrue(デフォルト)またはfalse-SRAX.Storageが接続されている場合にのみ有効
継続
神が時間とエネルギーを与えてくれるなら、次の記事で(トピックが読者にとって興味深い場合)、次のような多くの問題を強調する予定です。
- フィルター(Fly AJAX)-AJAXリンクの自動「ラッピング」シンプルリンクの原理と例
- directLink-直接AJAXリンクのサポート
- linkEqual-AJAXリンクを人間が読める形式に変換する
- addScript-スクリプトを動的に追加します(document.writeでも)
- スクリプト読み込みの最適化、スクリプト処理を備えたFullajaxアルゴリズム
- addCss、addStyle-動的にスタイルを追加
- ストレージ-フラッシュベースのローカルストレージ
- アンカー-標準のアンカーとAJAXリンクを共有する機能(独自の開発)
- model2Marker-1対多のリクエスト(1つのリクエスト、いくつかの異なる要素の自動入力)
- xファミリー:属性
- 効果-HTMLページの更新の効果を適用するための関数
- インクルード-<include src = "index.html"> </ include>タグの実装
- アップローダー-準AJAXファイルアップローダー
- addEventsListener-イベントモデルインターフェイスオブジェクトを追加する
- デフォルト-デフォルトの作業パラメーター
- AHAHサイトの従来の利点と欠点
よろしくお願いします。
UPD1:いくつかのケーススタディ
ドリームトラベル -旅行会社
Tooglecms-真実はまだ生で、最初のベータ版のみです。
Datamash.us-プラットフォームウィジェット
技術的な質問をすることができるフォーラム