シングル ページ アプリケーションを最適化する方法を検討しており、現在は jQuery セレクターに焦点を当てています。
私は JavaScript の専門家ではありませんが、dom を再クエリするのではなく、jquery セレクターの結果を変数に格納して再利用する方がはるかにパフォーマンスが高いことを理解しています。
したがって、たとえば、これの代わりに:
$("#myItem").doSomething();
$("#myItem").doSomethingElse();
これを行う方が理にかなっています:
var result = $("#myItem");
result.doSomething();
result.doSomethingElse();
また、必要なクエリの量を減らすために、既存の jQuery オブジェクトに接続された find() セレクターを使用すると、パフォーマンスが大幅に向上する可能性があることを理解しています。
$("#myItem").find(".highlighted");
アプリケーションで常に再利用する多くのセレクターを、ローカル変数だけでなく、おそらくどこかのハッシュまたは外部関数に格納する可能性を探ることに興味があります。これが最適かどうかはわかりませんが、これが受け取る反応に興味があります。
Underscore.js の memoize 関数を使用してこれを実行しようとしましたが (失敗しました)、期待どおりに動作しません。ただし、コンセプトは次のようになります。
jquerySelect = function () {
var elements = _.memoize(function (selection) {
return $(selection);
});
return elements;
};
ここでの考え方は、「return $(selection)」の実際の結果作業が 1 回実行された後、結果がキャッシュされて返されるということです。
これを次の方法で使用できるようにしたいと思います。
utils.jquerySelect(".highlighted").find("span")
この単純な例では、キャッシュのキーは ".highlighted" であり、ユーティリティ関数は結果にアクセスする方法を知っているため、DOM を走査する作業が再度行われるのを防ぐことができます。「return」ステートメントが毎回ヒットするため、私の実装は現在機能しません。
このアプローチに欠陥があるかどうかはわかりませんが、そうかもしれません。ただし、これが機能する方法を見つけた場合、またはこれを行うより良い方法を見つけた場合はお知らせください。