简介

本文重点关注如何充分利用HTML5和CSS让web app运行更加流畅.

Tip 1: 使用web storage代替cookie

cookie最大的缺陷是在每一次HTTP请求中都会携带所有符合规则的cookie数据.这会增加请求响应时间,特别是XHR请求. 在HTML5中使用sessionStorage和localStorage代替cookie是更好的做法.

这另种方法可以将数据永久或者以session时间存储在用户本地.数据不会随着HTTP请求传递.所以我们优先使用web storage,仅仅使用cookie作为替代方案.// if localStorage is present, use that

if (('localStorage' in window) && window.localStorage !== null) {

// easy object property API

localStorage.wishlist = '["unicorn", "Narwhal", "deathbear"]';

} else {

// without sessionStorage we'll have to use a far-future cookie

// with document.cookie's awkward API

var date = new Date();

date.setTime(date.getTime() (365 * 24 * 60 * 60 * 1000));

var expires = date.toGMTString();

var cookiestr = 'wishlist=["unicorn", "Narwhal", "deathbear"];'

' expires=' expires '; path=/';

document.cookie = cookiestr;

}

Tip 2: 使用CSS Transition代替JavaScript动画

CSS Transition能带来更高的性能,更少的代码,更容易维护和理解.

Tip 3: 使用客户端数据库代替服务器请求

Web SQL Database和IndexedDB让浏览器有了数据库存储能力.很多应用场景可以迁移到客户端数据库以减少服务器的请求次数.

localStorage和sessionStorage在简单数据存储时比客户端数据库更快,可以用来实现一些简单的状态,进度保存.

当一个组件需要管理上百条数据(如好友列表),同时支持用户搜索, 过滤, 排序时, 客户端数据库存储一份数据可以有效减少HTTP请求次数. 查看Web SQL Database tutorial获取详细指导.

Tip 4: 使用JavaScript原生API

随着更高版本JavaScript的普及, 像Array prototype新增了很多API都可以在大多数浏览器中直接使用.例如:// give me a new array of all values multiplied by 10

[5, 6, 7, 8, 900].map(function (value) {

return value * 10;

});

// [50, 60, 70, 80, 9000]

// create links to specs and drop them into #links.

var linksList = document.querySelector('#links');

var links = [];

['html5', 'css3', 'webgl'].forEach(function (value) {

links.push(value.link('http://google.com/search?btnI=1&q=' value ' spec'));

});

linksList.innerHTML = links.join('');

// return a new array of all mathematical constants under 2

[3.14, 2.718, 1.618].filter(function (number) {

return number < 2;

});

// you can also use these extras on other collections link nodeLists

[].forEach.call(document.querySelectorAll('section[data-bucket]'),

function (elem, i) {

localStorage['bucket' i] = elem.getAttribute('data-bucket');

});

通常情况下这些原生方法比手动编写循环要快:for (var i = 0, len = arr.length; i < len; i) {

}

使用原生JSON.parse()比json2.js更加高效,安全.

原生的String.prototype.trim也是一个很好的例子, 这些功能不是HTML5中的,也应该得到广泛的应用.

Tip 5: 不仅仅为离线app使用cache manifest,在线网站网站也可以适当使用

后台管理系统这样的站点使用缓存可以极大提高性能.

cache manifest比设置Expires有一些优势:明确地声明需要缓存的文件,浏览器可以进行优化,可能在你使用之前就已经提前下载到本地了.

可以将页面基本结构看做模板, 显示的内容随着数据变化, 将可模板化的HTML结构通过cache.manifest进行缓存, 从服务器端获取JSON数据之后更新内容.

查看application cache tutorial获取详细指导.

Tip 6: enable硬件加速来增强视觉体验

某些浏览器可能使用GPU加速让高速动画更加平滑.Firefox Minefield, IE9, Safari已经宣称实现了硬件加速. Chromium也增加了window平台的3D transform加速.各个浏览器对硬件加速的支持肯定会越来越好.

在支持并启动了硬件加速的情况下, 动画, rotation, scaling, opacity肯定会更加平滑. 所有实际操作都发生在GPU而不需要内容的重绘. 然而需要注意的是,任何影响页面布局的操作都会降低速度.

Tip 7: 使用web worker执行需要大量CPU资源的操作

web worker有两个好处: 1) 快速 2) 不阻塞浏览器响应. 点击web worker slide查看更多信息.

web worker的一些可能的使用场景:长文本格式化

语法高亮

图片处理

图片合成

大数组处理

Tip 8: HTML5 表单属性和input类型

HTML5增加了一系列input type,包括search, tel, url, email, datetime, date, month, week, time, number, range, color等. 在支持这些功能的浏览器中使用原生功能, js插件作为补充.

像placeholder, required, pattern都能极大提高页面的可用性,和性能.

点击HTML5 form 资料查看更多信息.

Tip 9: 使用CSS3减少图片的使用

减少图片能减少HTTP请求,同时减少页面大小,更容易维护,常用的属性如下:linear and radial gradients

border-radius

box-shadow

rgba

transform

css mask

常见的使用场景有: polished buttons via gradients, replicate many other effects

Tip 10: 使用WebSocket代替XHR提供更快交互和更少的带宽

WebSockets是为了Comet而设计的. 使用它实现Comet比XHR确实带来更多的好处.

