美文网首页
从pc前端开发迁移到mobile

从pc前端开发迁移到mobile

作者: 一醉js | 来源:发表于2016-07-19 17:51 被阅读0次

    从pc前端开发迁移到mobile

    这篇文章特别适用于有一定pc前端开发经验,想要学习或了解移动端(mobile)的前端开发的同学来阅读。全文将分门别类来讲述移动端前端开发与pc端的不同之处。

    mobile前端开发主要特点

    OPOA

    mobile端OPOA(单页应用,有时也称SPA)的比例比PC端要大,主要有这样一些原因:

    在生产环境,浏览器对高级API、html5、es5支持较好

    OPOA通常与SEO是一对天敌,而移动端搜索引擎的地位较弱,SEO没有那么重要

    这些网页有时需要内嵌到app中,app中做页面跳转比较复杂和耗能、耗时间,不如所有功能在一个页面内完成

    另外,mobile端优化到一定程度还关注模板在服务器端渲染还是在客户端端渲染。

    性能弱

    移动设备相对pc,计算能力、内存都比较弱。应该避免复杂的组件和大量的DOM写入操作;对于大量的数据计算操作,应该在服务器端完成或交给异步的Worker接口计算。

    流量敏感、高延迟

    在移动端每个文件、请求的大小都需要考虑,因为很多用户需要为每一kb的流量付费,并且为此付出等待加载的时间。

    在每个请求里,不同的网络环境下有着不同的网络延迟,4G网络的延迟大概是20ms,3G网络的延迟大概是100ms,所以减少请求数的优化,比在PC上收益更大。

    但也不要极端地追求减少连接数,合理的并行下载、多域名、CDN等,对加载文件的优化同样适用和需要考虑。

    生产环境支持高级API

    大多数情况下,在生产环境你可以放心地使用html5、es5的高级API,而不用像pc上那样考虑IE678不支持的问题。

    小屏幕和支持触摸手势

    所以交互方面通常与pc设计得不同,通常会把pc上一个页面完成的事情拆分成多个“页面”,并且会绑定很多触摸手势是操作。

    meta viewport标签

    移动端第一个要贴的代码就是这个viewport。每一个适用于移动端的网页,在head内部都有它,只是可能配置有所不同。

    下面我们来看看每个属性具体的作用

    有和无meta viewport标签

    用这两个链接来对比一下,请用手机打开

    在无meta viewport标签时,一般手机浏览器会将视口宽度设为大约980像素来呈现

    width属性

    在上一个例子中,有meta viewport标签时,我们将width属性设置为了device-width,它还可以设置为别的值,用手机打开下面这些链接对比一下(注意下面这些表现还有一个大前提是initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,这些属性将在下面再讲述)

    width=device-width

    width=600

    width=200,或某个很小的数值

    分别说一下它们的效果:

    width=device-width的和上面有的链接和效果是一样的,即自动取当前设备商推荐的宽度作为视口的宽度

    width=600,设备的宽度将被设为600px

    width=200,或某个很小的数值,这里是为了说明,如果设置的width值小于当前设备商推荐的宽度,会被无视掉,此时width实际的值和width=device-width时是一样的,效果也是一样的

    initial-scale | minimum-scale | maximum-scale

    这三个属性定义初始时的缩放比例、最小缩放比例和最大缩放比例。便于表述,我们假设设置了width=device-width

    我们在前面一直将他们设置成了1.0,这是一种常用的设置方法。在这种设置下,retina设备(window.devicePixelRatio === 2的设备)的4个硬件像素点将对应一个css像素点(长宽方向各为2:1)(这里牵涉到的硬件像素和css像素的概念,后面将会讲到)。举个例子:iPhone5的css像素将为320

    alert(document.documentElement.getBoundingClientRect().width)// 320alert(window.innerWidth)// 320

    另一种比较常用的设置方法是initial-scale=0.5,minimum-scale=0.5,maximum-scale=0.5,此时retina设备上1物理像素即为1css像素,常用在需要实现1物理像素的边线的情况下。可以拿retina屏幕的手机打开这个页面看看效果,并且与将它们都设为1时比对

    硬件像素与css像素

    硬件像素与css像素与上一节强相关,我们现在来看看它

    硬件像素

    又称为物理像素,只于设备相关

    css像素

    在设备的硬件像素确定后,css像素与你设置的viewport相关:

    设置为device-width时,有这样一个等式:

    css像素=硬件像素/devicePixelRatio/当前scale

    只有iPhone plus是一个例外,我们称为“缩减像素”,有兴趣的同学可以看这张图,这里就不详细展开了

    当设置为具体数值时

    设置值大于等于当前设备商推荐的宽度值时 css像素=设置数值,与scale无关

    何时要按硬件像素计算?和何时要用css像素?

    对于编写代码和用css构成的各种展现,使用css像素

    对于任何原始图片的大小和切图时,若不考虑文件大小,则使用硬件像素

    图片的处理

    根据物理像素

    理想情况下,使用与硬件像素1:1的图片是效果最好的。用retina的手机看看这个页面上的效果

    保持长宽比的背景图

    可以使用这个技巧来让背景图保持长宽比示例。它的中心思想是:

    将padding-top\padding-bottom设置为百分比值时,这个百分比是宽度的百分比而不是高度的,由此撑高DOM元素

    使用background-size: 100% 100%;将背景图平铺在整个DOM的区域内

    为什么要使用背景图而不直接使用

    呢?答案请移步这里

    srcset

    让浏览器自动选择适合的图片示例,有兴趣的同学可以自己找一些相关资料,这里不展开详细描述

    布局

    这部分@思霏同学后续会详细介绍和文章,这里简单过一下

    弹性盒模型布局

    语法:父元素:display:box / flex;子元素:box-flex:1 / 2 / 3

    两个例子:webkit-box/1webkit-box/2

    rem布局

    需要与屏幕大小联动的元素,使用rem单位,不同屏幕时只需设置对应rem值即可,可以移步这个开源项目

    思霏同学还基于这个项目开发了一个计算rem的工具,地址稍后更新上来

    百分比布局

    经典实用的方式,pc端流式布局也常用到

    click延迟

    在手持设备的浏览器上,由于两次连续“轻触”是“放大”的操作(即使你两次轻触的是一个链接或一个有click事件监听器的元素),所以在第一次被“轻触”后,浏览器需要先等一段时间,看看有没有所谓的“连续的第二次轻触”。如果有,则进行“放大”操作。没有,才敢放心地认为用户不是要放大,而是需要“click”至此才敢触发click事件,导致“短按(手指接触屏幕到离开屏幕的时间比较短)”的click事件通常约会延迟300ms左右。

    我们通常有一些方式来规避掉这个问题,这部分@麦梓同学后续会有详细介绍,这里简单过一下

    touchstart、touchend简单代替

    使用zepto的tap事件代替对比:原生click与zepto-tap

    使用fastclick对比:原生click与fastclick

    交互方式

    一般将按钮高度40css像素以上(width为device-width,各scale为1.0,其它情况需要对应换算)才能方便用户点击

    点击和长按(tap & long tap)

    swipe | pinch | gesture 这部分@金台同学后续会有详细介绍和文章,这里简单过一下

    为不同的输入框弹起不同的虚拟键盘:keyboard

    给用户及时反馈

    比PC更需要更用户及时反馈的原因

    没有实体按键

    异步请求响应、本地耗能操作响应更慢

    常用方式

    菊花图

    遮罩

    disabled 按钮

    *震动

    远程真机调试方法

    不论模拟器有多么强大,我们有时还是需要拿真实的手机来调试,这篇文章介绍了绝大部分远程真机调试方法

    相关文章

      网友评论

          本文标题:从pc前端开发迁移到mobile

          本文链接:https://www.haomeiwen.com/subject/coomjttx.html