[解決済み] Requirejs domReady プラグイン vs Jquery $(document).ready()?
質問
RequireJSを使用しており、DOM ready時に何かを初期化する必要があります。現在、RequireJSでは
domReady
プラグイン
を使うことができますが、すでにjQueryの
$(document).ready()
があり、これはjQueryが必要なので利用可能です。
というわけで、2つのオプションがあります。
-
を使用する。
domReady
プラグインを使用します。require(['domReady'], function (domReady) { domReady(function () { // Do my stuff here... }); });
-
使用方法
$(document).ready()
:$(document).ready(function() { // Do my stuff here... });
どれを選べばいいのでしょうか、またその理由は?
どちらの選択肢も期待通りに動作するようです。つまり、RequireJS は動的にスクリプトを追加するので、動的に要求されたスクリプトがすべてロードされる前に DOM ready が発生することが心配なのです。一方、RequireJSは、ただでさえ追加JSの負担が大きい
domReady
のためだけにJSを追加することになる。
質問内容
-
なぜ RequireJS は
domReady
プラグインを提供するのでしょうか?$(document).ready();
? 私は別の依存関係を含めることの利点を見いだすことはできません。 - ニーズを満たすためだけなら、なぜクロスブラウザーAJAXのためのものを提供しないのでしょうか?
私が知っている限りでは、モジュールで
domReady
を必要とするモジュールは、ドキュメントが準備された後に取得または実行されません。そして、同様にjQueryを必要とする同じことができます。
require(['jQuery'], function ($) {
$(document).ready(function () {
// Do my stuff here...
});
});
私の質問をより明確にするために
を必要とすることの違いは何でしょうか?
domReady
または
jQuery
?
どのように解決するのですか?
重要なポイントはすべて押さえられているように見えますが、いくつかの細かい点が抜け落ちています。主に
domReady
プラグインであり、モジュールでもあります。もしあなたがそれを要件配列に入れ、最後に
!
で囲むと、モジュールは DOM とやりとりできるようになるまで実行されません。
define(['domReady!'], function () {
console.info('The DOM is ready before I happen');
});
読み込みと実行は異なることに注意してください。すべてのファイルをできるだけ早く読み込みたいのですが、時間を気にするのはコンテンツの実行です。
もしあなたが
!
を省略した場合、それはたまたま関数である通常のモジュールであり、DOM が安全に操作できるようになる前に実行されないコールバックを受け取ることができます。
define(['domReady'], function (domReady) {
domReady(function () {
console.info('The DOM is ready before I happen');
});
console.info('The DOM might not be ready before I happen');
});
domReadyをプラグインとして使用する場合の利点
モジュールに依存するコードで、そのモジュールが
domReady!
に依存するコードには、非常に大きな利点があります: DOM が準備されるのを待つ必要がないのです!
A というコードのブロックがあり、それが B というモジュールに依存しているとします。
domReady!
. モジュール B は DOM が準備される前に読み込みを終了しません。その結果、B がロードされる前に A が実行されることはありません。
もし、あなたが
domReady
を B の正規モジュールとして使う場合、A もまた
domReady
に依存し、さらにそのコードを
domReady()
関数呼び出しの中にコードを包みます。
さらに、これは
domReady!
に対して同じ利点を享受していることになります。
$(document).ready()
.
domReady と $(document).ready() の違いを再確認する。
どちらも基本的に同じ方法で DOM が準備できたかどうか、いつ準備できたかを嗅ぎ分けます。
誤ったタイミングで jQuery が実行されることへの懸念について
jQueryは、たとえDOMがjQueryより先にロードされたとしても、あらゆるreadyコールバックを起動します(あなたのコードはどちらが先に起こるかを気にするべきではありません)。
関連
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] jQueryでテーブルの行を追加する
-
[解決済み] jQueryを使用しない$(document).ready相当
-
[解決済み] window.onload vs $(document).ready()
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Node.jsでbase64エンコードされた画像をAmazon S3へアップロードする
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法