Mobile Web App checklist

目标: 高性能Mobile Web App

一、UX和UI

  • 操作节目与边框之间留空隙:

防止操作过程中,触发系统缺省行为,有些是无法disable的。 如: 向下划过上边框会触发系统状态信息,

  • 清除 300ms的click延时(从用户click到发出event之间有300ms延时)

Android4.4+已经清除了, 但是IOS还没有(可以用fastClick)。

FastClick检测到touchend之后,马上发出event

  • 让top bar真正固定, 不要被弹出的软键盘顶出去(IOS 8已经解决了问题)

** 用absolute容器分别裹住内容和top bar, 作为sibling,并且令内容overflow scroll.

这样, scroll的不是body, 而是内容的div。

副作用:

** 双击页面, 不在scroll到页面顶部

** back回来的时候,页面scroll的位置丢失了, 补救措施, 给内容div添加下面样式:

-webkit-overflow-scrolling: touch;

overflow: scroll

  • 禁止overscroll (i.e. 划过底线和顶边)

在cordova/phonegap的 xml config中添加:

<preference name="DisallowOverscroll" value="true" />

或者参考下面的JS

https://github.com/luster-io/prevent-overscroll/blob/master/index.html

  • 阻止copy,paste菜单出现,

在IOS上,给不应该被选中的元素添加样式:

user-select: none;

-{prefix}-user-select: none;

-webkit-touch-callout: none;

在android上

if(navigator.userAgent.match(/Android/i))

noContextMenu.addEventListener('contextmenu', function (e) { e.preventDefault() })

  • 亮显的元素颜色美化,

例如:替换系统缺省的灰色为green

* {

-webkit-tap-highlight-color: rgba(0,0,0,0);

}

button:active {

color: green;

}

  • 如果此web App已经被添加到homepage, 就可以消除浏览器的底部和底部菜单

<!-- android -->

<meta name="mobile-web-app-capable" content="yes">

<!-- iOS -->

<meta name="apple-mobile-web-app-capable" content="yes">

<meta name="apple-mobile-web-app-status-bar-style" content="translucent-black">

<meta name="apple-mobile-web-app-title" content="My App">

并禁止顶部菜单再被触发:

