关于在页面哪部分引入JS的讨论
来源:互联网 发布:it之家官网 编辑:程序博客网 时间:2024/05/18 18:54
链接:https://www.zhihu.com/question/34147508/answer/63469443
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
浏览器加载页面是按从上到下顺序加载的。加载 JS 并执行的时候,会阻塞其他资源的加载。这是因为 JS 可能会有 DOM 、样式等等操作,所以浏览器要先加载这段 JS 并执行,再加载放在它后面的 HTML、CSS。
因此,加入一段巨大的 JS 放在最上面,浏览器首先要下载并执行,这段时间里面,页面是空白的。相比于加载了部分 HTML 和 样式 但是没有 JS 交互功能,显然是后者对于浏览者体验要好。
然而,是否所有 JS 都要放在最下面呢?并不是。
举实际的例子:
html5shiv是一段 JS 脚本,用来是早期 IE 兼容 HTML5 新增标签的支持。
这个 JS 脚本,必须要放在上面 head 部分,为什么呢?因为在老 IE 浏览器下面,不支持 <section> 这样的标签,所以用 JS 来兼容。如果放在底部,等 IE 浏览器先报错了,才会执行这块 JS 没多大用。
jQuery 这类的库,也是建议放在最上面的。首先最大的疑问可能是 jQuery 这么大,放在上面岂不是阻塞的很厉害?
不过 jQuery 通常引用的是 CDN 地址,而且经过 gzip 压缩之后并不是很大,而且引用公共 CDN 上面的 jQuery 话,很大几率早已被用户缓存下来了。所以可以不需要考虑阻塞产生的性能问题。
而我们都知道,JS 是按顺序执行下来的。也就是你没运行 jQuery 之前,先运行了调用 jQuery 函数的代码,就会报错。你可以控制你自己写的 JS 放在页面最下面,放在 jQuery 下面,但是你无法保证页面上其他地方会不会有人图省事直接在 HTML 代码里面输出 JS。如果有,那么就会报错。
所以我建议,类库放在上面加载,其余代码尽可能放在最底下加载。
======= 然而,前端性能优化只是薄薄一层
可能前端优化半天,还不如上个 CDN 或者加个宽带或者优化一个后端算法来的效果好。- 关于在页面哪部分引入JS的讨论
- 关于js插入页面元素问题 在js中创建html元素并在 引入js的地方直接显示
- 如何在页面中引入JS教程
- Tiles 引入页面时 部分Js不可用
- 关于一个页面中引入另一个页面 bootstrap引用Js失效的坑
- iframe法在页面中引入相同部分html的应用
- 页面内定义的js变量,如何在引入的JS文件中使用
- 在页面引入js文件冲突问题(注意js文件导入的顺序)
- 关于easyui通过href引入外部jsp页面js不执行的说明
- 在action跳转的jsp页面中引入静态js、css文件
- 怎么在页面里引入bootstrap的css和js文件呢?
- 关于js框架的一个讨论
- 关于jsp引入js的一个问题
- 关于jquery的jquery.zclip.js在使用时隐藏元素失效讨论
- 关于自己调试中的函数返回值的部分讨论
- 在页面直接引入另一张页面的模块
- 关于js在页面呈现时的加载顺序问题
- 关于在js中关闭浏览器页面的问题
- unused block corruption 处理一例
- MSSQL联表查询优化
- 为什么df和lsblk显示的内存不一样大
- socket与http的区别
- FFMPEG(二)关键数据结构
- 关于在页面哪部分引入JS的讨论
- ORA-00257:程序归档错误,在释放之前仅限于内部连接
- 香港服务器的核心特点是什么
- Eclipse+Maven创建webapp项目
- POJ_2632
- maven项目pom.xml文件报错failOnMissingWebXml
- Command Network
- Android 组件化
- Angular中ng-controller父子级嵌套的相关属性