页面响应加载的顺序:
1、域名解析->加载html->加载js和css->加载图片等其他信息
DOM详细的步骤如下:
- 解析HTML结构。
- 加载外部脚本和样式表文件。
- 解析并执行脚本代码。
- 构造HTML DOM模型。
- 加载图片等外部文件。
- 页面加载完毕。
举个例子:
上面代码的加载解析顺序为:
html → head → title → #text(网页标题) → style → 加载样式 → 解析样式 → link → 加载外部样式表文件 → 解析外部样式表 → script → 加载外部脚本文件 → 解析外部脚本文件 → 执行外部脚本→body → div → script → 加载脚本 → 解析脚本 → 执行脚本 → img → script → 加载脚本 → 解析脚本 → 执行脚本 → 加载外部图像文件 → 页面初始化完毕
jquery的Dom Ready方法在加载图片等其他信息前就可以操作Dom了,先于window.onload事件触发前执行。
需要注意的事情:
script标签很方便,只要加入网页,浏览器就会读取并运行。但是,它存在两个严重的缺陷。
(i)严格的读取顺序(js各段代码的依赖性问题)
(ii)性能问题
浏览器采用”同步模式”加载script标签,也就是说,页面会”堵塞”(blocking),等待javascript文件加载完成,然后再运行后面的HTML代码。当存在多个script标签时,浏览器无法同时读取,必须读取完一个再去读取另一个,造成读取时间大大延长,页面响应缓慢。 为了解决这些问题,可以使用DOM方法,动态加载Javascript文件。代码如下:
这样做的原理是,浏览器即时创造出一个script标签,然后”异步”读取Javascript文件。这样不会造成页面堵塞,但会造成另外一个问题:这样加载的Javascript文件,不在原始的DOM结构之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回调函数对它无效。
缩短页面load时间方法
页面减肥
页面的肥瘦是影响加载速度最重要的因素,删除不必要的空格、注释,将script和css移到外部文件,可以使用HTML Tidy来给HTML减肥,还可以使用一些压缩工具来给JavaScript减肥
减少文件数量
减少页面上引用的文件数量可以减少HTTP连接数,许多JavaScript、CSS文件可以合并最好合并
减少域名查询
DNS查询和解析域名也是消耗时间的,所以要减少对外部JavaScript、CSS、图片等资源的引用,不同域名的使用越少越好
缓存重用数据
使用缓存可以大大减少数据请求和渲染时间
优化页面素加载顺序
首先加载页面最初显示的内容和与之相关的JavaScript和CSS,然后加载DHTML相关的东西,像不是最初显示相关的图片、flash、视频等很肥的资源就最后加载
减少inline JavaScript的数量
浏览器parser会假设inline JavaScript会改变页面结构,所以使用inline JavaScript开销较大,不要使用document.write()这种输出内容的方法,使用现代W3C DOM方法来为现代浏览器处理页面内容
使用现代CSS和合法的标签
使用现代CSS来减少标签和图像,例如使用现代CSS+文字完全可以替代一些只有文字的图片,使用合法的标签避免浏览器解析HTML时做“error correction”等操作,还可以被HTML Tidy来给HTML减肥
Chunk your content
不要使用嵌套tables,而使用非嵌套tables或者divs,将基于大块嵌套的tables的layout分解成小tables,这样显示时不用加载整个页面(或大table)的内容
指定图像和tables的大小
如果浏览器可以立即决定图像或tables的大小,那么它就可以马上显示页面而不要重新做一些布局安排的工作,这不仅加快了页面的显示,也预防了页面完成加载后布局的一些不当的改变,image使用height和width,或者使用csssprite合并图片