携程2015 Open House获奖项目:响应式的蜕变

响应式的蜕变

Ctrip Tech

本文不再从最基本的语法开始行文,而在列举一些最基本的信息之后,开始探讨传统响应式设计的问题,与在实践当中思考出来的改进方法,从而实现一次次的蜕变。

目前为止,平台众多,各种屏幕纷繁复杂下面我们看一下移动平台设备分布和屏幕分辨率分布:

我们看到平台分布虽几大厂商占据绝对优势地位,但是非主流平台仍然占领了一定的市场占有率,而移动屏幕的分辨率则更是五花八门,那么:

1) 为不同平台开发原生应用?

2) 为同一平台开发多个分辨率版本的应用?

3) 使用一个web页面展示在所有平台上?

这些都不可行,开发成本和用户体验让这些选择困难重重,而达不到目标,解决方案就是响应式设计。

响应式的定义:

页面的设计与开发应当根据设备环境进行相应的响应和调整,而设备环境包括:屏幕尺寸,屏幕方向,系统平台,用户行为导致的变化等。

响应式的优点:

1、所有平台使用一个域名,一套代码,seo友好

2、适应所有平台,所有分辨率

3、获得各种平台的最佳用户体验,各平台设计风格一致

4、开发成本低,维护成本低

5、技术门槛低,大量前后端开发人员都可参与

6、不同平台加载不同的资源,减少冗余代码

响应式的注意事项:

1、设计思想不同,补习响应式相关知识(布局,图片)

2、低端浏览器支持的不好

3、底层框架支持(Lizard,cQuery)

4、依赖的资源要适应响应式设计(head,侧边栏问题)

5、回归成本加大

6、hybrid中对设备的判断一致性问题(小pad,大分辨率问题)

响应式设计,基本都是依赖css的media query来实现,实现过程大致可以分为如下三个过程:

1) Meta 标签,用于适应屏幕

2) HTML 结构,构建网页布局

3) Media Queries,构建响应式样式

但是,响应式并没有那么简单,它的实现,需要从产品,ued,测试,开发,进行通力的合作,才能设计出优秀的响应式作品。

一、产品

要有响应式的设计理念,这个是自产品开始的,mobile first,响应式的设计边界的界定,伸缩式结构的设计,一致的用户体验要求,一致的界面设计风格,极端分辨率的处理,如果混合了Hybrid开发,还需要保证h5和Hybrid对设备的判断一致性问题,确认native和Hybrid的任务划分,如侧边栏由native实现还是Hybrid实现,全局浮层是交由native处理,还是全权交由Hybrid设计实现,低端浏览器和低端设备的支持情况的决策......

二、UED

Ued的设计要满足响应式的需求,首先要做的是响应式的布局, 无论哪种响应,基础的dom结构必须保持不变,否则将极大的降低响应式的效用,虽然即使完全不同也能实现。

还有响应式图片的设计,响应式的增量css设计,或者是分模块的css设计,背景图片可以使用双倍图,也可以使用image-set,这个需要作出选择,html5响应式图片现在有了srcset, 类似image-set,通常情况下,srcset 里面的资源是具有 fallback 特性的,也就是说第一个图片资源无法加载的时候可以跳过加载后面的备用资源。

三、测试

测试也要抛弃掉原来的那种单独平台的测试思想,现在你面对的是一套代码实现的所有平台的不同响应,从高版本到低版本,从ios到Android到其他平台,从高分辨率到低分辨率,从原生应用到Hybrid应用到html5应用,等等,不同边界之间的资源引用的异同,效果的异同,交互的异同,后端资源响应的异同,要进行的回归工作和可能存在的相互影响的状况,测试都要关心。

四、最后开发

开发人员将面临更多的问题,要实现响应式,项目依赖的外部资源要支持响应式设计,比如响应式的头尾,响应式的侧边栏等,然后非常重要的是你基础框架是否支持响应式,如果不支持你需要为不同的环境响应不同的基础框架,这会大大增加你的代码开发量和代码质量,以及项目的复杂度,需要对环境进行探测,你需要知道低端浏览器对你使用的html5的特性的支持情况,通常你可以使用Modernizr来完成这个工作,当然你还要面临pc上众多浏览器的兼容问题,不过现在已经有一些工具可以很好的辅助你完成这个工作,而你关心的重点仍然应该是你的业务逻辑,当然你还可能面临在Hybrid下某些厂商出品的手机,出厂参数就写的是错误的,这会导致native对手机屏幕的探测不正确而导致与h5规则下对屏幕的计算偏差特别大,当然你可以统一都用html5的规则,或者native加入白名单的方式来处理这个问题。

最后我们来谈谈按需加载

即使以上问题你都处理的非常好,你的响应式设计的性能也许并不高,因为css Media Query自身提供的条件加载资源并非真正的按条件加载资源,实际上,他会把所有的响应式资源都下载到本地,然后根据Media Query进行判断,到底哪一种响应是符合当前Media Query判断条件的,这会引起极大的带宽浪费,而且非常影响加载速度和用户体验,而我们非常需要的是真正的按条件加载资源,按需加载。要说清楚这个问题,先看一张UML图:

