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的"记忆"吗?
我真的认为这对于许多具有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"也不需要按钮。
因此,有两种解决方案:
"Load More"最重要的是,您不应删除列表中已加载的内容。
如今,所有内容都是Javascript,并且Javascript具有垃圾回收功能,因此很难卸载DOM(如果它具有Javascript,而不是纯文本)并设法从Javascript中删除垃圾。这意味着您不会从浏览器中释放已卸载内容的全部已分配内存。
还考虑一下您的请求,为什么还要再次加载最初已经加载的内容。它花费了另一个服务器请求,也就是另一个数据库请求,依此类推。
| 归档时间: |
|
| 查看次数: |
5077 次 |
| 最近记录: |