关键词:
简介
本文重点关注如何充分利用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
都能极大提高页面的可用性,和性能.
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://mp.weixin.qq.com/s/U8FRxmcHAQIGKpfWjAm-7w
前端小小白的学习之路vue学习记录⑤(组件通信-父与子)
今天我们看一下组件通信。经过前面几篇文章,我们已经可以构建出完整的单个组件,并利用路由使其串联起来访问了。但这明显还是不够的。一个页面不可能就是个单组件,一般是由多个组件合成的。正因为如此,组件之间肯... 查看详情
前端小小白的学习之路javascript中的十个难点,你有必要知道。
1.立即执行函数立即执行函数,即ImmediatelyInvokedFunctionExpression(IIFE),正如它的名字,就是创建函数的同时立即执行。它没有绑定任何事件,也无需等待任何异步操作:(function(){//代码//...})();function(){…}是一个匿名函数,包围... 查看详情
前端小白的学习之路--html学习
HTML的补充学习1.meta与base<metahttp-equiv="refresh"content="2">2秒刷新一次<basehref="https://www.baidu.com"target="_blank">设置默认跳转地址以及跳转方式<linkrel="icon 查看详情
前端:html5学习之路
第1章HTML5基础 关于HTML5基础这一部分的内容没有明显边界。各种HTML5教材关于HTML5基础知识的介绍大同小异,这里不做过多赘述。 1. 我们要把HTML5简单用起来,首先要学会新建HTML5文档。每个网页都包含doctype、html、head... 查看详情
为 webapp 存储临时数据的最佳实践 [重复]
】为webapp存储临时数据的最佳实践[重复]【英文标题】:Bestpracticetostoretemporarydataforawebapp[duplicate]【发布时间】:2010-12-3011:52:14【问题描述】:我的最新项目能够使用来自数据库的信息生成文档。所以我根据需要将文档模板复制... 查看详情
fpga小白学习之路erro:buffersofthesamedirectioncannotbeplacedinseries
锁相环PLL默认输入前端有个IBUFG单元,在输出端有个BUFG单元,而两个BUFG(IBUFG)不能相连,所以会报这样的错:ERROR:NgdBuild:770-IBUFG‘u_pll0/clkin1_buf‘andBUFG‘BUFG_inst‘onnet ‘clkin_w‘arelinedupinseries.Buffersofthesamedirectioncannot 查看详情
猿创征文|我的前端——html5基础成长学习之路
文章目录前言一、网页的基本组成1.什么是网页2.什么是HTML3.网页的形成 二、常用的浏览器1.常用的浏览器2.浏览器内核三、Web标准1.为什么需要web标准2.Web标准的构成前言在一次机缘巧合之下了解并接触到CSDN,从此开启了我I... 查看详情
小白艰苦学习之路(记录学习历程——html篇)day8(代码片段)
注:Day7是Java简单算法练习,就不放上来啦。我更改了一下学习路线,所以以后的博客内容将会是HTML和Java的穿插学习!大家一起加油哦!Day8(HTML基础)初始HTML什么是HTMLHTML发展史HTML5的优势W3C标准常... 查看详情
小白艰苦学习之路(记录学习历程——html篇)day8(代码片段)
注:Day7是Java简单算法练习,就不放上来啦。我更改了一下学习路线,所以以后的博客内容将会是HTML和Java的穿插学习!大家一起加油哦!Day8(HTML基础)初始HTML什么是HTMLHTML发展史HTML5的优势W3C标准常... 查看详情
java学习之路(转)
一、基础类1、《Thinkinginjava》(阅读2遍),入门第一位是建立正确的概念2、《CoreJava》这本书更贴近实践,更多API的介绍,同样,更新也更频繁。(可以选重点章节读一下)二、进阶类1、《EffectiveJava》(阅读1遍),在熟悉语法、AP... 查看详情
在 WebApp 中创建和下载巨大 ZIP(来自多个 BLOB)的最佳实践
】在WebApp中创建和下载巨大ZIP(来自多个BLOB)的最佳实践【英文标题】:BestPracticestoCreateandDownloadahugeZIP(fromseveralBLOBs)inaWebApp【发布时间】:2013-05-1105:24:26【问题描述】:我需要从我的Web应用程序执行大量文件下载。这显然是一... 查看详情
小白的进阶之路7
注解:昨天学了配置文件,感觉还不错,确实之前new的方式好了很多,今天继续学习注解。OK,开始进的入门案例第一步,配置扫描注解,注意:其中base-package 后面的参数是应new的对象所在包。第二步,在需要注解的实... 查看详情
《机器学习及实践--从零开始通往kaggle竞赛之路》
《机器学习及实践--从零开始通往Kaggle竞赛之路》在开始说之前一个很重要的Tip:电脑至少要求是64位的,这是我的痛。断断续续花了个把月的时间把这本书过了一遍。这是一本非常适合基于python入门的机器学习入门的书籍,全... 查看详情
前端小白之每天学习记录----angula2--
1.1 Angular的发展历史 1.1.1angular起源GetAngular====>byMiskoHeveryandAdamAbrons开发效率高AnguarJS1.1.2迭代之路12年6月AngularJS1===》双向绑定、依赖注入、指令AngularJS1.3.x====》推出单次绑定语法放弃ie8浏览器支持AngularJS1.5.x=====》增加了... 查看详情
2022版完整版web前端学习路线图(超详细自学路线)
跟着路线图认真坚持学习从前端小白到大神不是梦,0基础看这一篇足矣!学们记得加关注点赞收藏,自学路上不迷糊!零基础小白自学前端路线图速览: 阶段一:核心基础入门前端计算机常识➾html+css... 查看详情
某小白的编程之路—从第一篇博客开始
目录1.个人介绍2.我与编程的那些事3.关于学习编程4.个人未来的目标1.个人介绍: 我是初次迈上秃头之旅的一位大一新生,正是人生中最迷茫的时期,自小比较喜欢玩电脑,因此选择了软件工程专业学习。在学习... 查看详情
webapp阅读器项目实践
...Reader。 项目属于麻雀虽小,但五脏俱全的类型,对于前端新手来说,还是很有学习价值。 一、项目成果展示二、项目所用技术语言:Html,css,js插件:zepto.js:使用于移动端的js库,语法与jqu 查看详情
小白到大神,你需要了解的sqlite最佳实践(代码片段)
本文微信公众号「AndroidTraveler」首发。背景本文是对一篇英文文档的翻译,原文请见文末链接。并发数据库访问假设你实现了自己的SQLiteOpenHelper。publicclassDatabaseHelperextendsSQLiteOpenHelper...现在你想要在多个线程中对数据库写入数... 查看详情