HTML5移动应用开发最容易踩到的几个坑

01/移动应用中HTML5的新特性

  工欲善其事,必先利其器。我比较推崇的学习技术的方式,是先整体了解,然后结合实际需求,再做针对性的学习。整体了解的方式,比较建议是直接看官网的API文档,这里可以推荐几个网站: http://www.w3school.com.cn/html5/index.asp, https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/HTML5, http://www.html5rocks.com, http://caniuse.com/

  其中,特别说明下http://caniuse.com/,通过这个网站,我们可以非常快速的查询到你所想使用的html5的特性在各个浏览器,包括不同终端的浏览器的兼容性情况。

  HTML5 在移动应用开发上面能够利用的特性主要有:

  1. form input type

  

  表单是我们在开发中经常会遇到的,如果按照传统的方式,要介入jquery validate或者自己写正则进行判断,但是其实html5的form表单新增的input type属性,能够快速帮我们实现所需要的功能。

  2. video & audio

  

  移动浏览器是不支持flash的,在一些微信专题活动中,经常会看到嵌入音频,那么audio标签就是比较适合的应用场景,html5中audio提供的api attr还是比较全面的。

  

  视频格式一般有mp4和webm两种格式,在使用的时候,一般建议同时生成两种,根据浏览器兼容性,进行相应的选择。音频audio,一般会同时制作mp3 ogg格式。

  3. storage

  关于web storage,大家可以参考我之前分享的一篇内容:

  http://www.chaichunyan.com/topics/html5-training/5.html5_storage/#/

  重点是localstorage,尤其是我们在做移动应用的性能优化时,localstorage能够发挥很大的作用。

  学习的时候,建议大家带着问题去学习,比方说“localstorage最大的存储容量是多少?”“有没有有效期?”“cookie是有域的概念的,那么localstorage呢?”

  4. css3

  html5其实更多的是一个web标准,这个标准里边,包含了html、Java api、css。css3是我们在移动应用中要重点学习和掌握的。

  1.选择器

  2.自定义字体

  3.多栏布局

  4.文字,容器阴影

  5.圆角

  6.渐变效果

  7.动画 ...

  大家可以通过下面一个例子有一个直观的印象:

  http://www.chaichunyan.com/topics/html5-training/7.css3_summary/demos/index.html

  之前很多我们需要通过js或者切图实现的效果,在移动端,就可以直接通过css3实现。

  这里特别强调下关于布局,css3弹性布局,希望大家能够仔细去了解,我在面试时候,必问的一道题,当然,面试只是手段,更重要的是希望能够学以致用,真正在实际工作中发挥作用。

  flexbox布局的兼容性,弹性盒模型实现的原理,这些我们在做移动终端调试时候,如果只是靠反复试错,那么效率是非常低的。

  了解了html5的特性,开发者就会在移动应用上一展身手了。

  02/HTML5移动应用中踩过的那些坑

  1.布局

  移动浏览器访问的web站点,后面称为mobile webapp哈(泛指移动终端浏览器访问的web站点),能不能使用传统的流式布局?答案是可以,但是要慎用。

  mobile webapp对css3的弹性布局支持还是比较给力的,iOS Safari还好,但是Android的碎片化非常严重,尤其是Android上面各种第三方浏览器会做各种各样的定制化,使用flexbox比float能够减少你在布局调试上的时间,而且兼容性有保证。

  2.图片适配

  这里边要提供一个概念,是屏幕分辨率和物理分辨率,为什么我们使用ios看到的图片清晰度那么高,原因是普通的手机屏幕,一点显示一个像素,但是iphone4s 以后是一个点四个像素。

  那按照320的设计稿切出来的图片,在iphone上面显示肯定是有锯齿的。

  处理方法可以参见我之前分享的一篇文章:图片的适配与清晰度

  http://blog.csdn.net/spring21st/article/details/7513906

  3.字体

  我把字体的处理分为两类,一种是艺术字体、icon,另一种是我们在页面中的字体。

  移动终端对网络的要求是比较高的,我们要尽可能减少网络请求,图片是非常大的网络开销,当然,我们可以用合并图片的方式减少请求数,但是请求量变大了。

  css3支持web fonts,所以,我们可以引入字体文件,而不是所有的字体都是通过切图的方式来实现。对于icon,一种方式是处理,但是现在更常见的做法,是转换成矢量字体。

  这里推荐一个网站:font awesome http://fortawesome.github.io/Font-Awesome/icon/css3/

  这里边涵盖了大部分我们会用到的图标,当然,公司有精力和人力的情况下,建议可以维护自己的矢量字体库。

  4.横竖屏

  我们可以通过css 的media query 判断横竖屏。

  

  但是这种只能控制样式展现,当我们需要监听横竖屏变化的时候,就只能通过js监听window.onorientationchange事件的方式实现。

  

  但是,下面这种情况会让你很无语:

  

  那我们推荐下面这种实现方案:

  

  相比较pc web,mobile webapp的调试更复杂,而且未知的问题更多,遇到问题,我们要有耐心去跟踪定位,就像之前我们遇到iscroll性能问题、fast-click穿透的问题,都是一点一点排查处理的。

  03/混合应用(Hybrid)的注意事项

  现在“快速迭代,敏捷开发,低成本上线“基本上是每家公司都追求的目标,混合应用就是在这种场景下应运而生。

  Hybrid App优点众多,Web前端工程师0成本介入,不依赖版本的实时更新,快速实现跨平台需求,等等。但是,我对混合的看法是,根据实际情况合理使用,因地制宜。

  那么什么样的场景适合混合应用开发?

  1. 快速原型,验证产品功能。我们之前开发过一个app,Android和iOS提供宿主环境,webview展现内容都是通过html5实现的,半个月就开发上线了,较之传统应用开发人员成本和时间成本都缩短很多。

  2. 内容类的应用,比如csdn的app,就是采用hbuilder混合方案实现的,对性能要求没有那么高。

  在考虑hybird的时候,要避免以下几个误区:

  (1)为了HTML 5而Hybrid App

  html5只是技术实现手段而已,要根据公司的实际业务场景,以及人员配比,综合考虑,不能因为react native比较火,就必须要在公司推行这种实现方案,我觉得为技术而技术是不可取的。

  (2)忽略移动应用中的关键因素

  mobile webapp本质上还是基于PC的一种开发模式,开发者使用PC浏览器模拟App中的webview进行调试。PC浏览器与手机webview的区别是巨大的,包括能支配的CPU资源,最大占有的内存,运行的网络环境,click和touch事件的区别,浏览器对CSS/JS的解析和对事件处理等等。

  app工程师考虑比较多的内存的问题,这些在web开发时候是很少考虑的。另外,就是网络环境方面,虽然现在3g、4g覆盖率越来越高,但是移动终端的访问和pc还是有很大差距,wifi和蜂窝网络的切换,基站变化等诸多因素都会导致网络间歇性断开,web开发对于这种不稳定网络环境问题的处理上都有所欠缺。

  (3)交互体验一致性

  ios和Android的交互设计是两套规范,虽然有相似的地方,但是从操作习惯上,就已经决定了,我们想用一套交互设计,适配两个平台是很难的,包括包括视觉风格,界面切换,操作习惯等。

  Hybrid App方案是一把双刃剑,一方面它平衡了Native App和Web页面的优缺点,一定程度上解决了Native App开发过程中迭代慢,版本依赖,Native开发资源不足的问题,但另一个方面过度依赖Hybrid方案会造成Web前端开发成本快速上升,甚至造成App整体体验下降,甚至造成功能缺失。

  回到最开始那句话”不要为了Hybrid而Hybrid“,根据实际场景,控制好方案中native和web的边界。

  04/ Q&A

  Q1:关于响应式开发中对于手机屏幕高度的解决有没有什么好的解决方案?

  响应式开发本质上是移动设计优先的一种开发方式,我没太明白对于手机屏幕高度的解决,具体的问题是什么样的,原则上高度是不需要做处理的,除非是你对首屏有要求。关于响应式开发,可以看看我这篇文章http://www.chaichunyan.com/index.php/2016/03/03/html5-wrd/

  Q2:对首屏有要求的情况, 除了判断高度还有没有其他好的解决方案?如果是flex布局可以解决这个问题吗?

  问题的根本是获取首屏的高度,(1)如果你是后端渲染的话,可以获取机型和浏览器版本,拿到屏幕分辨率做适配 (2)根据屏幕宽度做适配,但是做不到完全绝对的首屏自适应,如果有更好的方案,我再跟大家分享。

  Q3:hybrid开发中,h5页面太多的话,会不会影响ios发布?

  之前有ios对phonegap这种跨平台的应用审核是不通过,不过现在放开这个限制了。h5页面过多,会影响应用的性能和体验,建议可以把h5打包放到ipk里边,但是要做好静态资源的版本管理。

  Q4:css3 弹性布局中, 由于android碎片化严重的问题, 能不能有好的案例指导? 我们要求支持到android4以上版本。

  真的要善用文档和工具, http://caniuse.com/#search=flex, 我分享时候提到的这个网站,明确说明了flex兼容性。

  如果是Android4.4以上机型,基本上可以放心使用,注意的地方有两个:1. 要记得写各个浏览器的css前缀 2. flex里边可以嵌套flex.

  Q5:hybird开发过程中, 原生代码登录权限问题,h5部分的页面,如何共享登录相关信息?

  这要看你实现的方案,(1)嵌套静态的h5页面,那么需要native打开webview的时候,使用js briage调用页面js的方法,写入用户信息,实现登录共享 (2)如果打开的是动态渲染的页面(如php输出的页面),那么可以在请求的url中携带用户token,php通过query string判断验证,这个是native和webview数据交互的问题。

  Q6:h5动画在部分安卓webview中有时候会出现卡顿,这种情况改怎么优化呢?

  1. 可以做简单的测试,看看浏览器支持的情况,如果浏览器支持不够好,那么可能要做降级处理。

  2. 减少动画效果,因为动画是要使用gpu渲染的,原生app能够流畅,很大程度上是直接调用硬件处理的。

  优化的方案我这边基本上是降级处理,Android低版本不支持的话,就使用基本动画,比方不会使用3D翻转。因为h5毕竟受限于webview环境,像jquery 和 zepto都提供对机型和浏览器的判断。

  Q7:在移动端浏览器上能支持h5离线存储的性能吗?

  No problem.我们在实际项目中,优化前端性能,曾经用localstorage做静态资源的版本管理和存储。

