0

私は ajax ベースの Web サイトを構築しています。ほとんどすべてのページには、html とともに読み込まれる独自の Javascript ファイルがあります。

正しい方法で物事を行っているかどうかいくつか質問があるので、始めましょう:)

まず、読み込んだスクリプトを実行する方法です。私のコードはすべて関数にカプセル化されているため、registerページを読み込んだとします。私がすることは次のとおりです。

page_class = "register"; //this will change when new page is loaded
new window[page_class];

したがって、これは私が望むように機能しますが、ユーザーが別のページからregisterもう一度戻ってきて、新しいオブジェクトがもう一度作成されると、メモリリークが発生するか、または他に悪いこと?rerunもしそうなら、スクリプト全体に何ができますか?

次の質問は非常に簡単です。次の質問jqueryを使用してイベントをアタッチし、ページを切り替えるときに、削除されるすべてのon要素をループして、すべての要素をデタッチします。メモリ リークを防ぐのに十分ですか? そうでない場合、何を改善できますか?

4

1 に答える 1

1

コメントから何を理解したかを考えると、これが私の2セントです。

私はあなたのサイトを部分的に隣接させることを提案します。つまり、すべての音楽領域を1つのサブセクション、別のサブセクションのビデオなどとして意味します。したがって、各セクション内で動き回り、別のセクションに移行すると、優雅にフェードし、自然に次のセクションをページロードします。

.detach()私の意見では、detachは削除されたセクションを参照し続けるので、適切なメモリ処理を保証するには十分ではありません。思い出したいときに便利ですが、ユーザーがエリアをクリックしただけでバックアウトして二度と戻らない場合は役に立ちません。これで、メモリに保存されているセクション全体へのこの参照ができました。

各セクションでメモリを処理する方法は?セクションオブジェクトを維持できます。例:

var music = {
    loaded: 0,
    current_track: null,
    init: function(){
        if(this.loaded == 0)
        {
            $.ajax... get your music section html and write it to the #music element
            this.loaded = 1;
        }
    },
    selectTrack: function(id)
    {
        // just an example
    }
};

一定のサイトオブジェクトを維持しながら:

var site = {
    init: function(){
        // call selected page, etc
    },
    move: function(page){
        if(page == 'music')
        {
            music.init();
            $('#content').animate(...);
        }
    }
};

$(document).ready(function(){
    site.init();
});

サイトobjがページの読み込み時に初期化され、move関数が呼び出されると、それぞれのオブジェクトのinitメソッドが呼び出されます。これは、ページが既に読み込まれている場合は何もしません。この例は明らかに、#music要素と#contentというコンテナ要素があることに依存しています。この部分は、トランジションの処理方法によってはまったく関係がない場合があります。すべての呼び出しですが、一般的な考え方は同じです。複雑なマークアップのボトルネックを回避するために、いつでもdisplayをnoneに設定できます。

あなたは、少なくとも簡単に、プロジェクトはかなり大きくなると予想されていたと述べました。悲観的すぎることはありませんが、「大きな」は事後に定義され、計画には含まれていません。あなたがこれに投げるために何百万ドルも持っていない限り。私はあなたを思いとどまらせようとはしていません。ぜひ、期待通りのサイトにしてください。しかし、デマンドコール時にスケールアップすることは、誰もがそれを知る前にフルスロットルの空想を行うよりもはるかに賢明なアプローチであると考えてください。私がこれを言うのは、ギグに何百万人も投げ込んだクライアントのために働いて、それが次のyoutubeになると主張し、6か月後に彼らがいなくなったからです。彼らが安定性とセキュリティに焦点を合わせたところで、彼らは設計とマーケティングに失敗しました。それだけで、そしてほとんどそれだけで、セクションだけを隣接させることをお勧めします。それはそれを区画化したままにします、焦点を追跡するのは簡単で、心配するのはその1つだけです。10,000人のユーザーを獲得したら、完全なajaxを検討してください。そこに着くと、派手なajaxサイトよりもiPadやタブレットを検討するほうがよい理由もわかるかもしれません。あなたのクールなトランジションとフェードは、モバイルデバイスで負傷した犬になります。物事が進む方向を考えると、それはあなたが望むものですか?

繰り返しますが、これは私の意見です。私はあなたのサイトやスキルセット、あるいはあなたが私が言及したすべてをすでに考慮したかどうかさえ知りません。特定の質問がある場合は、この投稿に回答または更新することができます。幸運を。

言及されたjsオプションに関して:

ブートストラップのようなものを完全に理解する時間がない限り、標準のjqueryで十分である可能性があります

Node.jsは素晴らしいですが、サーバーがそれをデプロイできることを確認する必要があります。たとえば、Dreamhostはそれをサポートしていません。少なくとも、私がチェックしたのは長続きしませんでした。彼らはまともな、一般的なホストの良い例です。メディアテンプルも同じだと思います。私が間違っている場合は訂正してください。

于 2012-10-19T22:24:29.800 に答える