首先,根据产品需求,我们划分了响应式的边界,大致可以分为手机版,pad版,和pc版,当然这个维度可以根据需要划分,你想怎么分就怎么分,当然得符合你的需求。

在页面开始运行的时候,我们通过一个devEnv()函数来获取当前匹配的环境,由于产品要求一套代码既要在h5环境运行,还要在Hybrid下运行,所以在这个函数内部就需要根据navigator.userAgent来进行第一次判别,在判别出Hybrid还是h5大环境之后,就需要针对性的判别目前环境适用于手机版,pad版还是pc版了。当然这个判断也可以后移到服务端,由服务端配合来实现响应式,这个系统的复杂度就会很高,可以实现,但是并不一定好用。而再环境判别的时候,你也许需要用到,window.matchMedia. 这实际上Media query的js版本。

然后,你需要在编码阶段就定义好,哪些资源是要在h5中加载,哪些在pad中加载,哪些在pc上加载,哪些是共用部分,无论哪个环境都需要加载,并结合打包工具如grunt进行打包和压缩,并将这些资源配置到你的页面。

最后,在html环境下,你要run一个核心函数fnMediaQuery,他将根据你设定好的配置,和触发条件,真正的下载与环境对应的资源,而非当前环境下的资源则不会加载, 从而实现按需加载,按需执行,而在Hybrid环境下,由于一些现实原因,如部分功能在手机上使用native,而在pad上使用Hybrid开发,造成环境判断依赖于native的判断给定,从而走出另外的分支,响应式也进行了很好的处理,但是最好的方式还是统一一个功能的实现,避免出现这种环境判断的依赖,导致逻辑负责度提高,而且渲染效率相应的会受到一些影响。

响应式的实现,后期应该还会进化,最好的结果就是浏览器集成实现资源的按需加载,并且对性能的提升上面做更进一步的优化,我相信响应式带给客户的是优秀的用户体验,而带给企业的将是成本的大幅降低,并保持产品的一致性和提高产品对新平台,新设备的适应性。

原文发布于微信公众号 - 携程技术中心(ctriptech)

原文发表时间:2015-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

临阵磨枪,血拼季网站优化的最后三板斧

血拼季临近,零售商们需要提升Web性能以满足高峰期的需求。本文提出三个优化建议,包括图像优化等,旨在帮助大家化解黑五的性能难题。 美国的节日购物季即将在感恩节后...

1948
来自专栏云加头条

简约而不简单——大众点评+小程序开发经验谈

大众点评工程师作为特邀用户,大众点评早在小程序内测阶段就开始了产品的设计和研发,「大众点评+」也理所当然成为 1 月 9 号小程序上线后的首批应用之一,并在上线...

4.6K3
来自专栏互联网数据官iCDO

对于Tableau这个工具,美国人自己怎么看

美国拥有悠久历史的知名计算机杂志,对Tableau这个知名的自助BI工具做了较为客观的评价。如下文。 自助型商业智能(BI)工具Tableau Desktop(...

4573
来自专栏idba

提问的那些事儿

工作7年了,接触了很多开发和其他岗位的同事 ,遇到各种各样的问题。求助过他人也帮别人解决过问题,在解决问题的过程中,合理的提问方式等于事半功倍,提出问题的同...

1021
来自专栏数据库

DaaS,聊聊关于数据库你可能想知道的一些事儿

作为一名程序猿,如今“大数据”, “AI”,这些词每天都会被媒体360度无死角轰炸我们,让我们很容易浮躁焦虑,但不得不承认,真是因为媒体的传播与吹捧,才推动了整...

1877
来自专栏沃趣科技

基于Oracle的私有云架构探析(连载一)@【DTCC干货分享】

云是当今最为热门的一个话题或者说技术,在数据库界也一样,Oracle 12G这个名字不硬生生被掰弯成了Oracle 12C,数据库云在我看来能给企业带来的第一价...

4475
来自专栏phodal

从2016年11月期《技术雷达》看前端的未来

本文仅代表 Phodal 的个人观点,来听听一个前端程序员的 YY。 新一期的ThoughtWorks技术雷达有点出乎意料,使用new标签的框架、工具、技术、语...

20810
来自专栏IT大咖说

VMware云管平台运维管理

摘要 跨 SDDC 和多云环境从应用到基础架构的智能 IT 运维管理。与 vRealize Log Insight 和 vRealize Business fo...

8055
来自专栏葡萄城控件技术团队

只用最适合的!全面对比主流 .NET 报表控件

随着 .NET 平台的出现,报表相关的开发控件随着而来,已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件:水晶...

2120
来自专栏Crossin的编程教室

爬虫+网站开发实例:电影票比价网

时常有同学会问我类似的问题:我已经学完了 Python 基础,也照着例子写过一点爬虫代码 / 了解过 django 的入门项目 / 看过数据分析的教程……然后就...

4205

扫码关注云+社区