私は道場のクエリチュートリアルを読み、Dojoはクエリを制限しますか?
// retrieve an array of nodes with the class name "odd"
// from the first list using a selector
var odds1 = query("#list .odd");
// retrieve an array of nodes with the class name "odd"
// from the first list using a DOM node
var odds2 = query(".odd", document.getElementById("list"));
を見て、彼らは#listのDOM内.oddためodds2検索全体ではなく、HTMLのDOMためodds1よりも高速odds2であることを説明しました。私はodds1の利点は何か(クリーナーコード以外のものだと思います)でしょうか?クエリがid要素内のオブジェクトを検索している場合は、odds2スタイルを常に使用する必要があります(適切なID、クラスhtmlが使用されていると仮定する)ので、dojoは自動的にodds1のクエリ文字列を呼び出して呼び出しますオッズ2?
私はそれを得ますが、なぜdojoは単純にodds1のクリーンな構文を使用しますが、より効率的なodds2を呼び出します。 – Derek
したがって、セレクタエンジン(http://svn.dojotoolkit.org/src/dojo/trunk/selector /lite.js)実際にはそうであるようです。 odd2クエリは、idが "list"のルートノードが1つのみ存在し、odd1クエリは共通のクラス値(または有効なHTMLではない共通のid値)を持つ複数の要素に対応できます。コードをもっと見るほど、セレクタ解析のステップとルートノードのキャッシング以外の2つのパフォーマンスに違いはありません。 –
私はacme.js(http://svn.dojotoolkit.org/src/dojo/trunk/selector/acme.js)セレクタエンジンを読んでいました(私はそれがデフォルトのエンジンだと思います)、クエリ解析のみが行われていますクエリが最初に実行されたときに、非効率的なクエリへのその後の呼び出しにも違いはありません。このdojoクエリのチュートリアルはどこですか? –