Quorusにおけるローダーの使用

中| 9時49時2011年3月24日はピーターエブラハムセンで午前の開発YUIの実装 | 1コメント

今日、私が話をしたいと思いますYUI Loaderのとどのように我々は時Quorus、(株) 、オンデマンドでの新機能と、サードパーティのウェブサイトを提供するために使用します。

Quorusのスクリーンショット

コー​​ドは、我々はブラウザの環境を制御できないだけを持っていないの誰からもうらやまれない立場、しかし我々はドキュメント自体の使用方法には厳しい制限にいる意味、他の人のページに権力の機能を記述します。 当社の顧客は自分のページにQuorusブートストラップスクリプトを入れて、私達の機能に必要な他のすべては、動的かつオンデマンドでロードされます。 私達の要素、スタイル、およびスクリプトは、我々は責任がないなら何かの動作を変更しないことを確認するために我々は、英雄的な長さに行く。

YUI 3は単に形を取っていたときに我々は、2年前に現在のコードベースを始めた。 それは数ヶ月のベータ版をヒットしないというコードベースにコミットする時に危険な決断でした。 振り返ってみると私は、我々はそれなしで持っているものを達成しているだろうか想像することはできません。 私は、ローダーの電力、近づいコンポーネント持つ任意の他のフレームワーク見たことがない属性 、およびCustomEventを

我々の顧客に提供するQuorus ブートストラップスクリプトは、ほとんど何もしません。 その仕事は、ページのロードの残りの部分をブロックすることなく私たちのプラットフォームのコアをロードするだけであり、そして我々がそうやったまで、キューへのAPIを呼び出します。 このコアのスクリプトファイル、 ステージ2と呼ばれる、インラインyuiloader 、およびoopだけでなく、API呼び出し、ユーザーのクリック、およびオペレーティング環境内の他の条件に対応する追加のライブラリをロードするのに十分な知性。 他のほとんどのリソースは、カスタムQuorusと株式YUIのモジュールを提供するカスタムコンボのサーバによって処理されます。

Bootstrap APIをキューには、それがロードすると我々はグローバルオブジェクト、QUORUS上のアレイに移動する準備ができたら、時間、ホストサイトのコードで作られた呼び出します。

 QUORUS._callbacks = []; QUORUS.use = function () { // turn the arguments object into a regular array, // so that it can be stored safely var args = Array.prototype.slice.call(arguments, 0); QUORUS._callbacks.push(args); }; 

かつて我々は、API呼び出しを処理する準備が整ったら、 stage2それらをタイムアウトに一つずつ実行されます。 これは、ユーザの応答性体験になるブラウザに定期的にバックアップ制御を得ることが保証されます。 動作は、Y. AsyncQueueよく似ていますが、シンプルでYUIをロードする必要はありません。

 // Put the real 'use' function in place for any subsequent calls: QUORUS.use = function (feature, callback) { YUI.use('module-that-provides-the-feature', function (Y) { // find the API for the requested feature, and pass it to the callback callback(Y.APIs[feature]); // process another pending API call, if any: setTimeout(processAPICall, 0); }); }; // Play catch-up, running each callback in sequence: function processAPICall () { var callback = QUORUS._callbacks.shift(); if (callback) { QUORUS.use.apply(QUORUS, callback); } } // Start processing the queue: processAPICall(); 

bootstrapファイルはほとんど不変、この時点で、です:我々が与えた任意の新しいバージョン、それらを、アジャイルスタートアップ企業のための極端に長い時間を展開するか月以上必要な場合があります我々は顧客に引き渡すことの何か、。 stage2ファイルには、一方、、独自のサーバーからの負荷を小さく、そして短いキャッシュの寿命を持っています。 これにより、エンドユーザーは数分以上の古いバージョンを持っていないことが保証されます。 ほぼ私たちが必要とする他のすべてのリソースが恒久的にキャッシュ可能なJavaScriptライブラリとCSSファイルに格納されています。

我々のコードの新しいバージョンをリリースするとき、 stage2自動的に彼らが唯一の最新のコードを使用していることを確認、ブラウザが新しい場所からダウンロードを開始するよう指示。 このセットアップでは、私たちは必要以上に頻繁に資産を提供することなく迅速に変更を展開することができます。 だけでなく、これは私たちの帯域幅のコストを低く抑える、しかしそれは、優れたユーザーエクスペリエンスを提供しません:ページの読み込み中にキャッシュされたリソースは非常に迅速にロードする。

Quorus JSローディングフロー図

我々はのメリットで、今日の我々のコードベースを始めていた場合、 YUIのギャラリー 、私たちは私たちの生活を容易にするために使用する可能性があるコンポーネントの数があります。 そのうちの一つは、エリックFerraiuoloのであるベースコンポーネントマネージャオンデマンドのコンポーネント(通常はウィジェット)まで配線を補助する、。 別の可能性がありますストレージLiteは私たちはページが読み込まれる間でのアプリケーションの状態を保持するために、。

彼らの偉大な仕事のため、そして地域社会への貢献のためのYUIのチームに感謝します。 あなたがサンドボックスにまたは非同期的に読み込まれたコンポーネントを調整することに対する我々のアプローチについて読んでしたい場合、私はコメントでお知らせください!

ピーターエブラハムセン 著者について:ピーターエブラハムセンがRubyとJavaScriptを書き込むには、サーバインフラストラクチャ、および研究シアトル、ワシントン州、米国でのユーザー中心の設計を管理します。 彼はで見つけることができるIRC Rainheadとして。

共有し、拡張する: del.icio.usでブックマーク | Diggそれ! | のreddit!

1件のコメント»

このコメント欄のRSSフィード トラックバックURI

  1. こんにちはピーター、
    私は実際にQUORUS.useコールについてかなり興味があります。 は、1つの特定のモジュールをロードするYUIの使用中のコールでそれをスワップアウトするように見える。
    イムは、APIに固有の呼び出しにどのようにこの相関見ていない。 それを1つのグローバルモジュール(つまり、メニューバーやウィジェットを表示しているグラフィックとフィットしないけれども)でない限り、どのようにQUORUS.useに"機能"のお渡しは、YUIの使用のためにモジュールに接続しますか?

    また、あなたは一つ、USE文でモジュールのすべてを置くことに対して高い示してきたキューに入ってsetTimeoutメソッドを使用してテストを行うことがありますか?
    それはそう、setTimeoutメソッドのような理論的にはブラウザの制御を解放で良いだろうが、ページで一般的に高いTTI(それは10 - 15ms以下すべての新しい使い方を呼び出し、各モジュールの依存関係ツリーの計算の別のセットをやっているので) 、君たちは他の対ずつテストしている場合が私は単に興味がある?

    そうでなければ、偉大な記事をありがとう。 私は人々が特定のアプリケーションのためのローダーを使用している方法を示すこのような例を見るのが好き。)

    コメントby ネイトキャバノー - 2011年4月16日

コメントを残す

注:コメントは、初心者のためにモデレートされています。 スパムは削除。

XHTML:<a href="" title=""> <abbr title=""> <acronym title="">ある[<b> <blockquote cite=""> <cite>の<code> <del datetime=""> <EM> <I> <q cite=""> <strike>ある[<strong>

Yahoo!が主催

著作権© 2006-2011米国Yahoo! Inc。版権所有。 プライバシーポリシー - サービス利用規約

を搭載ワードプレスヤフー ウェブホスティング