分页显示该休矣

2023-11-12

当你有很多东西要显示给用户、而且内容多得远非一个屏幕可以放得下的时候,你会怎么办?很自然,你会想到分页。

在2007年,Vitaly Friedman写了一篇文章叫“Pagination Gallery: ExamplesAnd Good Practices”(分页艺术馆:样例赏析以及好的做法)。他在这篇文章里罗列了现实世界里的很多例子,在这里我就不再赘述了。如果你看过一种分页方案,其实你也就看过了所有的方案。因为在过去5年的时间里,分页技术没有太多实质的变化(或者说根本就没有变化)。

当你有10个、50个、100个、甚至几百个条目要显示的时候,我能够理解你要使用分页技术。但是,如果说你有几千个条目要分页,那就见鬼了——谁会去访问3810页里的第964页?实际上,人们在一段合理长度的时间里能够阅读和处理的信息是很有限的。那么,你把这么多内容分页显示给他们又有什么意义呢?

一旦你有几千条信息,你要解决的不是分页问题,而是搜索和过滤的问题。我们为什么要给用户展示成百上千条信息?你想达到什么目的?在理想情况下,每次搜索都应该只返回一个结果——那个结果就是你真正想要找的东西,并且在一页之内就能完全显示。

但也许你不是很确定你要找什么:也许你想得到很多观点和资源来做参考,或者在几个相似的东西之间进行一番比较。这很正常!但即使在这样的情况下,呈现100条左右的信息也应该绰绰有余了。你自然还得使用合理的方法给它们排序,以使最匹配的条目显示在越靠近页面顶部的位置。

一旦你挑选了一个密切相关的结果子集、并且选择了一种合理的排序方法,你究竟还要不要分页显示呢?试试一种所谓的无穷分页法如何?也就是当用户看到页面底部的时候动态地加载更多的内容,像下面这段视频展示的那样:

译者注:这段视频的网址是:http://www.youtube.com/watch?v=bwzBCm2oSuw

这并不像“去元音化”那样是一种古怪的做法。事实上,Twitter的时间线和Google的图片搜索服务都使用了相似的无穷分页法。他们要么在用户将页面滚动到底部的时候自动加载更多的内容,要么在页面底部放置一个“显示更多结果”的按钮(用户只要一按就会有更多的内容呈现出来)。

译者注:互联网令人称道之处在于,人们无论想什么就能说什么。当然,这也是互联网的一个遭人诟病的缺陷,因为博客和其他在线论坛上的评论有时让人气愤不已,更别提充斥着仇恨和淫秽的语言了。如何在毫无约束的放纵和令人窒息的监管之间找到一个合适的平衡点?有些人已开始轻松化解这个问题——将元音从单词中删除,这一过程称为去元音化disemvoweling)。元音被删除的文字就不那么令人厌恶了,而且其他读者仍可以读懂它的意思。这项修辞术还被美国《时代》周刊评选为全球范围内的2008年度50项最佳发明之一。

分页还是一种摩擦阻力。你有没有见过这样的论坛:在那里,你希望其他人在回复之前拼命读完整整4页的内容?好吧,如果进入“下一页”的按钮不是那么小得可怜的话,或者更好的情况,“下一页”按钮根本就不存在(因为那个论坛使用了无穷分页法),有些人也许会有耐心读完所有的内容。如果我们想让用户做更多的事情,我们就应该积极为他们消除阻力。

我并不是建议大家把所有传统的分页方法都替换成无穷分页法。但作为软件开发者,我们应该避免没头没脑地生成一个包含有成千上万个条目的列表,然后用“一刀切”的方法把它们分页显示出来。这把所有的负担都扔给了用户。这是不合理的!记住,我们发明电脑是为了让人们的生活变得更轻松,而不是变得更艰难。

如果你明白了这些,那接下去就有一个“平衡”的问题,正如Google的研究报告所述:

