Web App Checklist
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
Web App Checklist的更多相关文章
- Azure 部署 Asp.NET Core Web App
在云计算大行其道的时代,当你在部署一个网站时,第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core 的网站呢?Azure 的 Web A ...
- 如何用Azure Web App Services接入微信公众号
注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号 如何用Azure Web App Services接入微信公众号 简介 此示例演示如何创建Azu ...
- .net core 源码解析-web app是如何启动并接收处理请求(二) kestrel的启动
上篇讲到.net core web app是如何启动并接受请求的,下面接着探索kestrel server是如何完成此任务的. 1.kestrel server的入口KestrelServer.Sta ...
- .net core 源码解析-web app是如何启动并接收处理请求
最近.net core 1.1也发布了,蹒跚学步的小孩又长高了一些,园子里大家也都非常积极的在学习,闲来无事,扒拔源码,涨涨见识. 先来见识一下web站点是如何启动的,如何接受请求,.net core ...
- web app开发技巧总结 (share)
(转自http://hi.baidu.com/kuntakinte/item/ca92d6e5edae9fc0bbf37d08) 自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联 ...
- Web APP 之rem的使用
移动端web app的开发,之前开发直接使用px像素做单位,这样子做对于传统的PC端开发来说,个人比较习惯,但是对于移动端在来,有说逞强.最明显是切图效果与设计师想达到的效果有些差距,比如<he ...
- 移动web app开发必备 - 异步队列 Deferred
背景 移动web app开发,异步代码是时常的事,比如有常见的异步操作: Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理类似) setTimeo ...
- 移动web app开发必备 - Deferred 源码分析
姊妹篇 移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...
- web app 自适应方案总结 关键字 弹性布局之rem
关于rem,主要参考文档 1.腾讯ISUX (http://isux.tencent.com/web-app-rem.html) 2.http://www.w3cplus.com/css3/defin ...
随机推荐
- 企业面试题:Buffer与cache的区别?
buffer缓冲 cache是缓存. 写缓冲,读缓存.简单点说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的.缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行 ...
- jq demo 轮播图,图片可调用,向左,自动+鼠标点击切换
<!doctype html> <html> <head> <meta http-equiv="Content-Type" content ...
- 北大poj- 1032
Parliament Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18707 Accepted: 7941 Descr ...
- 3.oracle与mysql的区别
1.自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的 ...
- Erlang-接口技术
系统的构建一定会设计到简历接口,让他与不同的语言的应用程序之间简历系统的联系.这就叫做erlang的接口技术. 接口技术的三种实现方法: 1.让程序以外部操作系统进行的形式在Erlang虚拟机以外运行 ...
- less的入门教程
CSS的短板 作为前端学习者的我们 或多或少都要学些 CSS ,它作为前端开发的三大基石之一,时刻引领着 Web 的发展潮向. 而 CSS 作为一门标记性语言,可能 给初学者第一印象 就是简单易懂,毫 ...
- c——动态数组
动态数组的实现 #include<stdio.h> #include<stdlib.h> int main(){ int i,n,*a; scanf("%d" ...
- SQL-存储过程-010
什么是存储过程? 可以理解为数据库中的方法,与C#中的方法一样,具有参数和返回值: 存储过程的优点? 提高运行速度:存储过程在创造是进行编译,以后运行存储过程都不需要再进行编译,极大化的提高了数据库的 ...
- 2018.4.27 java容器
一.容器的概念 在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体 二.容器与数组的关系 之所以需要 ...
- 启动Kernel提示Bad Data CRC
如上图,我明明将uImage正确写入到里nandflash里面,但启动但时候就是提示bad CRC. 后来我手动执行nand read kernel想看看是不是环境变量里面的命令执行有问题,意外但被我 ...