钟志 第八期web标准化交流会

32
Web 标标标标标标 标标标标标标

Upload: zhi-zhong

Post on 20-Jan-2015

1.397 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 钟志 第八期Web标准化交流会

Web 标准化交流会

网站性能优化

Page 2: 钟志 第八期Web标准化交流会

2

导 读导 读 无阻塞加载 Javascript

利用域名别名增加并行下载数量 避免空路径元素 编码心得

Page 3: 钟志 第八期Web标准化交流会

3

无阻塞加载 JavaScript

• JavaScript 加载时会阻碍其他资源的下载

• IE8 可并行下载 JS

• 目的: JS 与其他资源一起并行下载

Page 4: 钟志 第八期Web标准化交流会

4

• XHR Eval• XHR Injection• Script in Iframe• Script DOM Element• Script Defer• document.write Script Tag• worker

无阻塞加载 JavaScript

常用的几种方法:

Page 5: 钟志 第八期Web标准化交流会

5

无阻塞加载 JavaScript

•XHR Eval

Ajax

callback

eval

应用: Prototype.js Ruby on rails

Page 6: 钟志 第八期Web标准化交流会

6

无阻塞加载 JavaScript

•XHR Injection

Ajax

callback

var xhrObj = getXHRObject(); //上个例子中定义的对象xhrObj.onreadystatechange = function() { if ( xhrObj.readyState == 4 ) { var scriptElem = document.createElement('script'); document.getElementsByTagName('head')[0] .appendChild(scriptElem); scriptElem.text = xhrObj.responseText; }};xhrObj.open('GET', 'A.js', true); //必须同域xhrObj.send('');

script 标签

Page 7: 钟志 第八期Web标准化交流会

7

无阻塞加载 JavaScript

•Script in Iframe

嵌入 iframe

获取 HTML

<!--parent--><iframe src='A.html' width=0 height=0 frameborder=0 id=frame1></iframe>

与父页面交互

//iframe// access the main page from within the iframe using "parent"function createNewDiv() { var newDiv = parent.document.createElement('div'); parent.document.body.appendChild(newDiv);}

//parentdocument.getElementById('frame1').contentWindow.createNewDiv

Page 8: 钟志 第八期Web标准化交流会

8

无阻塞加载 JavaScript

•Script DOM Element

script 标签

设置 src

var scriptElem = document.createElement('script');scriptElem.src = 'http://anydomain.com/A.js';var head = document.getElementsByTagName('head')[0];head.appendChild(scriptElem);

可跨域

应用: JSONP

Page 9: 钟志 第八期Web标准化交流会

9

无阻塞加载 JavaScript

•Script Defer

<script defer src='A.js'></script>

IE Only

限制条件

•脚本中不包含 document.write

•脚本不依赖网页内容

Page 10: 钟志 第八期Web标准化交流会

10

无阻塞加载 JavaScript

•document.write Script Tagdocument.write("<script type='text/javascript' src='A.js'><\/script>");

•应用: Google AdSence

•JavaScript 能并行下载,但下载过程中会阻塞其他资源的下载

Page 11: 钟志 第八期Web标准化交流会

11

无阻塞加载 JavaScript

•worker

初始化 worker

postMessage后台运行脚本

var worker = new Worker("test.js");// Watch for messages from the workerworker.onmessage = function(e){ // The message from the client: alert(e.data);};function start(params) { worker.postMessage("start " + params);}start('world');

postMessage返回结果

//test.jsonmessage = function(e){ var data = e.data.split(' '); if ( data[0] === "start" ) { // Do some computation