根据测验结果表明,用户对于搜索结果更喜欢“一页显示全部”的风格,而不是把内容生硬地分成很多页、每页只显示其中一部分的方式。

有趣的是,那些不喜欢“一页显示全部”的用户给出的原因是,他们担心因此会引起长时间的延迟(举例来说,假设页面里包含有很多图片,那么完整显示一页内容所需的载入时间必然会长一点)。这是可以理解的,因为我们知道用户对缓慢的速度会很介意。因此,尽管用户普遍喜欢“一页显示全部”的风格,但网站管理员还是很有必要在这种用户偏好与网页载入时间以及整体用户体验之间做出适当的平衡。

传统的分页方法对于用户来说不是特别友好,但无穷分页法也不是完美无瑕的——它也有自身的缺点和陷阱:

  • 滚动条作为用户判断“剩下还有多少内容?”的指示器,它在采用无穷分页法的情况下就失去了这个功效,因为页面内容实际上已是无穷多了。你需要一种替代的方法来给用户提供这个关键信息——也许你可以让一些文字驻留在页面底部,指示内容已经加载的百分比。
  • 无穷分页法不应该破坏深度链接。即使没了“页”的概念,用户也应该能够干净利落地链接到列表里的任何一个特定的条目。

译者注:深度链接(Deep Linking)是一种绕过被链网站首页而直接链接到其内容分页的链接方式。

  • 如果用户点击浏览器的前进或后退按钮,此时应该保存用户在滚动过程中所处的当前位置。这也许可以用pushState来实现。
  • 传统的分页方法也许在用户体验方面比较糟糕,但它很受“网络蜘蛛”的青睐。不要忽视用传统的分页方案去迎合网络搜索引擎。或者你可以使用一个站点地图。

译者注:网络蜘蛛(Web Spider)是一个抓取网页的“机器人”程序。它是一个很形象的名字,如果把互联网比喻成一张蜘蛛网,那么这个“机器人”程序就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页的,从网站的某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其他链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以通过这个原理把互联网上所有的网页都抓取下来。

  • 当你往列表里动态加载新条目的时候,请提供一些用户看得见的反馈信息,这样他们就能自己判断出“内容还没有完,还有新的内容正在被加载,浏览器没有死掉……”。
  • 记住,用户将再也无法触碰到页脚(或页眉),因为当他们把页面滚下去的时候新条目不断地冒出来,内容越来越长,就像一条没有尽头的河流。因此,你要么把页眉和页脚做成静态的,要么就用放置一个“载入更多内容”的按钮的方法来代替自动加载新内容的方式。

关于分页这个主题,如果你还想深入了解,你可以访问ux.stackexchange.com网站。那里有一些极好的问题与答案。