时间: 2024-10-01 10:24:21

HTML5移动应用开发最容易踩到的几个坑的相关文章

Html5 Egret游戏开发 成语大挑战(一)开篇

最近接触了Egret白鹭引擎,感觉非常好用,提供了各种各样的开发工具让开发者和设计者更加便捷,并且基于typescript语言开发省去了很多学习成本,对于我们这种掉微软坑许久的童鞋来说,确实很有吸引力,在开发中最浪费时间就是设计和调试的阶段,js的语言过于自由,自由到有时候写错了都不知道,但typescript可以使用开发IDE帮助排错和调试,不得不说确实很有效率,在这之前,我在egret论坛里发了几个小游戏做练手,最近的一个<疯狂猜歌名>在素材齐备的情况下,仅用了不到1天的时间完成了开发,以

HTML5物理游戏开发 - 越野山地自行车(三)粉碎自行车

自上一章发布到现在已时隔四月,实在对不住大家,让大家久等了~话说不是我不关注我的博客,而是事情一多起来写博客的时间就少了.待到今日有空了,回头看了看自己以前写的文章,猛得发现已经四个月不曾写文章了,便只得叫声:"苦也~",我害怕本系列文章会拖得更久,于是立刻提笔,也好为本系列文章留个凤尾. 首先,大家来温习一下前面两篇里的内容吧: HTML5物理游戏开发 - 越野山地自行车(二)创建一辆可操控的自行车 http://blog.csdn.net/yorhomwang/article/de

