用jQuery+Tablesorter实现客户端分页与排序
NinGoo's blog

用jQuery+Tablesorter实现客户端分页与排序

最近花了比较多的时间在自己开发的一个数据库监控系统上。监控系统的架构很简单,主要用shell+perl+SQL采集数据到一个MySQL数据库中,然后使用php来做web展示。对于仅仅定位于团队内部使用的小系统来说,这样的架构足够了,简单有效。

为了将数据库中的一些详细数据展示到web页面,采用了PEAR::HTML_Table,可以将SQL查询的结果直接转换成html表格。HTML_Table功能比较单一,如果要实现分页与排序的功能,还需要借助SQL语句。在MySQL中,如果要根据选择的任何一列都能用来排序的话,只要该列没有索引,就必须filesort进行实际的排序。由于系统中没有引入cache层,每次页面刷新都要到数据库中执行排序的SQL,性能是比较差的。

因此便想用javascript在客户端实现分页与排序,数据库中只要一次性选出需要的数据即可。jQuery是目前比较流行的一个javascript框架,以前也是久闻其名,但一直没有用过。Google了一把,发现其用法还是非常简单的,短短几行代码,就可以实现我所想要的效果。jQuery功能强大,但其实就是一个120K左右的js文件,并且还支持插件,分页功能就是通过一个叫tablesorter的插件实现的。

使用jQuery+Tablesorter实现客户端分页与排序,只需要10几行代码足矣。唯一的要求,就是html的table标签内要包含thead和tbody部分,这可以调用HTML_Table::getHeader()生成thead,调用HTML_Table::getBody()生成tbody部分。然后在需要展示数据的页面引入jQuery和Tablesorter的js库文件,再加上几行代码即可实现客户端javascript对数据table的分页与排序,并且还支持动态修改每页数据行数,支持多列排序等。具体的例子和代码,都可以在本文的链接中找到,就不在这里多说了。

Web开发我是外行,几年前学了点php的皮毛,知识已经多年没有更新过了。Ajax和web2.0的年代,javascript确实重新焕发了青春,像jQuery这样的框架,真的是不可多得的好东西,对于像我这样的初学者,也能很快上手做出相当不错的页面效果,这才是技术的生产力啊。

当然,在客户端做分页和排序有利也有弊。因为所有数据是一开始就全部从数据库中选取并返回客户端的,如果数据量比较大,那么第一次加载页面的时间就会比较长,并且可能占用客户端过多的资源。所以必须仔细权衡,在合适的场景用合适的技术。

无觅相关文章插件,快速提升流量

本文网址:http://www.ningoo.net/html/2009/use_jquery_and_tablesorter_for_data_sort_and_pager.html

订阅到Google | 收藏到Del.icio.us | 推荐到鲜果

上一篇: 下一篇:

本文Tags: , , , ,

6 条评论

  • At 2009.03.29 16:40, cosbeta said:

    用jquery压缩后的版本,然后php gzip再次压缩,就只有20k不到了。选择数据还是不太建议一次性筛选出来,可以按需要从php->mysql,然后在客户端缓存已经获取过的数据!这样两者都兼顾了。

    http://bloggermap.org/maps/maps-index.php 就是这样做的,当你点一个marker的时候,ajax load数据,然后缓存之,只要不刷新这个页面,下次点击该marker的时候,就不需要再去load一遍数据了!

    呵呵,好久没有留这么多言了

    • At 2009.03.29 23:01, NinGoo said:

      @cosbeta 呵呵,谢谢江东大哥指点。因为第一次学习jQuery就下了个全版本的,也没有用压缩。不过好在监控系统么,一共就没几个人访问的,而且是在内网,大小差了几十K还感觉不太出来^_^

      数据当然是筛选过的,但是因为有些数据如果要按照任意一列做排序的话,只能将符合条件的都先选择出来,否则排序出来的就不是想要的结果啦。而不像用sql做分页排序的时候可以通过limit限制只返回一页的记录。

      • At 2009.03.30 11:40, cosbeta said:

        不敢,哈哈,看你twitter资料,难道咱们是本家?

        • At 2009.03.30 11:43, NinGoo said:

          呵呵,twitter上是我在公司的花名^_^

      • At 2009.03.30 08:56, shengang34 said:

        宁兄终于自己写工具了,
        恭喜又跨越了一个台阶。

        • At 2009.03.30 20:16, NinGoo said:

          工具一直都在写,只是太懒,不想弄成独立的产品,只适合特定场景用用而已


        (Required)
        (Required, will not be published)