`
fantaxy025025
  • 浏览: 1330452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

JS 和 CSS 的位置对其他资源加载顺序的影响(摘和总结)

 
阅读更多

JS 和 CSS 在页面中的位置,会影响其他资源(指 img 等非 js 和 css 资源)的加载顺序,究其原因,有三个值得注意的点:

  1. JS 有可能会修改 DOM. 典型的,可能会有 document.write. 这意味着,在当前 JS 加载和执行完成前,后续所有资源的下载有可能是没必要的。这是 JS 阻塞后续资源下载的根本原因。
  2. JS 的执行有可能依赖最新样式(也就是此js之前加载的样式,而不是所有样式。)比如,可能会有 var width = $('#id').width(). 这意味着,JS 代码在执行前,浏览器必须保证在此 JS 之前的所有 css(无论外链还是内嵌)都已下载和解析完成。这是 CSS 阻塞后续 JS 执行的根本原因。
  3. 现代浏览器很聪明,会进行 prefetch 优化。性能是如此重要,现代浏览器在竞争中,在 UI update 线程之外,还会开启另一个线程,对后续 JS 和 CSS 提前下载(注意,仅提前下载,并不执行)。有了 prefetch 优化,这意味着,在不存在任何阻塞的情况下,理论上 JS 和 CSS 的下载时机都非常优先,和位置无关。

以上三点可简述为三条基本定律:

  • 定律一:资源是否下载依赖 JS 执行结果。
  • 定律二:JS 执行依赖 CSS 最新 渲染。
  • 定律三:现代浏览器存在 prefetch 优化。

总结一下: css下载完成后,js开始下载,最后是资源的下载。

这个结论的context是:js前有css

这个结论旨在讨论:加载顺序和并行性

 

据我估计:渲染整个页面是一个线程。

反证法:

假设:是多个线程,

用例:

 

<head>

    <title>test</title>

    <script type="text/javascript" src="test.js"></script>

    <link rel="stylesheet" type="text/css" href="test.css">

    <script type="text/javascript">

    </script>

</head>

假设js会控制一个按钮100x100大小

css控制按钮200x200大小

如果是多线程的话,结果将会不可预测。

 

整体来说,还是保持 顺序 执行。具体小细节感觉还有很多,呆日后完善吧。

 

++++

今天看BigPipe的时候想起来js和css不同位置的情况下,会如何执行。因为这个东西会影响BigPipe设计之后的执行细节。

按照我原来的理解,应该是 顺序 执行。谁在前就先执行谁。 

但是没有仔细想doby的执行情况,body和body内的资源的请求情况,以及可能受到的影响。

 

我在chrome下做了些测试,感觉还是要分很多情况来讨论。

 

这篇文章也在讨论这个问题,并做了些总结:

http://hikejun.com/blog/2012/02/02/js%E5%92%8Ccss%E7%9A%84%E9%A1%BA%E5%BA%8F%E5%85%B3%E7%B3%BB/

但结论有些问题,另外,不同的浏览器也会有不同的处理方式。

 

这篇文章给出了一个合理的理论支持!

http://lifesinger.wordpress.com/2012/02/03/performance-impact-of-js-css-loading-order/

但是有些说法不够精致,我就重构了一下~

 

http://futureinhands.iteye.com/blog/354528

这篇文章也可以看看

 

BigPipe的文章和参考

http://www.searchtb.com/2011/04/an-introduction-to-bigpipe.html

 

I

I

I

***本文完毕***

I

I

I


 

分享到:
评论

相关推荐

    js 异步加载js, css文件

    当项目js(css)文件使用越来越多,js 文件的加载也成了性能上的一个问题,此资源能够在页面全部加载完成后异步加载js等资源文件,它可以顺序加载资源列表,也可以并发加载资源列表,它包含一个方法调用接口:...

    详解关于html,css,js三者的加载顺序问题

    它们的加载顺序直接影响了网页的渲染速度和用户体验。本文将详细探讨这三种资源的加载顺序,以及如何处理它们之间的相互依赖和潜在冲突。 首先,我们要明确一点,浏览器在渲染网页时是按照DOM(文档对象模型)的...

    html延迟加载JS和CSS

    在给定的文件`lazyLoadJC.js`中,可能实现了一个JavaScript库,用于延迟加载JS和CSS资源。这个库可能包含以下功能: 1. 检测浏览器兼容性,确保在IE6及更高版本上运行。 2. 针对JavaScript的延迟加载,可能使用了`...

    网页按顺序加载 最后加载js广告

    通过优化网页的加载顺序,特别是将非关键的JavaScript广告放在最后加载,我们可以显著提高网页的首屏加载速度,从而提升用户体验。同时,对于网页性能的优化,还可以考虑使用CDN加速资源获取,压缩代码减少传输量,...

    CSS 的加载及加载顺序简介

    CSS的加载与加载顺序是前端开发中的重要话题,因为它直接影响到网页的渲染速度和用户体验。首先,我们了解一个基本的加载原则:CSS样式通常被放置在HTML文档的部分,以便在页面开始渲染时能立即应用样式,避免出现...

    js和css压缩工具

    JavaScript(简称JS)和CSS是网页开发中的关键组成部分,它们负责网页的动态功能和样式设计。然而,未经优化的JS和CSS文件可能会导致网页加载速度变慢,影响用户体验。为了解决这个问题,开发者通常会使用专门的压缩...

    js和CSS3背景图片切片和glitch闪动效果

    这是一种将大尺寸背景图片分割成多个小片的方法,然后通过JavaScript或CSS3动画控制这些图片片断的展示顺序和位置,以实现动态过渡效果。这种方式可以在不增加太多页面加载时间的情况下,创建出流畅的图片切换动画。...

    页面加载顺序,loading巧妙解决

    页面加载顺序对于用户体验至关重要,因为它直接影响到用户首次看到网页内容的速度和形式。在网页开发中,浏览器遵循一定的规则来解析HTML、CSS和JavaScript文件,从而构建出完整的页面。本篇文章将详细探讨页面加载...

    JSCSS压缩工具

    然而,未经优化的JS和CSS文件会增加页面加载时间,影响用户体验。为了解决这个问题,开发者通常会使用专门的压缩工具对代码进行优化和压缩,以减小文件大小,提高网站性能。本文将深入探讨JS和CSS压缩工具及其重要性...

    js 动态引用外部js,css文件

    然而,需要注意的是,动态引用也可能导致一些问题,如加载顺序、资源重复加载等,因此在实际应用中应合理规划和管理。 总之,JS动态引用外部JS和CSS文件是一种优化网页性能和增强网页动态性的技术。通过合理的使用...

    纯CSS3实现齿轮加载动画.zip

    这有几点重要的优点:首先,CSS3动画通常对浏览器的性能影响较小,因为它们是在浏览器的渲染引擎内核中处理的;其次,CSS3动画可以与JavaScript分离,使得页面加载更高效,尤其在移动设备上;最后,纯CSS3实现的动画...

    html加载顺序.zip

    2. **布局(Layout)**:渲染树确定了元素的位置和尺寸,这个过程称为布局。 3. **绘制(Painting)**:布局完成后,浏览器开始绘制元素到屏幕,根据渲染树中的样式信息填充颜色。 四、JavaScript交互 1. **执行JS*...

    js css文件合并工具

    这个工具的主要目标是将多个JavaScript(js)和Cascading Style Sheets(css)文件整合成单个文件,以此减少网页加载时的HTTP请求次数,从而提高页面的加载速度。 JavaScript和CSS文件的合并是前端性能优化的一个...

    lazyload-js-css-loader

    6. **优化性能指标**: 如减少网络请求、优化网络传输(如GZIP压缩、Brotli压缩)、调整资源加载顺序等。 "lazyload-master"可能是项目源码的主分支,包含完整的配置文件、示例代码以及相关的文档,可以帮助开发者...

    动态添加css或js链接

    例如,在页面初始化时只加载必要的样式和脚本,而其他非核心功能相关的资源则在需要时才加载。 ### 2. ASP.NET Web Forms中的HtmlGenericControl类 `HtmlGenericControl`是ASP.NET Web Forms中用于创建自定义HTML...

    zencart css_js_loader插件

    总结来说,"zencart css_js_loader插件"是优化ZenCart网站性能的重要工具,它通过优化CSS和JS的加载方式,提高了页面加载速度和用户体验,为安装和运行"Fast and Easy Checkout for Zen Cart"等其他插件提供了良好的...

    js、css 注释清理工具 (yuicompressor)

    JavaScript和CSS是网页开发中的两种核心技术,它们用于实现动态交互和美化页面。然而,随着项目的不断迭代,这些文件可能会变得庞大,导致加载速度变慢,影响用户体验。为了解决这个问题,开发者通常会使用像`yui...

    html+css+js实现的8款图片展示设计,可用于制作网页版相册

    CSS Flexbox或Grid布局可以轻松实现这一效果,同时JavaScript可以用来动态加载新图片并调整布局。 5. **平移滑动**:通过CSS3的`transform`属性,可以实现图片的平移滑动效果。在JavaScript中,可以监听滚动事件,...

Global site tag (gtag.js) - Google Analytics