原文链接: http://www.html5rocks.com/en/tutorials/speed/quick/

html5 app list,让web app更快的HTML5最佳实践相关推荐

  1. 原生APP与移动Web App的比较

    中国手机网民已超4.5亿,智能机用户超过3.8亿,中国移动互联网市场产值已超过712.5亿元,手机营销是未来必然趋势,而App恰恰是这个趋势下的一个强有力的营销工具: App已有两个主要的方向:原生A ...

  2. 原生APP开发与WEB APP开发的区别

    APP开发模式通常分为Web APP与Native APP原生模式两种,这两种模式均各自有自己的优势,到底是采用Native App开发还是采用Web App开发一直是业界争论的焦点,但是随着HTML ...

  3. 原生APP 与 移动 Web APP 有什么区别呢?

    以下就用一张表来告诉大家,原生APP与 移动 Web APP的不同吧. 原生APP与 移动 Web APP各有各的优势与劣势,请根据实际需求开发合适的APP! 原生APP 与 移动 Web APP 的 ...

  4. web系统 手机app 能访问吗?_成都APP开发:原生APP开发与Web APP开发有什么区别呢?...

    智能手机上的APP应用软件对于人们来说已经成为日常工作生活当中必不可少的工具,无论是工作生活中的聊天交流,购物,饮食,出行,娱乐都会有相应的APP软件.目前常见的APP软件开发模式有两种,一种是原生A ...

  5. 原生开发什么意思_成都APP开发:原生APP开发与Web APP开发有什么区别呢?

    智能手机上的APP应用软件对于人们来说已经成为日常工作生活当中必不可少的工具,无论是工作生活中的聊天交流,购物,饮食,出行,娱乐都会有相应的APP软件.目前常见的APP软件开发模式有两种,一种是原生A ...

  6. 计算机毕业设计Python+uniapp+安卓电影院售票管理APP论文(WEB+APP+LW)

    计算机毕业设计Python+uniapp+安卓电影院售票管理APP论文(WEB+APP+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区 ...

  7. wifi分析仪怎么看哪个信道好_无线路由器选择哪个信道上网更快以获得最佳WIFI体验...

    本帖最后由 qq6199380 于 2015-3-19 13:54 编辑 如果你对家中无线路由器的设置过程有所了解,那么你一定曾经见到过"信道"这个词.其实大多数无线路由器的信道都 ...

  8. 在ASP.NET Web API中返回错误的最佳实践

    本文翻译自:Best practice to return errors in ASP.NET Web API I have concerns on the way that we returns e ...

  9. ThinkCMF是一款支持Swoole的开源内容管理框架,基于ThinkPHP开发,同时支持PHP-FPM和Swoole双模式,让WEB开发更快!

    简介: ThinkCMF5.1主要特性 更改框架协议为MIT,让你更自由地飞 基于ThinkPHP 5.1重构,但核心代码兼容5.0版本,保证老用户最小升级成本 增加对swoole支持,同时支持swo ...

最新文章

  1. oracle rac vip什么用,oracle 10g,11g RAC中vip作用
  2. TypeError: new(): data must be a sequence (got float)
  3. 真香!2020最新版《神经网络与深度学习》中文版更新完毕,PDF免费开放下载~...
  4. 互联网1分钟 | 0214 2018 年超1/3的婚姻由约会交友类App促成;刘强东新开设 “南京京东云计算有限公司”...
  5. 在Unity实现游戏命令模式
  6. delphi中利用Indy的TIdFtp控件实现FTP协议
  7. React 性能优化之批量处理 unstable_batchedUpdates
  8. 基于java SSM框架的旅游网站设计开发(含源文件)
  9. mysql数据库约束详解_MySQL数据库中的外键约束详解
  10. 超24亿美元的BTC、ETH、XRP等加密货币在衍生品交易所被清算
  11. 赚钱的过程,也是合作的过程
  12. 1. OpenMAX系列 —— ACodec和OMX的联系
  13. java json data_java中json数据格式的处理
  14. [github高级控件] 带你走近 - CircleIndicator指示器原点动画切换
  15. 虚拟机linux快捷键,虚拟机控制与Linux快捷键
  16. 信号添加百分比噪声的原理和方法
  17. java最小因子_一个整数的所有最小因子
  18. DNS与HTTPDNS
  19. 看漫画学python 怎么样_看着漫画学Python是种怎样的体验?
  20. 华为鸿蒙系统与麒麟系统,搭载鸿蒙系统,麒麟9000处理器

热门文章

  1. jdbc事物提交,回滚不起作用的解决方案
  2. Android学习笔记---28_网络通信之通过HTTP协议实现文件上传,组拼http 的post方法,传输内容
  3. 经典线程同步 事件Event
  4. 二叉树前序中序,后序中序,公共最近祖先的实现
  5. java.net.BindException: Address already in use解决方法
  6. 用SMO算法实现了SVM的感悟
  7. java成绩前五名的代码_一个 JAVA 程序,实现输出考试成绩的前三名
  8. threadlocal内存泄露_ThreadLocal用法详解和原理
  9. ajax简单实例代码,分享Ajax创建简单实例代码
  10. 阿里开发规范_阿里开发强制要求的11条SQL编写规范