0

我正在构建一个基于 ajax 的网站,其中几乎每个页面都有自己的 Javascript 文件,该文件与 html 一起加载。

如果我以正确的方式做事,我有几个问题,所以让我们开始吧:)

首先,我执行加载脚本的方式。我所有的代码都封装在一个函数中,所以假设我已经加载了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 美分:

我建议让您的网站分段 ajaxed。我的意思是将所有音乐区域作为一个小节,视频在另一个小节中,等等。因此,在每个部分中,您都可以进行 ajax 处理,当过渡到另一个部分时,您会优雅地淡出并自然地加载下一个部分。

.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 个月后他们就消失了。在他们专注于稳定性和安全性的地方,他们在设计和营销方面失败了。这 - 几乎只有这一点 - 就是为什么我建议只制作部分 ajaxed。它保持分隔,焦点很容易跟踪,您只需要担心那一件。当您获得 10,000 个用户时,请考虑使用完整的 ajax。当您到达那里时,您可能也知道为什么考虑 ipad 和平板电脑而不是花哨的 ajax 网站可能是一个更好的举措。您酷炫的过渡和渐变将成为移动设备上的一条受伤的狗。考虑到事情的发展方向,那是你想要的吗?

同样,这只是我的意见。我不知道您的网站或技能,甚至您是否已经考虑过我提到的所有内容。如果您有任何具体问题,我可以尝试回答或更新此帖子。祝你好运。

关于提到的js选项:

标准 jquery 可能就足够了,除非你有时间完全理解bootstrap之类的东西

Node.js 很棒,但您需要确保您的服务器可以部署它。例如,Dreamhost 不支持它。至少他们没有持续我检查。他们是一个体面的、普通的主人的一个很好的例子。我想,Media Temple 也一样。如果我错了,请纠正我。

于 2012-10-19T22:24:29.800 回答