热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

设想无穷转动下拉加载,实践高性能页面真理

UXPlanet论坛上有过这么一篇热点文章:InfiniteScrollingBestPractices,它从UX角度剖析了无穷转动加载的设想实践。无穷转动加载在互联网上到处都有运

UX Planet论坛上有过这么一篇热点文章: Infinite Scrolling Best Practices,它从UX角度剖析了无穷转动加载的设想实践。

无穷转动加载在互联网上到处都有运用:
豆瓣首页是一个,Facebook的Timeline是一个,Tweeter的话题列表也是一个。当你向下转动,新的内容就奇异的“无中生有”了。这是一个获得广泛赞赏的用户体验。

无穷转动加载背地的手艺应战实在比设想中要多不少。尤其是要斟酌页面机能,须要做到极致。
本文经由历程代码实例,来完成一个无穷转动加载结果。更重要的是,在完成历程当中,关于页面机能的剖析和处置惩罚力争做到最大化,愿望对读者有所启示,同时也迎接与我议论。

机能丈量

在开启我们的代码之前,有必要先相识一下经常运用的机能丈量手腕:

1)运用window.performance

HTML5带来的performance API功用强大。我们可以运用其performance.now()准确盘算顺序实行时候。performance.now()与Date.now()差别的是,返回了以微秒(百万分之一秒)为单元的时候,越发精准。而且与 Date.now() 会受体系顺序实行壅塞的影响差别,performance.now() 的时候是以恒定速率递增的,不受体系时候的影响(体系时候可被工资或软件调解)。
同时,也可以运用performance.mark()标记种种时候戳(就像在地图上办理),保存为种种丈量值(丈量地图上的点之间的距离),便可以批量地剖析这些数据了。

2)运用console.time要领与console.timeEnd要领

个中console.time要领用于标记最先时候,console.timeEnd要领用于标记终了时候,而且将终了时候与最先时候之间经由的毫秒数在掌握台中输出。

3)运用专业的丈量东西/平台:jsPerf

此次完成中,我们运用第二种要领,因为它已完整可以满足我们的需求,且兼容性越发周全。

团体思绪和计划设想

我们要完成的页面样例如图,

《设想无穷转动下拉加载,实践高性能页面真理》

虽然DOM节点自身并不是耗能大户,然则也不是一点都不斲丧机能,每一个节点都邑增添一些分外的内存、规划、款式和绘制。一样须要注重的一点是,在一个较大的DOM中每一次从新规划或从新运用款式(在节点上增添或删除款式所触发的历程)的体系开支都邑比较高贵。所以举行DOM接纳意味着我们会坚持DOM节点在一个比较低的数目上,进而加速上面提到的这些处置惩罚历程。

据我视察,在真正产物线上运用这项手艺的还比较少。能够是因为完成复杂度和收益比并不很高。然则,淘宝挪动端检索页面完成了相似的头脑。以下图,

《设想无穷转动下拉加载,实践高性能页面真理》

每加载一次数据,就天生“.page-container .J-PageContainer_页数”的div,在转动多屏今后,早已移除视窗的div的子节点举行了remove(),而且为了保证转动条的准确比例和防备高度陷落,显现声清楚明了2956px的高度。

墓碑(Tombstones)

如之前所说,假如收集耽误较大,用户又飞快地转动,很轻易就把我们衬着的DOM节点都甩在千里以外。如许就会涌现极差的用户体验。针对这类状况,我们就须要一个墓碑条目占位在对应位置。比及数据取到今后,再替代墓碑。墓碑也可以有一个自力的DOM元素池。而且也可以设想出一些美丽的过渡。这类手艺在国外的一些“引领手艺潮水”的网站上,早已有了应有。比方下图取自Facebook:

《设想无穷转动下拉加载,实践高性能页面真理》

我在“简书”APP客户端上,也见过相似的计划。固然,人家是native…

《设想无穷转动下拉加载,实践高性能页面真理》

转动锚定

转动锚定的触发机遇有两个:一个是墓碑被替代时,另一个是窗口大小发作转变时(在装备发作翻转时也会发作)。这两种状况,都须要调解对应的转动位置。

总结

当你想供应一个高机能的有优越用户体验的功用时,能够手艺上一个简朴的题目,就会演变成复杂题目标。这篇文章就是一个例证。
跟着 “Progressive Web Apps” 逐步成为挪动装备的一等国民(会吗?),高机能的优越体验会变得越来越重要。
开辟者也必需延续的研讨运用一些形式来应对机能束缚。这些设想的基本固然都是成熟的手艺为基础。

这篇文章参考了Flicker工程师,前YAHOO工程师Stephen Woods的《Building Touch Interfaces with HTML5》一书。以及王芃先辈关于《Complexities of an Infinite Scroller》一文的部份翻译。


推荐阅读
  • 新版本在线体验地点已上线,迎接体验?—2017-01-14喜好就Star,不只是Fork;想要分享的结果才是驱动力,而手艺仅仅是一种要领。TP-adminTP-admin即基于Th ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 这个问题困扰了我两天,卸载Dr.COM客户端(我们学校上网要装这个客户端登陆服务器,以后只能在网页里输入用户名和密码了),问题解决了。问题的现象:在实验室机台式机上安装openfire和sp ... [详细]
  • html结构 ... [详细]
  • 2048小游戏小记
    1。游戏界面布局由textview1与textview2来显示分数,2048游戏主界面由gridlayout组成,底部添加Button重启游戏。2.创建游戏主类Gameview在构 ... [详细]
  • DatepickerlandedonChrome20,isthereanyattributetodisableit?MyentiresystemusesjQuery ... [详细]
  • 前端监控数据网络(要求阻拦)
    所谓web,纵然你我素未谋面,便知志趣相投;深居简出,亦知天下之大。01—为何阻拦要求如今的web运用,大都是经由过程要求(http)去猎取资本,拿到资本后再显现给用户,一个页面中 ... [详细]
  • Well,Ivebeensearchingfewdaysalready,howtodisplayHTML5videoinfull-screenmodeonandroi ... [详细]
  • 引见socket.io是一个基于websocket完成的前后端及时通信框架,也对低版本浏览器做了封装。运用起来简朴,轻易。首次运用起来可能会比较含糊,实在重要经常使用就几个要领,简 ... [详细]
author-avatar
王丽丽2502934407
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有