目录

前言:

linkedin 5月2日发布了新的ipad版本,它基于html5制作,在体验和界面上非常出色,在使用中可以发现它和原生应用基本没有任何差别。

关于这个版本,有两篇文章非常有价值,深入的介绍了mobile web app和html5移动开发的原理和方法。

第一篇《linkedin如何构建ipad新应用》主要包括三个方面的内容:

linkedin and themobile web

linkedin开始越来越多的采用html5来开发移动web应用。

now, with more node.js

大量使用了node.js。

“responsive design” just doesn’t work

他们认为对简单的、一次性的网站很有用,但是对应用或者社交网络来说,它没有那么好。

-------- -------- -------- -------- 华丽的分隔线

而下面一篇文章讲述了linkedin是如何使用html5在ios中实现平滑无限滚动以及内存和性能优化的。

linkedin ipad版:用html5的5项技术实现无限平滑滚动

译者:蒋宇捷

这是在一系列博客文章中的第二篇,我们将聊聊linkedin新的ipad应用。在第一篇文章中,我们谈到了html5本地存储建立敏捷的移动体验,而这篇文章我要讲讲当实现一个无限翻页的列表时所面临的挑战。

什么是“流”?

当ipad项目开始时,我们考虑过如何才能为用户创造一个引人入胜的内容消费体验。我们决定以“流”的方式来展示文章、网络更新,以及其他类似的内容:一个可以无限翻页的界面。这里是页面流的第一页:

移动设备上无限列表的挑战

和台式机相比,移动设备具有更少的内存和更低的cpu主频。如果在html页面中渲染很长的列表,你会面临运行设备崩溃的危险。这使得在移动设备上构建大型的html5互动应用成为一个挑战。native技术提供了uitableviewcontroller来建立长的,无限滚动的列表。uitableview包含可复用的uitableviewcells来优化内存,性能以及响应。而针对html5我们没有任何现成解决方案。因此,我们将自己实现一个!

技巧1:移除图像

uiwebview或者移动safari对图像有严格限制。我们的页面流里铺满了大尺寸图像,所以很快就会达到上限。一种选择是使用html5canvas绘制图像,带来内存问题。然而我们发现在画布上绘制非常大的图像相当缓慢,所以我们不得不采取另一种方法:当一副图像完全“流”出屏幕时,用另一副非常小的图像替换img标签的“src”属性。这能确保渲染大型图像所使用的内存被定期释放。此外,我们保证并没有引入图像空src属性的错误。

技巧2:隐藏页面

释放图像并没有回收足够的内存来防止崩溃。因此,我们开始通过将的visibility属性设置为hidden来隐藏流的独立页面(图2表示“隐藏”的页面)。经过这种调整,我们不仅看到了更多的内存被回收(这样应用程序就不会崩溃),而且渲染速度也更快,因为浏览器不会为界面上“隐藏”的页面进行绘制。

技巧3:删除页面

采用隐藏的页面可以覆盖80%的情况。但是余下的20%仍然会导致应用程序崩溃!我们更进一步,开始删除不需要的页面。作为副作用,如果我们删除当前页面左侧的页面,页面流会左移,而用户将失去所在位置。为了保持滚动位置,我们不得不在移除页面时(即dom节点)用同样高度和宽度的空白页面来取代(图2中示意的“占位符”)。例如,如果用户正在浏览第5页,我们删除第0页,并用占位符取而代之。

采用了上述的3种技术,我们的流开始类似于下面图里的样子。正如你可以在图1中看到的一样,如果用户正在查看第3页,前一页和后一页将完全加载。而当用户决定向前或者向后翻页时,他可以看到完全呈现的页面。当用户试图滚动时,我们开始加载图像并渲染页面。它可以在ipad模拟器上完美运行,但在实际设备上,你可以看到滚动性能的下降。

图1

图2

正如图2所示,当用户翻动到第5页,第0和第1页将会被删除,第2页将会隐藏,而第3页移除了所有图像。此时,用户可以继续向前翻页,其它页面将根据它们和可见页面之间的距离来决定是移除图像、隐藏还是删除自身。

