0

私はバックボーンに似た楽しみと可能な実装のための小さな JavaScript フレームワークを書いています (したがってタグ)。以下に示すように、要素をオブジェクト プロパティとして保存し始めました。これが行われたかどうかわからないので、これが問題を引き起こすかどうか知りたい.

同様に、モジュールが他のモジュールに依存している場合、それらをオブジェクトの先頭に....別のオブジェクトの形式でリストします。

依存関係 (ページ要素または JavaScript モジュール) をリストし、事前に問題を検出する方法が必要でした。これには、依存性注入と同様の (同じではない) 利点があります。

これは、フレームワークがどのように機能するかについてもう少し詳しく説明する、このコード レビューの投稿に関する特定の質問です。

/*MUserTry
**
**
**         
*/
$A.modelAjax({
    Name:       'MUserTry',
    S:          {
                    DynSma: SDynSma,
                    DynTwe: SDynTwe,
                    DynArc: SDynArc,
                    AniFlipPage: SAniFlipPage,
                    ClientStorage: SClientStorage
                },
    E:          {
                    but: $A('#ut_but')[0]
                },
    J:          {
                    box: $('#ut_box')
                },
    init: function () {
        var pipe = {}, 
            this_hold = this;
        this.J.box.draggable();
        this.E.but.addEventListener("click", function () {
            pipe = $A.definePipe(this_hold.Name);
            $A.ajaxMachine(pipe);
        }, false);
    },
    pre: function (pipe) {
        pipe.page.email = this.e_button.getAttribute('data-email');
        pipe.proceed = true;
    },
    post: function (pipe) {
        this.S.ClientStorage.setAll(pipe.server.smalls);
        this.S.DynSma.run(pipe.server.smalls);
        this.S.DynArc.run(pipe.server.arcmarks);
        this.S.DynTwe.run(pipe.server.tweets);
        this.S.AniFlipPage.run('ma');
    },
    finish: function (pipe) {
        $A.log(pipe);
    }
});
4

1 に答える 1

2

まず最初に、「ホイールを再発明しても、より良いホイールを手に入れることはできません」という義務的な警告を提供させてください。達成しようとしているものが何であれ、既存のライブラリを使用すれば、ほぼ確実に成功するでしょう。また、独自のライブラリを作成する正当な理由があるとしても、少なくとも既存のライブラリを調べることには大きなメリットがあります。

でも…もしかしたら、あなたはこのプロジェクトを楽しんでいるだけで、他のプロジェクトを見るのは楽しくないので、やっていないのかもしれません。けっこうだ。

いずれにせよ、Backbone を見ると、このプラクティスが Backbone View クラスの中核であることがわかります。Backbone のすべてのビューには「el」および「$el」プロパティがあり、ビューの生の DOM 要素とその要素の jQuery でラップされたバージョンを参照します。

JS の変数/プロパティは単なるポインターであるため、バックボーンには実際のパフォーマンスの問題はありません。つまり、オブジェクトのプロパティを要素に設定するとき、その要素を複製するのではなく、その要素への参照を追加するだけです (別の言い方をすれば、A タグではなく、A タグのようなものです)。まったく新しいドキュメントよりも)。

ただし、Backbone に問題がある (そしてフレームワークにも問題がある) のは、古い参照に関するものです。つまり、要素 X をページから削除するだけで、ブラウザは (最終的にはガベージ コレクションによって) メモリの使用を停止します。しかし、その要素を指すオブジェクトがそこにある場合、参照のあるものは「ガベージ」ではないため、ガベージコレクションされません。

そのため、主に注意する必要があるのは、これらのオブジェクトが次のいずれかであることを確認することです。

A)要素が削除されるたびに削除される、または

delete obj.referenceB)要素が削除されたときに参照を取り除く(例)

そうしなくても、おそらく問題なく動作するでしょう...多くの要素が作成/削除されているページで使用するまでは、その時点で Firefox がポップアップし始めます。逃げろ、本当にこれをやりたいのか?」メッセージ。

于 2012-12-12T20:31:46.427 に答える