`
悟小元
  • 浏览: 8130 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Inside HTTP —— 资源下载次序与执行

阅读更多

下载资源顺序

主文档当然是第一个下载,其次

IE6是按html中定义的文档流顺序来下载外部资源,从上至下.

FF则略有不同,FF会优先下载jscss,而图片资源延迟到后面下载.

(经测试IE7,IE8也是先下载jscss,其它资源延后下载)

 

 

渲染或解析(DOM)

 

对于 js 运行,以及页面加载相关事件的触发,特别做了测试。在 Firefox 下,打开测试页面:

 

(以下测试数据来自互联网)

 

[22:13:32.947] HTML Start

[22:13:32.947] normal inline script run time

[22:13:34.904] normal external script run time

[22:13:35.775] [body] normal external script run time

[22:13:35.789] [body end] normal external script run time

[22:13:35.789] HTML End

[22:13:35.791] deferred inline script run time

[22:13:35.791] deferred external script run time

[22:13:35.793] DOMContentLoaded

[22:13:38.144] images[0] onload

[22:13:38.328] images[1] onload

[22:13:39.105] images[2] onload

[22:13:39.105] images[3] onload

[22:13:39.106] window.onload

 

很明显,JS 的运行严格按照文档流中的顺序进行。其中 deferred 的脚本会在最后运行(注:Firefox 3.5 开始支持 defer,而且支持得很完美)。

 

再来看下 IE8,结果如下:

 

[22:33:56.806] HTML Start

[22:33:56.826] normal inline script run time

[22:33:57.786] normal external script run time

[22:33:57.812] deferred inline script run time

[22:33:57.816] document.readyState = interactive

[22:33:57.934] [body] normal external script run time

[22:33:58.310] [body end] normal external script run time

[22:33:58.310] HTML End

[22:33:58.346] deferred external script run time

[22:33:58.346] images[0].readyState = loading

[22:33:58.346] images[0].readyState = complete

[22:33:58.346] images[0] onload

[22:33:58.361] doScroll

[22:33:58.451] images[1].readyState = loading

[22:33:58.479] images[1].readyState = complete

[22:33:58.479] images[1] onload

[22:33:58.794] images[2].readyState = loading

[22:33:58.854] images[2].readyState = complete

[22:33:58.854] images[2] onload

[22:33:58.876] images[3].readyState = loading

[22:33:58.876] images[3].readyState = complete

[22:33:58.876] images[3] onload

[22:33:58.887] document.readyState = complete

[22:33:58.888] window.onload

 

可以看出,IE8 下,defer 只对 external 脚本有效,对 inline 脚本无效。

 

 

css下载和渲染几乎是同时进行的.即下载完成后会立即渲染到页面.

当某一脚本下载完成时,也会立刻解析和运行。脚本的运行严格按照文档流中的顺序进行,deferred 的脚本会在正常脚本运行之后运行,

所以特别注意js脚本放置顺序.如果第二个外部脚本中直接调用运行第一个外部脚本中的全局变量时,会产生脚本错误.

特别需要留意:脚本运行时,会暂停该脚本之下所有资源的下载(因为脚本可能改变文档流,甚至跳转页面,浏览器的暂停策略是合理的)。

 

至于DOM的渲染是根据浏览器的渲染引擎来决定的.

这里可以了解各个浏览器的渲染引擎 :http://www.mac52ipod.cn/post/Trident-Gecko-WebKit-Presto.php

 

ps:defer是个很有用的东西,当某个脚本被标识为defer=true时,浏览器下载完该脚本后,不会立即执行该脚本,而是对其它资源进行下载和解析.

默认情况下,deferfalse,所以尽量不要在标识deferjs块或外部js文件中使用全局变量.

例子

<script type="text/javascript">

alert(a);

 

</script>

<script type="text/javascript">

var a=3

</script>

 

该脚本会报a未定义的错误,如果将第一个脚本块增加 defer=true标记,即可正常运行.所以说加上 defer 有点类似于 window.onload,但比onload灵活!

<script type="text/javascript" defer> //等同于defer=true

alert(a);

</script>

 

defer目前好像只支持  ie系列,ff3.5+浏览器(其它未测),所以使用时请注意兼容性问题

 

 

分享到:
评论

相关推荐

    Inside C#——C#编程从入门到精通

    《Inside C#——C#编程从入门到精通》是一本专为初学者和有经验的开发者设计的C#编程指南,旨在帮助读者深入理解和熟练掌握C#语言的核心概念和技术。这本书详细介绍了C#的各个方面,从基础语法到高级特性,为读者...

    Inside C#——C#编程从入门到精通_0.rar

    《Inside C#——C#编程从入门到精通》是一本旨在帮助初学者和有经验的开发者深入了解C#编程语言的指南。C#是由微软开发的一种面向对象的编程语言,广泛应用于Windows应用程序、游戏开发、Web服务以及.NET框架下的...

    j2me Inside J2VM——源代碼

    《J2ME Inside J2VM——源代码》是关于Java Micro Edition(J2ME)在Java Virtual Machine(J2VM)内部工作原理的深入解析,它涵盖了J2ME的源代码层面,帮助开发者理解J2ME应用程序如何在有限资源的设备上运行。...

    Inside Windows Debugging.pdf

    本书《Inside Windows Debugging》由Tarik Soulami撰写,得到了微软公司的授权,由O’Reilly Media, Inc.出版。该书结合最佳实践和常见的调试与编程技巧,很多技巧在其他书籍中尚未被记录下来。在本书的整个阅读过程...

    CLRInsideOut.zip

    在提供的压缩包中,包含了一个名为"CLRInsideOut2008_01.exe"的可执行文件,这应该是工具的主程序。通常,这种类型的工具会有一个用户界面,允许用户导入C/C++的头文件,然后自动生成对应的C#代码。"ReadMe.txt"文件...

    《Inside VCL(深入核心——VCL架构剖析)》配书源码

    《Inside VCL(深入核心——VCL架构剖析)》是一本深入探讨VCL(Visual Component Library)架构的专业书籍,由知名台湾程序员李维先生撰写。这本书籍旨在帮助读者理解VCL的核心机制,从而更好地利用这一强大的组件库...

    inside android / internal android

    "Inside Android / Internal Android" 提供了深入理解这个复杂系统的宝贵资源,揭示了它的核心组件、工作原理以及如何优化应用性能。 一、Android系统概述 Android是由Google主导开发的开源操作系统,基于Linux内核...

    藏经阁-AMAP INSIDE 智能定位带来的时代新机会——互联网世界底图.pdf

    藏经阁-AMAP INSIDE 智能定位带来的时代新机会——互联网世界底图 随着移动互联网的飞速发展,智能定位技术正在改变人们的生活方式。AMAP INSIDE 智能定位系统,以其强大的地图数据生产能力和精准的位置服务,正在...

    Inside SQLite(SQLite技术内幕) 原版+个人翻译版

    总的来说,《Inside SQLite》无论是翻译版还是原版,都是学习和理解SQLite底层机制的宝贵资源。通过阅读这些资料,开发者可以更好地掌握SQLite的使用,解决实际开发中遇到的问题,并进行性能优化。无论你是初学者...

    Inside VCL(深入核心——VCL架构剖析)

    Inside VCL,看看VCL架构,剖析VCL架构,深入核心地剖析。

    Inside C++ Object Model

    综上所述,《Inside C++ Object Model》这本书详细阐述了C++对象模型的各个方面,包括内存管理、类与对象的实现、多态、继承、模板和异常处理等核心概念。通过对这些内容的理解,开发者能够更深入地了解C++的底层...

    Microsoft Excel 2010 Inside Out 无水印原版pdf

    Microsoft Excel 2010 Inside Out 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细...

    《COM技术内幕——微软组件对象模型(Inside COM)》一书部分源码 for VS 2010

    由 Dale Rogerson 撰写的《COM技术内幕——微软组件对象模型》(Inside COM)一书附带的源码适合在Visual C++ 6.0下编译,同样的源码拿到 Visual Studio 2010 下面进行编译,会报告很多错误。因此本人对源码中的错误...

    数字互联网电视——“Linux inside”.pdf

    标题中的“数字互联网电视——“Linux inside””指的是在电视技术中嵌入Linux操作系统,以实现互联网功能的新型电视。这种电视集成了传统电视的观看功能和计算机的网络应用,开启了电视产业的一个新阶段。 描述中...

    ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.006

    Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...

    Inside游戏效果文档

    文档标题为《Inside游戏效果文档》,描述了PlayDead公司在制作游戏《Inside》时所采用的渲染技术。文档内容涉及了游戏中的雾效、HDR泛光(bloom)以及其他与光照和渲染相关的高级技术。这些技术对于创造游戏的独特...

    inside interesting integrals

    ### 重要知识点解析 #### 一、积分技巧与方法概览 《Inside Interesting Integrals》是一本详尽探讨积分技巧的书籍,旨在帮助学生提升在数学...对于想要在积分方面取得突破的学生来说,这本书无疑是一份宝贵的资源。

    ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.003

    Allegro自带的ODB++inside工具下载,ODB++inside插件可以将Allegro的.brd文件转化为仿真工具Hyperlynx使用的文件。共6个文件,需要分别下载。 ODB_Inside_Cadence_Allegro_111_Windows_64_SA_Setup.zip.001 ODB_...

    深入核心——VCL架构剖析.part2

    Inside VCL(深入核心——VCL架构剖析) (2008 年度畅销榜NO.22 ) &lt;br&gt;原书名: Inside VCL(深入核心——VCL架构剖析) 作者: 李维 著 &lt;br&gt; ☆领略优秀Framework之大局观! 追寻软件架构大师...

Global site tag (gtag.js) - Google Analytics