Html5 移动游戏开发

有很多游戏采用H5技术开发,比如三国来了.巴哈姆特之怒.切绳子等.我们公司也有多款游戏用H5开发,H5开发成本低,效率高,方便做自动更新,可移植性好.受益于H5技术,我们公司的很多产品都很方便跨平台. 早在2012年,我就很荣幸负责技术攻关,把我们的游戏移植到win8和wp8平台,当时在国内的win8和wp8平台是领先的.我们的一款游戏,跨ios.android.win8.wp8和黑莓10五大移动平台,这在国内肯定是唯一的吧? <Infinity Lands>喜获黑莓优秀大奖 也得益于在win

HTML5移动应用开发为什么需要引入前端工程化

使用HTML5和Javascript开发的移动应用,和典型的现代Web前端项目一样,有着大量的Javascript,HTML和CSS代码,因此前端工程化在HTML5移动应用开发中同样有着重要意义,可以避免大量重复性的工作,提供效率和质量,优化产品的性能. 目前前端工程化比较通用的框架主要有国外的grunt,gulp,百度的F.I.S等,这些框架基本上都是基于Node.js实现的(百度的F.I.S最早是基于PHP开发的,后来切换到Node.js).Node.js对前端工程师有着非常强的亲和力,有各

html5开发手机打电话发短信功能,html5的高级开发,html5开发大全,html手机电话短信功能详解