document.addEventListener('touchmove', function(e){

e.preventDefault();

}

document.addEventListener('gesturestart', function (e) {

e.preventDefault();

});

  • 少用display: none, 以避免重绘带来的闪烁;

用opacity:0, 或者,用translate3d(-9999px, 0, 0)移出屏幕.

  • 不要自己写scroll,不会比浏览器的scroll更smooth, 它有native的支持
  • 禁止用户缩放

<meta name="viewport" content="width=device-width,height=device-height,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">

  • 测试back, forward按钮, 不要简单地禁止它
  • 打开IE的 CleratType,让字体更好看一点

二、Performance优化

  • 从Day 1就重视, 避免太慢无法优化
  • 提高速度的核心是避免重绘和重排版,常见的措施如下:

    • Opacity和transform之外的参数动画慎用, 它导致重绘和重排版
    • 用GPU加快绘制速度:通过添加下面的属性
      • transform: translateZ , 或者
      • will-change: transform
      • will-change: opacity.
      • 禁止用jQuery的animate 或fade,而用纯CSS动画,Velocityjs或 Impulse,因为:
        • JQuery使用setInterval而不是 requestAnimationFrame驱动动画,
        • JQuery的 css动画功能差.
      • 在Client端, 不要resize图像, 尽可能下载1:1的图像。因为:
        • 浏览器中存储resize的image的空间非常小, 一旦满了,就会溢出旧的,从而导致反复地计算,页面上出现空白区域, 或者scroll变得不流畅。
      • 先完成绘制, 再动画
        • 将动画完全包裹在requestAnimationFrame里面, 因为它是在paint完成之后,才调用的。
  • 不要在scroll和touch中迫使浏览器重新计算Style,改到requestAnimationFrame中。
    • 如果修改style, 则浏览器马上重新计算Style, 虽然不立即绘制
    • 在mobile上的scroll是用scroll thread处理的,一个完全独立于JS的thread。而这个scroll thread只有等待scroll event处理完成之后才执行(以便于处理 scrollTop, preventDefault()等要求), 所有, 长时间的event处理,将会迟滞scroll。

三、Homescreen

  • 像Native App一样, 在用户的屏幕有个图标?可以直接点开?

<!-- android -->

<link rel="shortcut icon" sizes="196x196" href="icon-196x196.png">

<!-- iOS -->

<link rel="apple-touch-icon" href="touch-icon-iphone.png">

<link rel="apple-touch-icon" sizes="76x76" href="touch-icon-ipad.png">

<link rel="apple-touch-icon" sizes="120x120" href="touch-icon-iphone-retina.png">

<link rel="apple-touch-icon" sizes="152x152" href="touch-icon-ipad-retina.png">

  • 修改homescreen上图标的标题?(IOS)

<meta name="apple-mobile-web-app-title" content="Luster">

  • 有1个splash screen? (IOS)

<link rel="apple-touch-startup-image" href="img/l/splash.png">

离线可用

  • ServiceWorker
  • LocalStorage, indexDB

from: https://web.archive.org/web/20151103001838/http://www.luster.io/blog/9-29-14-mobile-web-checklist.html

Web App Checklist的更多相关文章

  1. Azure 部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你在部署一个网站时,第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core 的网站呢?Azure 的 Web A ...

  2. 如何用Azure Web App Services接入微信公众号

    注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号 如何用Azure Web App Services接入微信公众号 简介 此示例演示如何创建Azu ...

  3. .net core 源码解析-web app是如何启动并接收处理请求(二) kestrel的启动

    上篇讲到.net core web app是如何启动并接受请求的,下面接着探索kestrel server是如何完成此任务的. 1.kestrel server的入口KestrelServer.Sta ...

  4. .net core 源码解析-web app是如何启动并接收处理请求

    最近.net core 1.1也发布了,蹒跚学步的小孩又长高了一些,园子里大家也都非常积极的在学习,闲来无事,扒拔源码,涨涨见识. 先来见识一下web站点是如何启动的,如何接受请求,.net core ...

  5. web app开发技巧总结 (share)

    (转自http://hi.baidu.com/kuntakinte/item/ca92d6e5edae9fc0bbf37d08) 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联 ...

  6. Web APP 之rem的使用

    移动端web app的开发,之前开发直接使用px像素做单位,这样子做对于传统的PC端开发来说,个人比较习惯,但是对于移动端在来,有说逞强.最明显是切图效果与设计师想达到的效果有些差距,比如<he ...

  7. 移动web app开发必备 - 异步队列 Deferred

    背景 移动web app开发,异步代码是时常的事,比如有常见的异步操作: Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理类似) setTimeo ...

  8. 移动web app开发必备 - Deferred 源码分析

    姊妹篇  移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...

  9. web app 自适应方案总结 关键字 弹性布局之rem

    关于rem,主要参考文档 1.腾讯ISUX (http://isux.tencent.com/web-app-rem.html) 2.http://www.w3cplus.com/css3/defin ...

随机推荐

  1. PPT设计灵感功能

    最近老师让我们做PPT,我用的是power point是office365加强版.我发现如果想平常那样直接做的话排版太死板了,不好看.我当时想:管他呢,先做出来再说.刚输完标题,放了几张图片进去右边就 ...

  2. 在数据库中sql查询很快,但在程序中查询较慢的解决方法

    在写java的时候,有一个方法查询速度比其他方法慢很多,但在数据库查询很快,原来是因为程序中使用参数化查询时参数类型错误的原因 select * from TransactionNo, fmis_Ac ...

  3. 第五周作业--测试与版本发布(Alpha版本)

    github传送门:https://github.com/Bubblegod/StardrewValley 一.BUG以及修复 a.修复的BUG: 1.存在着运行环境改变后,资源找不到问题 BUG描述 ...

  4. 认识jmeter

    1.jmeter是什么:Apache Jmeter是Apache组织开发的基于java的压力测试工具. Jmeter可用于对服务器.网络或对象模拟巨大的负载,来自不同压力类别下测试他们的强度和分析整体 ...

  5. Centos下软件包管理

    目录 一.安装软件包的三种方法 二.rpm包介绍 三.rpm工具用法 四.yum工具用法 五.yum搭建本地仓库 六.yum更换国内源 七.yum下载rpm包 八.源码包安装 九.扩展 一.安装软件包 ...

  6. linux——系统内核参数优化

    vim /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 fs.file-max = 999999 net.ipv4.tcp_max_tw_buckets = ...

  7. 黑客炼金术士 Seeker:可以攻破 4G 摸到你短信,还要为朝阳群众提供谍战工具

    在北京上地的一家咖啡馆里,我在等待黑客 Seeker 的到来. 我对黑客 Seeker 颇有期待.他曾在黑客大会 KCon 上演讲<伪基站高级利用技术——彻底攻破短信验证码>,介绍利用 L ...

  8. pthon入门之strip()和split()函数简单区分

    小白,分享记录学习新感悟 路飞的第一次作业写一个登录的程序,作业的升级需求中有个锁文件的需求,大致上如果用户数错了密码三次将用户写到黑名单上,下次登录锁定: ok基本的要求写完,我们上代码 usern ...

  9. contos防爆力破解密码

    最近看了一篇文章ssh的爆力破解所以自己就做了一下防爆力破解denyhost 下载denyhost的软件包并上传的服务器下载地址https://sourceforge.net/projects/den ...

  10. python 查找目录下 文件名中含有某字符串的文件

    有坑的地方: 如果代码写成这样: [( os.path.abspath(x)) for x in os.listdir(startPath) ] 此代码只能用于当前目录下,listdir列出的都只是文 ...