JS 和 CSS 在页面中的位置,会影响其他资源(指 img 等非 js 和 css 资源)的加载顺序,究其原因,有三个值得注意的点:
-
JS 有可能会修改 DOM. 典型的,可能会有
document.write
. 这意味着,在当前 JS 加载和执行完成前,后续所有资源的下载有可能是没必要的。这是 JS 阻塞后续资源下载的根本原因。
-
JS 的执行有可能依赖最新样式(也就是此js之前加载的样式,而不是所有样式。)比如,可能会有
var width = $('#id').width()
. 这意味着,JS 代码在执行前,浏览器必须保证在此 JS 之前的所有 css(无论外链还是内嵌)都已下载和解析完成。这是 CSS 阻塞后续 JS 执行的根本原因。
-
现代浏览器很聪明,会进行 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
***本文完毕***
分享到:
相关推荐
当项目js(css)文件使用越来越多,js 文件的加载也成了性能上的一个问题,此资源能够在页面全部加载完成后异步加载js等资源文件,它可以顺序加载资源列表,也可以并发加载资源列表,它包含一个方法调用接口:...
它们的加载顺序直接影响了网页的渲染速度和用户体验。本文将详细探讨这三种资源的加载顺序,以及如何处理它们之间的相互依赖和潜在冲突。 首先,我们要明确一点,浏览器在渲染网页时是按照DOM(文档对象模型)的...
在给定的文件`lazyLoadJC.js`中,可能实现了一个JavaScript库,用于延迟加载JS和CSS资源。这个库可能包含以下功能: 1. 检测浏览器兼容性,确保在IE6及更高版本上运行。 2. 针对JavaScript的延迟加载,可能使用了`...
通过优化网页的加载顺序,特别是将非关键的JavaScript广告放在最后加载,我们可以显著提高网页的首屏加载速度,从而提升用户体验。同时,对于网页性能的优化,还可以考虑使用CDN加速资源获取,压缩代码减少传输量,...
CSS的加载与加载顺序是前端开发中的重要话题,因为它直接影响到网页的渲染速度和用户体验。首先,我们了解一个基本的加载原则:CSS样式通常被放置在HTML文档的部分,以便在页面开始渲染时能立即应用样式,避免出现...
JavaScript(简称JS)和CSS是网页开发中的关键组成部分,它们负责网页的动态功能和样式设计。然而,未经优化的JS和CSS文件可能会导致网页加载速度变慢,影响用户体验。为了解决这个问题,开发者通常会使用专门的压缩...
这是一种将大尺寸背景图片分割成多个小片的方法,然后通过JavaScript或CSS3动画控制这些图片片断的展示顺序和位置,以实现动态过渡效果。这种方式可以在不增加太多页面加载时间的情况下,创建出流畅的图片切换动画。...
页面加载顺序对于用户体验至关重要,因为它直接影响到用户首次看到网页内容的速度和形式。在网页开发中,浏览器遵循一定的规则来解析HTML、CSS和JavaScript文件,从而构建出完整的页面。本篇文章将详细探讨页面加载...
然而,未经优化的JS和CSS文件会增加页面加载时间,影响用户体验。为了解决这个问题,开发者通常会使用专门的压缩工具对代码进行优化和压缩,以减小文件大小,提高网站性能。本文将深入探讨JS和CSS压缩工具及其重要性...
然而,需要注意的是,动态引用也可能导致一些问题,如加载顺序、资源重复加载等,因此在实际应用中应合理规划和管理。 总之,JS动态引用外部JS和CSS文件是一种优化网页性能和增强网页动态性的技术。通过合理的使用...
这有几点重要的优点:首先,CSS3动画通常对浏览器的性能影响较小,因为它们是在浏览器的渲染引擎内核中处理的;其次,CSS3动画可以与JavaScript分离,使得页面加载更高效,尤其在移动设备上;最后,纯CSS3实现的动画...
2. **布局(Layout)**:渲染树确定了元素的位置和尺寸,这个过程称为布局。 3. **绘制(Painting)**:布局完成后,浏览器开始绘制元素到屏幕,根据渲染树中的样式信息填充颜色。 四、JavaScript交互 1. **执行JS*...
这个工具的主要目标是将多个JavaScript(js)和Cascading Style Sheets(css)文件整合成单个文件,以此减少网页加载时的HTTP请求次数,从而提高页面的加载速度。 JavaScript和CSS文件的合并是前端性能优化的一个...
6. **优化性能指标**: 如减少网络请求、优化网络传输(如GZIP压缩、Brotli压缩)、调整资源加载顺序等。 "lazyload-master"可能是项目源码的主分支,包含完整的配置文件、示例代码以及相关的文档,可以帮助开发者...
例如,在页面初始化时只加载必要的样式和脚本,而其他非核心功能相关的资源则在需要时才加载。 ### 2. ASP.NET Web Forms中的HtmlGenericControl类 `HtmlGenericControl`是ASP.NET Web Forms中用于创建自定义HTML...
总结来说,"zencart css_js_loader插件"是优化ZenCart网站性能的重要工具,它通过优化CSS和JS的加载方式,提高了页面加载速度和用户体验,为安装和运行"Fast and Easy Checkout for Zen Cart"等其他插件提供了良好的...
JavaScript和CSS是网页开发中的两种核心技术,它们用于实现动态交互和美化页面。然而,随着项目的不断迭代,这些文件可能会变得庞大,导致加载速度变慢,影响用户体验。为了解决这个问题,开发者通常会使用像`yui...
CSS Flexbox或Grid布局可以轻松实现这一效果,同时JavaScript可以用来动态加载新图片并调整布局。 5. **平移滑动**:通过CSS3的`transform`属性,可以实现图片的平移滑动效果。在JavaScript中,可以监听滚动事件,...