2

我的问题是,处理不可见页面的最佳方法是什么?

$('.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 中处理的东西吗?

4

3 回答 3

1

为什么不使用 AJAX 动态加载值?我认为您选择的方法消耗了太多内存,因为它在 DOM 中生成了太多节点,导致 Firefox 崩溃。

于 2012-05-17T00:29:07.947 回答
1

客户端只能处理这么多。如果您想看一个示例,请尝试处理字母 a 的 10,000,000 字节(不建议实际运行):

    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>

此外,需要保留的页面的最大部分将是图像。将它们在遇到时存储在数组中可以大大减少“发现”内容的重新加载。

于 2012-05-17T00:36:25.283 回答
1

它缓慢的主要原因是您在 9000 xn DOM 元素上进行操作。

避免这种情况的一种方法是将结果存储在 javascript 数组中,并且仅在当前页面中呈现项目。

这是可行的,但使用 jQuery 有点乏味,并且在其他一些 javascript 库(如敲除)的帮助下会更容易做到。

这是一个使用敲除的示例实现:http: //jsfiddle.net/6bgCX/7/

编辑:添加示例代码

于 2012-05-17T00:49:05.417 回答