https://www.slideshare.net/YoshieYamamoto/ss-83840311
ちょっと話題になったスライドですがこの中で、
readyイベント( == DomContentLoadedイベント)を同一ページで複数書いてはいけないと
ありますが、具体的な副作用は何でしょうか。
イベントの順番が大切な場合は、実行順が保証されないのはあると思いますが、
それ以外にデメリットがあれば知りたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
大規模かつ多人数による開発なので、勝手にreadyへセットしてしまうとどこで何をやっているのか把握しきれなくなるという面が多いと思います(技術的な副作用というより、コード管理の面での問題です)。
ready
を1箇所にして、なおかつ動かすものを具体的にコードで書き表すことで、「このページで動いているコードはこれだけある」と明確にするための施策だと判断しました。
投稿2017/12/13 02:32
総合スコア145184
0
ベストアンサー
個人的意見です.
DOMContentLoaded
イベントに記述する内容はWEBページの初期化が主だと思います. つまり, DOMContentLoaded
イベントにコールバックを複数登録することは, 初期化シーケンスの分散管理にほかなりません.
これはプロジェクトが小さいうちはさほどメンテナンスコストに影響しませんが, 大規模プロジェクト(コードメンテナの増加等)となるに連れて, コードそのものが肥大化したり初期化処理が複数のJSファイルにまたがったりすることでコードの可読性や保守性を著しく損なうことが予想されます.
そのため, 「DOMContentLoaded
イベントに登録するコールバックは単一とし, 初期化処理を追加する場合はそのコールバックそのものにコードを追加する」というコーディング規約としているのでしょう.
投稿2017/12/13 02:37
総合スコア4756
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
jQuery(document).ready() と DOMContentLoaded
イベントの順番が大切な場合は、実行順が保証されないのはあると思いますが、
DOMContentLoaded に限った問題ではないと思いますが、UI Eventsではイベントリスナーは登録した順番で実行されることが保証されています。
対して、jQuery(document).ready()
では DOMContentLoaded と比較してどちらが先に発動するか、が明記されていません。
https://api.jquery.com/ready/
勿論、実際にはどちらかが先に発動するように設計されているはずですが、ドキュメントに説明がない以上は、将来的に挙動が変更される可能性も否定出来ません。
従って、順番が重要な場合において jQuery(document).ready() と DOMContentLoaded を混在させるべきではないと判断できます。
同じノードに複数のイベントハンドラを登録する
先述の通り、これは DOMContentLoaded に限った問題ではなく、同じ要素ノードに複数のイベントハンドラを登録した場合にも適用されます。
ある要素ノードにハンドラAとハンドラBを登録する場合、次の2パターンの状況が考えられます。
- 「ハンドラA -> ハンドラB」の順番で実行されなければならない
- ハンドラA、ハンドラBはどちらが先に発動しても問題がない(各々ぎ独立した機能、もしくはハンドラA,Bに関係性はあるが、どちらが先に発動しても整合性がとれるように設計されている)
同じ理屈が DOMContent にも適用出来るでしょう。
順番への依存性が低いコードなら分割管理しても良いですが、逆なら統合管理(DOMContentLoadedを一つにまとめる)せざるを得ません。
Re: furyu さん
投稿2017/12/13 03:48
総合スコア18164
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/13 05:13