JS 在html中的位置
前言
当我了解完html在浏览器中的解析渲染流程后,反而又发现了新的困扰自己的问题。
Q:即然html要渲染需要渲染树,而渲染树又需要DOMTree和CSSRuleTree,DOMTree需要解析HTML,但是当解析到JS时需要js下载执行完才能继续执行解析。这样的话,那js放在哪里阻塞解析也只是早晚的问题。那放在前面后面都一样?!但是这又跟开发遇到的情况不一样。
猜想
前面的问题矛盾就在需要完成的DOM树,但是DOM树的构建又会被JS打断。所以我猜想:浏览器的渲染不需要完整的DOM树!
也就是说浏览器不需要等到HTML解析完就开始配合CSSRuleTree开始渲染了。这也就能合理的解析js要放在body的最底部。
试验
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div>welcome to Ahole's test Demo</div>
<script src="http://www.ahole.cn/play-in-mobile/js/zepto.js"></script>
<div>我是白老鼠!</div>
</body>
</html>
timeline过程写的很清楚

可以看出浏览器解析遇到js的时候就会停止,但是并不会傻傻等待js的执行,浏览器把构建一半的的DOMTree跟CSSRuleTree 生成渲染树,并渲染.

等下载执行完js再去解析html 再渲染.
结论
可以看出浏览器发生了两次渲染,而且这两次渲染中间是js的解析和执行。这说明在解析js之前,html就已经被渲染了。这也就证实了我的猜想。所以啊,为了优化首屏时间,最好还是把js放在body底部吧!
JS 在html中的位置的更多相关文章
- 找到你的位置(JS在页面中的位置)最常用的方式是在页面中head部分放置<script>元素,浏览器解析head部分就会执行这个代码,然后才解析页面的其余部分
找到你的位置(JS在页面中的位置) 我们可以将JavaScript代码放在html文件中任何位置,但是我们一般放在网页的head或者body部分. 放在<head>部分 最常用的方式是在页 ...
- js从数组中删除指定值(不是指定位置)的元素
RT: js从数组中删除指定值的元素,注意是指定值,而不是指定位置. 比如数组{1,2,3,4,5},我要删除其中的元素3,但是这个3的位置我是不知道的,只知道要删除值为3的这一个元素,请问要怎么写? ...
- 因为yii2中jquery位置默认在最下方,可将自定义js位置放在下方
因为yii2中jquery位置默认在最下方,可将自定义js位置放在下方,这样就可以执行当页面加载完触发动作.记录下方式,查找方便 <?php $this->beginBlock('test ...
- JS中关于位置和尺寸的api
HTMLElement.offsetParent 由于offsetTop 和 offsetLeft 都是相对于 offsetParent 内边距边界的,故offsetParent的意义十分重大.off ...
- JS对象 Array 数组对象 数组对象是一个对象的集合,里边的对象可以是不同类型的。数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置,是从零开始的
Array 数组对象 数组对象是一个对象的集合,里边的对象可以是不同类型的.数组的每一个成员对象都有一个"下标",用来表示它在数组中的位置,是从零开始的 数组定义的方法: 1. 定 ...
- 关于js获取元素在屏幕中的位置的方法
针对我们获取元素在页面中的位置的问题,我们还是用老师一峰老师的方法来解决吧 下面上HTML代码 <div class="left_footer"> <p data ...
- D3.js使用过程中的常见问题(D3版本D3V4)
目录 一.学习D3我必须要学习好SVG矢量图码? 二.如何理解D3给Dom节点绑定数据时的Update.Enter和Exit模式 三.D3绑定数据时用datum与data有什么不一样? 四.SVG图中 ...
- 我的前端工具集(八)获得html元素在页面中的位置
我的前端工具集(八)获得html元素在页面中的位置 liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候需要用点击等操作,来获取某元素在页面中的位置,然后在该位置添加某些操作 如 ...
- jquery获取元素在文档中的位置信息以及滚动条位置(转)
jquery获取元素在文档中的位置信息以及滚动条位置 http://blog.csdn.net/qq_34095777/article/details/78750886 原文链接 原创 201 ...
随机推荐
- delphi中覆盖最大化消息(WM_GETMINMAXINFO)
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; ...
- 截取字符串一之slice
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- bootstrap栅格系统的div高度怎样定?
不能直接写px,不同设置分辨不同,div宽度始终是满屏的,如果高度指定像素大小,div就不能保证长宽比例恰当了. 解决方法: height:0px;padding-bottom:100%
- Solrj日期范围查询
在做依据日期来检索的时候普通的格式化会出错,试了好多种仅仅有一种可行 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH ...
- JAVA基础 (二)反射 深入解析反射机制
在谈论到反射这个问题时,你是否有例如以下疑问? 不管是在.NET还是Java中反射的原理和机制是一样的,理解了一种还有一种就能够迎刃而解,想要理解反射首先须要了解底层的一些概念和执行.理解了反射有助于 ...
- 提高你的Java代码质量吧:使用构造函数协助描述枚举项
一.分析 一般来说,我们经常使用的枚举项只有一个属性,即排序号,其默认值是从0.1.2... ....但是除了排序号外,枚举还有一个(或多个)属性. 二.场景 比如,可以通过枚举构造函数声明业务值,定 ...
- 算法精解(C语言描述) 第5章 读书笔记
第5章 5.1 单链表 /* -------------------------------- list.h -------------------------------- */ #ifndef L ...
- md笔记——正则学习
正则表达式 在线调试正则1 在线调试正则2 规则记录 \d 匹配一个数字字符.等价于[0-9] \D 匹配一个非数字字符.等价于[^0-9]. . 通配符,可以匹配任意字符. ? 表示量词" ...
- T-SQL 查询语句总结
我们使用一下两张表作为范例: select * from [dbo].[employee] select * from [dbo].[dept] 1.select语句 DISTINCT:去掉记录中的重 ...
- J - 搞笑版费马大定理
J - 搞笑版费马大定理 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Submit ...