• 分页查询(一)——真假分页学习



        在做ITOO项目中,经常会涉及到表格,这个时候我们会用到分页。


    一、真假分页比较


             假分页:从数据库中取出所有的数据,然后分页在界面上显示。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。


             真分页:确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点是访问数据库频繁。在大型网站 中往往采用真分页,比如百度的图片获取。


              (
    ps:一般来说,我在ITOO看看查询数据库方法时候有没有pageSize等参数,一般有的话就是真分页,吼吼……)
     
    二、后台代码分析
     

      //假分页代码  
    <script>
            function pagerFilter(data) {
                if (typeof data.length == 'number' && typeof data.splice == 'function') {    // 判断数据是否是数组
                    data = {
                        total: data.length,
                        rows: data
                    }
                }
                var dg = $(this);
                var opts = dg.datagrid('options');
                var pager = dg.datagrid('getPager');
                pager.pagination({
                    onSelectPage: function (pageNum, pageSize) {
                        opts.pageNumber = pageNum;
                        opts.pageSize = pageSize;
                        pager.pagination('refresh', {
                            pageNumber: pageNum,
                            pageSize: pageSize
                        });
                        dg.datagrid('loadData', data);
                    }
                });
                if (!data.originalRows) {
                    data.originalRows = (data.rows);
                }
                var start = (opts.pageNumber - 1) * parseInt(opts.pageSize);
                var end = start + parseInt(opts.pageSize);
                data.rows = (data.originalRows.slice(start, end));
                return data;
            }
    
            $(function () {//加载数据
                $('#tt2').datagrid({ loadFilter: pagerFilter }).datagrid('loadData', getData());
            });
        </script>

          //真分页页面代码
     Controller
            public ActionResult QueryAllTemplate()
            {
                int pageSize=int.Parse(Request.Params["rows"].ToString());
                int pageIndex=int.Parse(Request.Params ["page"].ToString());
                int total=0;
                IexamtemplatemainServiceBll IexamtemplatemainServiceBll = SpringHelper.GetObject<IexamtemplatemainServiceBll>("examtemplatemainServiceBll");
    
    
                List<t_examtemplatemain> t = IexamtemplatemainServiceBll.QueryExamTemplateMain( pageSize,  pageIndex, out total);
                var data = new
                {
                    total,
                    rows = t
    
                };
                return Json(data, JsonRequestBehavior.AllowGet);
                //JavaScriptSerializer serializer = new JavaScriptSerializer();
                //string strJson = serializer.Serialize(t);
                //return strJson;
               
            }
           

    B层代码  
            /// <summary>
            /// 查询课所有模板信息
            /// </summary>
            /// <returns>list集合</returns>
            public List<t_examtemplatemain> QueryExamTemplateMain(int pageSize, int pageIndex, out int total)
            {
                List<t_examtemplatemain> t_examtemplatemain = new List<t_examtemplatemain>();
                t_examtemplatemain = this.CurrentDal.LoadPageItems(pageSize, pageIndex, out total, u => u.CourseID, true).ToList();
                return t_examtemplatemain;
            }
            
    


    三、总结
    就像师哥说的:二者其实各有各的优缺点,可根据需要来选择。(比如数据量较多时,用真分页;想减少与后台的交互,可以使用假分页)。
           假分页,如果数据量较多,在首次页面加载的时候会比较慢,严重影响用户体验,Web开发和搜索引擎优化。真分页的效率无疑是最高的,它还有很多的优点:
           1.每次点击下一页,客户端访问服务器的时间基本一样,提高用户体验,更加的人性化。
           2.对于大数据量可以从容的面对。
    缺点:与后台的交互次数增多。
     
    感觉师哥博客写的比我好多了:
    http://blog.csdn.net/jiuqiyuliang/article/details/18009515

  • 相关阅读:
    初探 Linux
    操作系统简介
    1208. 尽可能使字符串相等
    643. 子数组最大平均数 I
    480. 滑动窗口中位数
    Bisect in Python
    HTTP 和 HTTPS 的区别
    URI和URL的区别
    HTTP 1.0和HTTP 1.1的主要区别是什么?
    MySQL游标的使用笔记大全
  • 原文地址:https://www.cnblogs.com/tanqianqian/p/5975025.html
Copyright © 2020-2023  润新知