在很多的手机网站上,有打电话和发短信的功能,对于这些功能是如何实现的呢.其实不难,今天我们就用html5来实现他们.简单的让你大开眼界. HTML5 很容易写,但创建网页时,您经常需要重复做同样的任务,如创建表单.在这...有 HTML5 启动模板.空白图片.打电话和发短信.自动完成等等,帮助你提高开发效率的同时,还带来了更炫的功能.好了,我们今天就来做一做看看效果吧!! 看代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitio

iOS开发-OpenGLES 入门踩坑

Flat coloring(单色) 是通知OpenGL使用单一的颜色来渲染,OpenGL将一直使用指定的颜色来渲染直到你指定其它的颜色. 指定颜色的方法为 public abstract void glColor4f(float red, float green, float blue, float alpha). 缺省的red,green,blue为1,代表白色. Smooth coloring (平滑颜色过渡) 当给每个顶点定义一个颜色时,OpenGL自动为不同顶点颜色之间生成中间过渡颜色(

学习html5 app项目开发

这周因为部门接了个小的html5 app case,所以从事android开发的我就接下了这个项目.与其说是项目需要,其实更大部分是我自己想要做html5 app,因为我对这个全新的平台已经好奇很久了.蠢蠢欲动很久了,只不过之前没有碰到项目练手而已. 好了,让我们开始这篇博文的主要内容吧.说到html5相信大家都不陌生了,的确这个概念已经在国内火了一段时间,但是大家对于html5具体能够干什么,到底在什么地方我应该使用html5呢?然后html5相较之前的版本又多了什么呢?且听我慢慢到来吧,首先

[转载]HTML5游戏前端开发秘籍

http://isux.tencent.com/html5-game-development-cheats.html 转载至腾讯ISUX HTML5游戏前端开发秘籍 本文由米随随编写 QQ空间Android版4.2和4.5上线的玩吧游戏“空间疯狂套牛”是一款使用HTML5开发出的手机游戏,虽然还有很多不足,但其中使用的一些技术与技巧还是很有必要为大家分享出来,方便大家用秘籍打通各种关卡创造出更多更好的HTML5游戏.(本秘籍主要讲述使用HTML + CSS技术方面) 一.自适应 Android手

phonegap开发app中踩过的那些坑

把遇到的问题列出来,如果有解决方案的,偶也会写下来,如果大家有更好解决方法的,欢迎留言噢 phonegap 2.9无法触发deviceready事件 亲们可以看下控制台有木有报错,如果有提示cordova_plugins.json 404 (Not Found) ,就在www目录下新建个空文件,命名为cordova_plugins.json就好了,cordova初始化的时候会请求这个文件,但po主还没发现这个文件有啥用,但是没有这个文件的话,cordova初始化失败,自然不会触发devicere