无限滚动会导致浏览器崩溃吗?

TK1*_*123 9 javascript browser crash jquery

我实现了无限滚动:

new_page_value = 1;

$(window).scroll(function() {
    if($(window).scrollTop() >= $(document).height() - $(window).height() - 200) {

        new_page_value = parseInt(new_page_value) + 1;

        get_page(new_page_value);

    }
});
Run Code Online (Sandbox Code Playgroud)

当用户几乎到达页面底部(200px左侧)时,get_page()将调用该函数.这包含一个ajax调用,它获取新页面的所有内容并将附加<body>文档的内容中.

现在我才意识到,如果我的网站变大,而不是有10个小页面,我有一个巨大的巨型页面,那么用户的浏览器可能会崩溃,如果它们足够持久以保持无限滚动很长时间.

这可能是解决此问题的可能方法:

我将继续将新页面添加到文档中,<body>直到第10页,之后我将<body>完全替换内容而不是附加内容.所以使用html()而不是append().

我只是不知道这是否真的可以防止崩溃.将.html()清除之前通过ajax引入的html的"记忆"吗?

dri*_*hev 6

我真的认为这对于许多具有AJAX列表内容的网站来说是一个普遍的问题。因此,让我们在一些最受欢迎的网站(以规模=体验为例)及其解决方案中举例:

谷歌图片

如果您检出images.google.com并搜索任何内容(例如“ guiness”),则会看到一个充满结果的页面(实际上图像是Ajax加载的,而不是html代码,因此页面的高度固定)并在底部滚动时有一个按钮"Show more results"。这可能是您解决的问题之一,但是是否真的有必要在第10页之后的底部放置一个按钮?我真的认为这通常是解决页面可用性和内存泄漏的好方法,但实际上并不是必要的选择,正如我们在以下文章中看到的:

脸书

Facebook Newsfeed是另一个故事。有一个按钮"Show more posts",但是我真的不知道什么时候显示它,而不是加载下一页。我一次只通过滚动就可以加载10-15页的帖子。您知道Facebook上的帖子包括视频,照片,AJAX评论以及许多其他Java风格的东西,这些东西占用了大量内存。我认为经过大量研究(有多少用户滚动到最底端),他们设法做到了这一点。

优酷

Youtube "Load more videos"在每个页面上都有,因此解决方案基本上类似于Google,不同之处在于Google呈现页面的整个html,并且在滚动时仅加载图像。

推特

Twitter支持无限滚动。是的,他们这样做可能是因为tweet是140个字符,并且他们不需要担心太多内存。毕竟谁愿意在一页加载时阅读1000多页的推文。因此,他们没有按钮,"load more"也不需要按钮。

因此,有两种解决方案:

  1. 使用无限滚动(您应该考虑加载的内容及其丰富程度)
  2. 使用按钮: "Load More"

最重要的是,您不应删除列表中已加载的内容。

如今,所有内容都是Javascript,并且Javascript具有垃圾回收功能,因此很难卸载DOM(如果它具有Javascript,而不是纯文本)并设法从Javascript中删除垃圾。这意味着您不会从浏览器中释放已卸载内容的全部已分配内存。

还考虑一下您的请求,为什么还要再次加载最初已经加载的内容。它花费了另一个服务器请求,也就是另一个数据库请求,依此类推。