我们不得不为不同版本的ipad使用一个可变大小的“窗口”。例如,ipad1内存最少,所以我们不得不给它一个非常小的窗口:

getconfig : function() {

//默认设置

var config = {

size : 3,

maxvisibleononeside : 1,

};

//根据设备更新设置

if($isdesktop || $native.isnative() && $os.ipad) {

//检测是ipad1还是ipad2

if($isdesktop || $native.getdeviceversion() > 1) {

config.size = 7;

config.maxvisibleononeside = 2;

}

}

return config;

}

getconfig : function() {

//默认设置

var config = {

size : 3,

maxvisibleononeside : 1,

};

//根据设备更新设置

if($isdesktop || $native.isnative() && $os.ipad) {

//检测是ipad1还是ipad2

if($isdesktop || $native.getdeviceversion() > 1) {

config.size = 7;

config.maxvisibleononeside = 2;

}

}

return config;

}

技巧4:避免缩放和盒阴影

按照之前的经验,我们使用两个html / css的优化技巧来改善性能:

通过htmlimg标签中指定宽度和高度属性来避免客户端缩放图像

避免css盒阴影:它在webkit下很慢

技术5:减少dom节点

经过上述优化,你是否预期应用再也不会崩溃?错了!在测试过程中,上述技巧让应用程序运行的时间更长,但一段时间后它仍然会崩溃。

根据之前iphone应用的经验,我们知道保持dom节点最少是平滑滚动和保证足够内存的关键点。记住这一点后,我们将所有占位所用的节点合并为一个虚拟的,相同大小的节点。结果是:不管我们滑动到多少页,页面流不会在任何设备上崩溃!最终机制如图3所示:

图3

技术实现的视频

这里有一个当用户滑动翻页时,dom所表现出来行为的视频。左边我们在chrome窗口中加载页面流。而在右边,我们通过chrome的开发者工具来展示如何添加或删除节点和通过虚拟页面的宽度来填补被删除的网页。请注意dom节点是如何保持在一个恒定的数量的,以及ul的第一个li节点(“虚拟”节点)大小是如何增长的(你可能需要全屏播放视频来看)。

失败的尝试

我们并没有在第一时间得到正确的结果,所以必须要列出我们一些曾经失败的尝试。我们最开始使用多个uiwebviews来各自渲染一个页面并用uiswipegesturerecognizer来翻页。然而我们很快就意识到,在本地应用程序使用多个web视图在内存和性能方面是一种糟糕的方式。

随后我们尝试了和3-div类似的方法。它可以工作,但是我们对滑动翻页的性能并不满意。有时如果用户在翻页,我们同时在渲染一个页面,单线程的uiwebview将无法添加到页面流里面。

致谢

此外,特别感谢 ryan帮我为这篇文章录制视频。

转载请注明:来自蒋宇捷的博客

