用HTML5实现iPad应用无限平滑滚动

5次阅读

前言:
        LinkedIn 5 月 2 日发布了新的 iPad 版本,它基于 HTML5 制作,在体验和界面上非常出色,在使用中可以发现它和原生应用基本没有任何差别。
用 HTML5 实现 iPad 应用无限平滑滚动
         关于这个版本,有两篇文章非常有价值,深入的介绍了 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 项技术实现无限平滑滚动
         作者:TrunalBhanse
        译者:蒋宇捷
         这是在一系列博客文章中的第二篇,我们将聊聊 LinkedIn 新的 iPad 应用。在第一篇文章中,我们谈到了如何使用 HTML5 本地存储建立敏捷的移动体验,而这篇文章我要讲讲当实现一个无限翻页的列表时所面临的挑战。

什么是 “ 流 ”?

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

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

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

技巧 1:移除图像

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

技巧 2:隐藏页面

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

技巧 3:删除页面

         采用隐藏的页面可以覆盖 80%的情况。但是余下的 20%仍然会导致应用程序崩溃!我们更进一步,开始删除不需要的页面。作为副作用,如果我们删除当前页面左侧的页面,页面流会左移,而用户将失去所在位置。为了保持滚动位置,我们不得不在移除页面时(即 DOM 节点)用同样高度和宽度的空白页面来取代(图 2 中示意的 “ 占位符 ”)。例如,如果用户正在浏览第 5 页,我们删除第 0 页,并用占位符取而代之。
         采用了上述的 3 种技术,我们的流开始类似于下面图里的样子。  正如你可以在图 1 中看到的一样,如果用户正在查看第 3 页,前一页和后一页将完全加载。而当用户决定向前或者向后翻页时,他可以看到完全呈现的页面。当用户试图滚动时,我们开始加载图像并渲染页面。它可以在 iPad 模拟器上完美运行,但在实际设备上,你可以看到滚动性能的下降。
 
用 HTML5 实现 iPad 应用无限平滑滚动
图 1
 

正文完