var ret = 'Hello ' + data[1]; done(ret) }};function done(ret){ // Send back the results to the parent page postMessage(ret);}

onmessage接收结果

实验阶段

Page 12: 钟志 第八期Web标准化交流会

12

多域名解决最大连接数限制 • 大量资源引起下载阻塞

IE6 瀑布图

Page 13: 钟志 第八期Web标准化交流会

13

• 根据浏览不同最大连接数不同

Firefox 瀑布图 最大 6 个连接

多域名解决最大连接数限制

Page 14: 钟志 第八期Web标准化交流会

14

多域名解决最大连接数限制

• 资源类型包括 img 、 CSS 、 HTML• 还与 HTTP 版本有关

Page 15: 钟志 第八期Web标准化交流会

15

多域名解决最大连接数限制

• 增加域名别名,实现并行下载

img.sina.com.cnimg.sina.com.cn

img1.sina.com.cn

N 个连接数 N*2 个连接数

Page 16: 钟志 第八期Web标准化交流会

16

多域名解决最大连接数限制• 修改后的效果

完美的并行下载8s4s

Page 17: 钟志 第八期Web标准化交流会

17

多域名解决最大连接数限制

• 几个域名别名合适?

• 域名! =IP

• 域名越多越好?– DNS Lookups– CPU 消耗

Steve Souders

On average, using two aliases is

best.

Page 18: 钟志 第八期Web标准化交流会

18

多域名解决最大连接数限制

多域名性能比较

Page 19: 钟志 第八期Web标准化交流会

19

多域名解决最大连接数限制

• 浏览器对同一域名下的资源并发下载数量有限制

• 最大连接数与浏览器类型、浏览器版本、 HTTP 版本有关

• 添加域名别名能提高并发下载数量,一般来说, 2 个别名即可

Page 20: 钟志 第八期Web标准化交流会

20

避免空地址元素

What ?= Empty src

创建元素时指定一个空的资源地址

script

input

embed

object

iframe

img

空地址标签

Page 21: 钟志 第八期Web标准化交流会

21

1. <img src="" />

2. var img = new Image();img.src = "";

} 空路径

图片

避免空路径

How?

Page 22: 钟志 第八期Web标准化交流会

22

危害• 增加页面的请求数

避免空路径

IE: http://www.sina.com.cn/test/

No IE: http://www.sina.com.cn/test/1.php

请求的目标地址不一样 http://www.sina.com.cn/test/1.php

Page 23: 钟志 第八期Web标准化交流会

23

• 增加服务器压力

危害避免空路径

Web Server1x

空路径元素1x

压力成倍增加2x+

Page 24: 钟志 第八期Web标准化交流会

24

解决方法避免空路径

• 使用默认值• 动态创建时不指定 src• 服务器端判断 HTTP_REFERER 头信息

Page 25: 钟志 第八期Web标准化交流会

25

用 YSlow 检查避免空路径

制定新规则 (Avoid empty src or href )

新规则检查结果

1

2

Page 26: 钟志 第八期Web标准化交流会

26

相关 Web 标准避免空路径

•浏览器厂商支持度

IE X

Firefox √Chrome X

Safari X

Opera √

•HTML5 制定官方标准http://html5.org/tools/web-apps-tracker?from=4833&to=4834

Page 27: 钟志 第八期Web标准化交流会

27

编码心得• 缓存原生对象,避免全局查找

(function() { var documen= window.document;

function $(id) { return document.getElementById(id);}

})();

Page 28: 钟志 第八期Web标准化交流会

28

编码心得• 整合最新 web 技术,提高代码性能

if (!String.prototype.trim) { String.prototype.trim = function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); } }

类似的有

Array forEach, indexOf, lastIndexOf, filter, every, map, some

JSON parse, stringify

localStorage setItem, getItem, removeItem

… …

Page 29: 钟志 第八期Web标准化交流会

29

编码心得• 判断是否 undefined

(function() { //const var UNDEFINED; var name;

// 方法一 if (typeof name === 'undefined') { //do something }

// 方法二 if (name === UNDEFINED) { //do something }

})();

Page 30: 钟志 第八期Web标准化交流会

30

编码心得

• toString VS + '‘• parseInt VS +• regExp VS indexOf• append VS innerHTML• eval• with• Object.method VS method in Object

Page 31: 钟志 第八期Web标准化交流会

31

广告时间Web 前端工程师

• 美工设计• CSS• JavaScript

QQ 群: 41378087 , Joe

Lady firstLady first

Page 32: 钟志 第八期Web标准化交流会

32

END谢谢大家