我的问题是,处理不可见页面的最佳方法是什么?
$('.results').slice('//hidden pages').hide();
$('.results').slice('//current page').show();
<?php
while ($row = mysql_fetch_assoc($query)) {
echo '<span class="results">' . $row['items'] . "</span><br/>";
}
?>
目前我使用的$.hide()
工作正常 - 直到查询返回数千行数据(准确地说大约9000)。如果查询结果太多,则似乎滞后/崩溃firefox。 hide/show
是错误的做法吗?我一直在关注Jquery $.detach
,但我不确定这是否能解决这个问题。
这是应该用PHP处理的东西吗?
答案 0 :(得分:1)
为什么不使用AJAX动态加载值?我认为您选择的方法占用了太多内存,因为它在DOM中生成了太多节点,导致Firefox崩溃。
答案 1 :(得分:1)
客户端只能处理这么多。如果你想看一个例子,试着处理10,000字节的字母a(不建议实际运行):
var a = "a";
var z = 100000000;
for (var i = 0; i < z; i++) {
a += "a";
}
通常,分页所做的是按需加载当前页面。然后释放不在播放的页面。
我建议将ajax事件附加到页面的导航中:
<div id="myTag"></div>
<div class="PageNumbers" data-page-number="1">1</div>
<script type="text/javascript">
$(".PageNumbers").click(function () {
$.ajax({
url: "/Page/",
type: 'GET',
data: { page: $(this).attr("data-page-number")},
success: function (result) {
$("#myTag").html(result);
}
});
});
</script>
此外,页面中最需要保留的部分是图像。将它们存储在数组中遇到它们可以大大减少“已发现”内容的重新加载。
答案 2 :(得分:1)
它很慢的主要原因是你在9000 x n DOM元素上运行。
避免这种情况的一种方法是将结果存储在javascript数组中,并仅在当前页面中呈现项目。
这是可行的,但有点单调乏味,并且在其他一些javascript库(如knockout)的帮助下会更容易。
以下是使用knockout的示例实现: http://jsfiddle.net/6bgCX/7/
编辑:添加了示例代码