移动设备分页显示数据

内容纲要

概述

互联网上有海量的信息,如何展示这些信息?主流的做法是分页展示,如下是一个典型的页面

值得研究的是页面底部的导航条,这个导航条的信息如下

  • 每页显示 25 条记录
  • 当前是第 1 页
  • 一共有 10 页
  • 一共有 243 条记录
  • 可以从第一页直接跳转到 第 2,3,10 页

可以说这是最传统也最流行的分页显示样式,所以当我们需要提供分页显示的后台服务时,自然而然的就模仿起来,例如下面的一个接口

youku 节目视频列表接口返回

{
    showcats: "电视剧",
    status: "success",
    show_update: false,
    history_tid: "9cd2277647d311e5b692",
    pz: 1,
    pg: 1,
    total: 30
    results: [
        {
            username: "",
            total_pv: 10823895,
            show_videostage: 1,
            pubdate: "2016-08-22 23:48:54",
            tags: "电视剧",
            img_hd: "http://r4.cp31.ott.cibntv.net/0542080857BAA18F6A0A43045856619E",
            is_new: false,
            show_videoseq: 1,
            streamtypes: [
                "hd2",
                "flvhd",
                "hd",
                "3gphd",
                "hd3"
            ],
            pk_video: 423715924,
            show_videotype: "正片",
            total_up: 96528,
            duration: 2674.67,
            limit: 0,
            total_down: 235,
            desc: "美女学霸贝微微是庆大计算机系大二的学生,立志成为游戏工程师的她化名芦苇微微跻身网游高手,因没有在游戏中上传真实照片微微惨遭侠侣真水无香的抛弃。大神肖奈是庆大计算机系大四的学生,化名一笑奈何的他在游戏榜上排名第一。即将毕业的肖奈将要创办自己的游戏公司,在网吧初次看到打游戏的微微后肖奈就被微微所吸引,在游戏中看到真水另娶他人后肖奈主动邀请微微与自己结为侠侣。",
            is3d: 0,
            stg: 1,
            total_comment: 16424,
            img: "http://r4.cp31.ott.cibntv.net/0542080857BAA18F6A0A43045856619E",
            title: "微微一笑很倾城 01",
            userid: "UMzE3OTU5MzkyOA==",
            videoid: "XMTY5NDg2MzY5Ng==",
            total_fav: 0,
            state: 3,
            cats: "电视剧",
            reputation: 9.639591265373667,
            guest: [

            ],
            publicType: 0,
            pay_type: 0
        }
    ],
    access: "allow",
}

注意 6,7,8 行

  • pz: 1:每页显示 1 行数据
  • pg: 1:当前第 1 页
  • total: 30:共有 30 条记录

移动设备分页体验

先看看京东的商品展示页

再看下网易新闻的评论页

移动设备分页与传统分页差异

在移动设备上,交互方式与电脑浏览器完全不同,因此分页展示也有了极大的差异

  • 移动设备通过上滑或下拉来加载数据,传统的电脑浏览器通过分页导航条来切换页面
  • 移动设备上滑或下拉一定是加载新数据吗?实际上并非如此,所以上滑或下拉并不对应电脑浏览器的切换页面
  • 移动设备上不需要显示总页数,用户只需要反复上滑屏幕,若没有更多数据,一般是显示一个提示,甚至不做任何提示
  • 移动设备无论上滑还是下拉,加载的总是相邻页的数据,不像电脑浏览器那样,可以直接跳转到任意一页,例如从第一页直接跳转到最后一页
  • 移动设备每次加载的数据量是多少?估计谁也不清楚,而且用户也不 care;而电脑浏览器每一页(不包括最后一页)的数据量是一样滴,如果某一页的数据比上一页要少,通常表示这是最后一页

由此,可以总结出下面的表格

项目 电脑浏览器分页 移动设备分页
页与页之间有明显的界限
显示总页数(或总记录数)
支持任意跳转
每一页(除最后一页)显示记录数固定

针对移动设备做分页

  1. 不查总记录数,直接到数据库获取某一页的数据
  2. 由于没有总记录数,客户端不知道当前是否最后一页,所以由服务端告诉客户端
  3. 不保证一页有多少数据,这样可以在返回数据之前做过滤,增加服务端灵活性,极端情况下,某一页没有任何数据,但是下一页依然有数据

why

  1. 不查总记录数,就避免了一个数据库的 count 查询,在数据量较大时,该查询往往比较耗时
  2. 有利于多数据源的整合,例如,部分数据从本地数据库查询,部分数据从远程接口获取:这种情况下要知道总记录数就必须调用一次接口,问题是分页的情况下,我这一页的数据可能只需要从数据库返回,这尼玛就是白白调用了一次接口,及其影响性能
  3. 由于没有查询总记录数,可能导致当前页是最后一页但是刚好数据量和页大小相等,这样会导致客户端多查一页:不过这样对用户体验和服务器压力来说均无影响
  4. 当需要删除数据时,不需要重建所有页面的缓存,只需要对缓存命中的那一页进行过滤
    • 某个产品做了个评论功能,由于对评论进行敏感词和广告过滤比较困难,经常需要手工屏蔽某条评论,而该产品的获取评论接口设计,与客户端约定了每页返回 30 条评论,若不足 30 条表示已到最后一页,这也导致该产品无法对评论接口返回的数据做缓存:一旦屏蔽某条评论,刷新缓存非常困难
    • 对于商品展示,考虑到商品因库存原因也存在上下架需求且实时性要求较高,这种对缓存过滤的方式还是很方便的

思考

对于分页显示评论的场合,是不是有一种更高效的分页方案呢?

  • 一般分页,都是从前往后分页,但是评论这一类的应用,按时间显示,其显示顺序固定,新的评论总是显示在前面,所以,是不是可以考虑从后往前分页,这样后面的分页可以长期缓存,只需要对前几页的数据进行刷新,同时维护一个指向每一页的 key 的列表
  • 从用户体验上来说,实际上就是下拉刷新(请注意:和上滑加载应该是不一样的)

不同的应用场合,考虑不同的实现方案,软件开发没有银弹,技术方案也不是普遍适用的。

移动设备分页显示数据

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top
粤ICP备2020114259号 粤公网安备44030402004258