总之,你应该努力不扯上分页这玩意儿,因为你应该让用户在几个条目中就能找到他们需要的东西。这是高于一切的!因此,我怀疑Google在他们的核心搜索结果页面里对这个技术没有很用心。如果他们不能在第一页里列出极好的搜索结果,那么他们采用何种分页方法其实无关紧要,因为他们要不了多久就会被淘汰乃至破产。请把这牢记在心:你要为用户呈献一个相关条目的列表,并且要有一个明智的排序方法;为此你应该殚精竭虑。只有在这之后,你才应该去考虑你的分页方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分页显示该休矣 的相关文章

  • 国外程序员的BASIC情结——我的编程生涯始于BASIC

    关于BASIC Edsger Dijkstra曾经说过这么一段话 那些已经学过BASIC的学生是不可教化的 再去教他们优秀的编程风格注定徒劳无功 他们已经脑残 再生无望 成不了优秀的程序员 BASIC是Beginner sAll purpo
  • 你永远不会有足够的奶酪

    令人赏心悦目的产品和让人勉强容忍的产品之间的差别 就在于它们的细节有没有做好 在Human Factors International公司做的一篇演讲文稿里 他们提到了一个叫 哥伦比亚障碍装置 的东西 译者注 Human Factors I
  • Jeff Atwood质疑iPhone的单键设计

    我喜欢使用iPhone 但我对它的一个设计不敢苟同 苹果始终坚持 设备的正面永远只能有一个按键 我还买了一个Kindle Fire 它更离谱 一个按键都没有 我完全赞成 任何小器具的正面都应该在明显的位置上至少有一个 耶稣把手 一样的按键
  • YouTube上的版权保护

    早在2007年的时候 我曾写过一篇名为 YouTube The Big Copyright Lie YouTube 关于版权的弥天大谎 的文章 表达了我对YouTube又爱又恨的情感纠结 现在回想一下你在YouTube上看过的所有视频 它们
  • 软件定价:我们深谙其道吗?

    本文为翻译初稿 更多精彩内容 敬请关注 高效能程序员的修炼 人民邮电出版社 一段时间以来频繁光顾iPhone应用商店 以致于产生了个副作用 我开始从根本上改变了对软件定价的看法 这么多优秀的iPhone应用程序 要么是免费的 要么只卖区区几
  • 对你的屁股好一点!

    作为软件开发人员 买一把上乘的电脑椅也许是你能做的最明智的投资之一 事实上 在过去几年看过各种各样的椅子之后 我得出了一个结论 如果你想买一把上乘的椅子 你要花的钱不会少于500美元 如果你在座椅上花的钱没那么多 除非你正在经历那场跨世纪互
  • 坏苹果是团队的毒药

    最近一期的 美国生活 采访了WillFelps 他是华盛顿大学的一位教授 曾经组织过一次社会学实验来证明 坏苹果 的出奇强大的影响力 译者注 美国生活 This American Life 是一档叙事类的广播节目 每周一期 在超过500家电
  • 怎样招聘程序员

    在招聘程序员方面 没有所谓的神奇 银弹 但我可以分享一些建议和诀窍 它们经过我的实践证明是有效的 这些方法我多年来一直在用 我把它们总结如下 首先 要求通过几个简单的 Hello World 在线测试 我知道这听起来很疯狂 但有些自称是程序
  • 如何与人交流——程序员,赶紧生个孩子吧!

    原文作者 Jeff Atwood 每个家庭都应该生一个孩子吗 我不太愿意这样建议 因为当不当父母完全是个人选择 我始终尽量避免鼓吹为人父母的经验 但我越深入这个角色 我便越是相信 没什么比拥有一个小孩更能折射出成人世界里源源不断的荒唐 成为
  • 这样的会议让人很纠结

    很纠结吧 永远也不要参加这样的会议 顺便说一下 解决这个问题的方法就是 可用性测试 Usability Testing 好好想一想 我们做决定的时候 是要无休无止地争吵 最后谁吵赢了谁说了算呢 还是要基于真实的数据 这个变化是一场革命
  • Jeff Atwood倾情推荐——程序员必读之书

    英文版 Code Complete 2 中文版 代码大全 第二版 作者 Steve McConnell译者 金戈 汤凌 陈硕 张菲出版社 电子工业出版社出版日期 2007 年8月Jeff Atwood的推荐 Steve McConnell的
  • 象牙塔式的开发

    我向来不鼓励象牙塔式的开发模式 开发团队常年封闭在 高塔 之中 一门心思地做着魔法一样的软件 这些开发者根本不知道用户会怎样使用他们做出来的软件 你若问他们 最近一次面见用户是在什么时候 他们甚至可能都回答不上来 因为缺失强有力的证据 开发
  • 无我编程:你的工作不代表你

    原文作者 Jeff Atwood Johanna Rothman是这么描述 无我编程 这个概念的 25年前 Gerald M Weinberg写了 程序开发心理学 我在1977年发现了这本书 然后做了一个决定 放弃在电台做DJ的工作 打算做
  • 勿以专家自居

    对于权威 我心存芥蒂 我在 StrongOpinions Weakly Held 观点鲜明 但不固执己见 一文中曾经说过 当我了解到别人把我视为专家或者权威 而不是像伙伴一样的志趣相投者时 我就会觉得非常困扰 如果非要说我在迄今为止的职业生
  • 分页显示该休矣

    当你有很多东西要显示给用户 而且内容多得远非一个屏幕可以放得下的时候 你会怎么办 很自然 你会想到分页 在2007年 Vitaly Friedman写了一篇文章叫 Pagination Gallery ExamplesAnd Good Pr
  • 我同情那些不写单元测试的傻瓜

    J Timothy King写了一篇很棒的文章 先写单元测试的12个好处 Twelve Benefits of Writing Unit Tests First 遗憾的是 他在文章最后说的话完全是画蛇添足 然而 如果你不愿意改掉先写代码的老
  • 困惑:单元测试该在什么时候写?

    原文 http www codinghorror com blog 2005 04 good test bad test html 作者 Jeff Atwood 很多年以来 用于随机测试 ad hoc test 的工具我都是自己开发的 但在
  • 成为优秀程序员的方法就是抛开编程?

    原文 How To Become a Better Programmer by Not Programming 作者 Jeff Atwood 我在2006年写过一篇题为 Programmers as Human Beings 程序员 亦人类
  • 会议是浪费工作时间的最佳去处

    本文为翻译初稿 更多精彩内容 敬请关注 高效能程序员的修炼 人民邮电出版社 今天你开了多少个会 这个星期呢 这个月呢 现在你再自问一下 那些会议中有多少是值得参加的 如果把相同的时间用在工作上 你又能完成多少事情 这不禁让人想知道 我们究竟
  • 学海无涯苦作舟

    作者在Twitter上发的一条短讯 每一天 你一定要一起床就热情澎湃 否则 你就只是在打工 3 51 PM 2012 5 1 在我们创办Stack Overflow网站之后 有些人开始承认 我们构造了一个还过得去的 捕鼠器 把大家都吸引到那