仿ipad页面html5,用HTML5实现iPad应用无限平滑滚动相关推荐

  1. 支持在iPad中播放的HTML5视频网站推荐

    YouTube是最早支持HTML5视频的网站,随着iPad等平板电脑的流行,越来越多的视频网站开始支持HTML5视频播放.下面就向大家分享一些国内的HTML5视频网站,是根据网上信息整理而成,欢迎大家 ...

  2. html5 ios number,HTML5 Scorecard: The New iPad and iOS 5.1 — A Mixed Bag

    Apple's new iPad has a beautiful screen, but often struggles to smoothly display and scale even aver ...

  3. 单页活动页面html,优秀HTML5活动页面

    一个好的手机活动宣传 更能让人分享 传播是爆炸性的 下面是我平时看到一些好的微信活动宣传页面  分享给大家 其中用到的技术 常做微信活动 专题页面的人 可以看看大神们是怎么做的  这样到自己做的时候 ...

  4. 对html5的了解,HTML5——对HTML5的认识

    首先非常感谢李刚老师出的这本书<HTML5/CSS3/JavaScript讲义>,今天读了第一章节的内容,趁热打铁,总结一下. HTML5的时代已经到来,它对所有的前端开发人员来说是一种福 ...

  5. html5发展前景-兄弟连,IT兄弟连 HTML5教程 HTML5的曲折发展过程 HTML5的诞生

    原标题:IT兄弟连 HTML5教程 HTML5的曲折发展过程 HTML5的诞生 十年磨一剑,正如我们所看到的一样,HTML5大潮正来势汹汹.但也正如我们所知道的一样,HTML5是一种技术标准,它的语义 ...

  6. 下列关于html5表单的多样输入方式,IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1...

    原标题:IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1 HTML5拥有多个新的表单输入类型,这些新特性提供了更好的输入控制和验证.并不是所有的主浏览器都支持新的input类型,不过我们可 ...

  7. 客户端解析html5,基于HTML5的WebGIS实时客户端设计

    摘  要: 在WebGIS的浏览器端存在绘图效率差.不能直接支持矢量绘图等问题.为提高客户端的交互性和实时性,在解决浏览器不支持矢量绘图和渲染速度慢.存储空间小.传输速率慢这些问题的基础上,结合HTM ...

  8. 200套工作室设计行业响应式Html5模板HTML5+CSS3设计网站模板简洁设计师作品展示响应式模板整洁扁平宽屏CSS3网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机se

    200套工作室设计行业响应式Html5模板HTML5+CSS3设计网站模板简洁设计师作品展示响应式模板整洁扁平宽屏CSS3网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机se ...

  9. 兄弟连html5在线画板,IT兄弟连 HTML5教程 HTML5做到了与之前版本的兼容

    原标题:IT兄弟连 HTML5教程 HTML5做到了与之前版本的兼容 为了保证HTML5能与之前的HTML版本达到最大的兼容,HTML5对一些元素标记的省略.boolean值的属性,以及引号的省略这几 ...

最新文章

  1. 思科预计全球云数据流量将以66%的混合年增长率递增
  2. 手把手教你上手python库pydbgen(附代码、安装地址)
  3. 64位系统识别内存 服务器,服务器内存和电脑内存的区别
  4. python supper_python supper()函数
  5. Linux循环链表删除节点,删除循环单链表开头元素
  6. 基于间隔推送全量更新数据状态的设计方法
  7. discuz php mysql_php下mysql数据库操作类(改自discuz)
  8. 《MATLAB图像处理375例》——1.3 MATLAB概述
  9. 117 Python程序中的线程操作-开启多线程(threading.Thread)
  10. 史上最强的下载器,没有之一
  11. javascript常用正则
  12. 2022年中国工业机器人市场现状研究分析与发展前景预测报告
  13. multisim14安装与卸载
  14. 有了它,Java语法也可以变得甜甜的
  15. 2017会考计算机知识点,高中物理会考知识点考点归纳2017
  16. 岁月温柔-4 最美人间四月天
  17. 如何自定义火狐背景_在Firefox中自定义菜单
  18. c语言如何小写转换为大写字母,c语言怎么将小写转换为大写
  19. Android 绘制圆形进度条
  20. kubernetes存储:local,openEBS,rook ceph

热门文章

  1. 2016面试整理--来源牛客网
  2. 疫苗预约系统,疫苗预约管理系统,疫苗预约小程序系统设计与实现
  3. 多文件在线压缩并下载
  4. FIFO,LPU,CLOCK时钟算法
  5. 错误使用 load ASCII 文件的行号 1 中的文本未知“MATLAB“。
  6. 微信公众平台开发(六) 翻译功能开发
  7. 手机QQ浏览器解析A链接访问过后颜色发生变化的Bug
  8. Canvas实现高性能的频谱瀑布图音频频谱图
  9. iconfont官网中的图标保留其原本的颜色
  10. 安卓录屏软件实现 开维PRA自动生成代码Ctrl.js