随机推荐

  • 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建)

    前言 VueJS可以说是近些年来最火的前端框架之一 越来越多的网站开始使用vuejs作为前端框架 vuejs轻量 简单的特性使得前端开发变得更加简易 而基于vuejs的前端组件库也越来越多 我们今天使用的ElementUI 是饿了么团队开发
  • select下拉列表级联

    原文地址 http blog csdn net symgdwyh article details 5432582
  • Python学习(十)之数字(Number)、字符串(String)

    文章目录 一 Python3 数字 1 整型的不同进制 2 数据类型的转换 3 数字运算 4 数学函数 5 随机数函数 6 三角函数 7 数字常量 二 Python3 字符串 1 对字符串的访问 2 字符串运算符 3 转义字符 4 字符串格
  • GLP(Grafna +Loki +Promtail)日志可视化企业级实战

    文章目录 1 效果展示 Loki 指标展示 日志展示 内存分析案例 业务请求量分析统计 自由探索日志 0 简介 grafana学习 自定义查询按钮 为什么不是ELK ELK Loki 1 loki聚合组件 架构
  • phpstudy2016 RCE漏洞验证

    文章目录 漏洞描述 漏洞验证 漏洞描述 PHPStudyRCE Remote Code Execution 也称为phpstudy backdoor漏洞 是指PHPStudy软件中存在的一个远程代码执行漏洞 漏洞验证 打开phpstudy2
  • 小熊个人资料_抖音网红熊董事长个人资料,美迪智董事长张曼如信息介绍

    想必大家最近都被抖音上面一只勤勤恳恳发传单的熊给刷屏了吧 广州那么热的天别说女孩子穿着那么厚的衣服满街跑 就连男生也不行啊 毕竟那个衣服里面是不透气的 最开始大家是被这个网红熊的坚持感动到了 后来才知道发传单的只是一个20岁的女生 后来大家
  • Promise原理

    一 Promise与异步的关系 之前做练习遇到Promise与SetTimeout的混合使用 自己发现对于Promise的理解不够彻底 所以今天就来看看这方面的问题 首先Promise的主要作用是能够处理异步问题 那么什么是异步呢 与它相反
  • <li>标签获取选中的值

    ul class payType li class selected 支付宝付款 li li 货到付款 li ul window nl ad function 获取id为zhifubao下边所有li标签 var fukuan documen
  • 【k8s故障处理篇】kubernetes集群中工作节点Noready故障处理

    k8s故障处理篇 kubernetes集群中工作节点Noready故障处理 一 查看故障情况 二 检查master节点系统pod是否运行正常 三 在master节点检查node02节点详细信息 四 检查node02节点日志 五 最终解决方法
  • [Nowcoder

    题目描述 There s a new art installation in town and it inspires you to play a childish game The art installation consists of
  • QT给控件QLineEdit添加clicked()事件方法

    做Qt开发的会知道QLineEdit是默认没有clicked事件的 但是Qt有很好的一套信号 槽机制 而且Qt是基于C 面向对象的思想来设计的 那么我们就很容易通过自己定义一些类 重写QLineEdit的一些方法去实现没有的方法 比如cli
  • Python时间序列--ARIMA模型参数选择(六)

    ARIMA模型参数选择流程 import pandas as pd import numpy as np TSA from Statsmodels import statsmodels api as sm import statsmodel
  • 指针和数组笔试题解析【下篇】

    文章目录 6 指针笔试题 6 1 试题 1 6 2 试题 2 6 3 试题 3 6 4 试题 4 6 5 试题 5 6 6 试题 6 6 7 试题 7 6 8 试题 8 6 指针笔试题 6 1 试题 1 下面代码输出的结果是什么 int m
  • 数学建模国赛论文latex代码汇总

    目录 一 写在前面的话 二 latex环境安装和编辑器的选择 三 基础配置 写作环境 中文支持 页面设置 分级目录 四 数学公式 方程 矩阵编写与特殊符号的输入 五 三线表的输入 六 图片和参考文献的插入 七 最后附上完整配置代码 一 写在
  • Java的jdk安装教程:

    一 jdk安装流程 1 从官网下载jdk https www oracle com java technologies downloads 2 进入官网 3 选择需要的版本 4 下载后 双击安装 二 配置环境变量 1 桌面右键计算机点击属性
  • 利用Audacity软件分析ctf音频隐写

    分析音频得到摩斯电码 看波的宽度分辨长短音 比较细的就是短音 代表 比较粗的就是长音 代表 中间的间隔就是 得到摩斯电码
  • unity点击场景内物体进行交互

    提示 本文展示点击事件 另有其他自行研究 前言 一 原理 二 使用步骤 1 使用前提 2 使用脚本 总结 前言 很多情况下我们需要对场景内的物体进行交互 今天我们采用射线检测的方法进行点击 例如 点击场景内的Cube 进行开始旋转 提示 以
  • 宏DECLARE_DYNCREATE与DECLARE_DYNAMIC

    一 作用 DECLARE DYNCREATE的主要作用 支持对象的动态创建 使用 DECLARE DYNCREATE 宏声明的类可以在运行时动态创建对象 支持对象的序列化 MFC框架提供了对象的序列化支持 允许将对象的状态保存到磁盘 序列化
  • VS2010编译QT4.8.4遇到“LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 “问题

    在用VS编译qt时候很少有人遇到如上所示问题 因此当我遇到时很不幸的找不到对应的解决办法 相关的国内外网站资料没有少折腾可都不行 还有的说修改项目属性 但这种方法只适合对具体的项目就行修改 在编译qt的时候就丈二和尚摸不着头脑 下面就介绍一
  • 分页显示该休矣

    当你有很多东西要显示给用户 而且内容多得远非一个屏幕可以放得下的时候 你会怎么办 很自然 你会想到分页 在2007年 Vitaly Friedman写了一篇文章叫 Pagination Gallery ExamplesAnd Good Pr