script文件放在页面哪里好点?

本文探讨了JavaScript在HTML中的不同加载位置对页面加载速度的影响,包括头部、底部及使用async和defer属性的方法,旨在提高网页性能。

1、放在head里边。浏览器接续HTML发现script的时候,会优先下载完script文件,再继续解析HTML。而且讨厌的是浏览器在下载js时候,不能多个文件一起下载,最多只能同事下载两个js文件,所以把js文件放在页面头部的话如果网不好的时候浏览器在下载js,HTML迟迟下载不下来所以会导致页面加载慢的情况导致用户体验不太好。

2、将js放在页面最底部(<body>里)。浏览器解析万HTML文件之后再下载js。对于一些高度依赖js的网页就会显得比较慢。

3、所以最好的选择是一般解析HTML一般下载js文件,使用async和defer。80%的现在浏览器都识别这两个属性。这两个属性能让浏览器一边下载js一边解析HTML页面。当然还是同时只能下载两个js文件。他的优点是下载js的时候不耽误HTML文件的解析

<script type="text/javascript" src="path/to/script1.js" async></script>

<script type="text/javascript" src="path/to/script2.js" async></script>

但是带async属性的script会异步执行,只要下载完就执行,这会导致script2.js可能先于script1.js执行(如果script2.js比较大,下载慢)。defer就能保证script有序执行,script1.js先执行,script2.js后执行。

如果可以不考虑支持<IE9的IE,最好的做法是将script标签放在head中,并使用async/defer属性。这样浏览器就能一边下载JS,一边解析其他的HTML

总体来说,放在<body>里其实是最常见的做法

对于link和style,还是放在head里的做法比较多。CSS的link放在body里也是可以的,只是可能导致页面暂时没有样式而已

在 HTML 文件中,`<script>` 标签放置的位置对页面性能和脚本执行顺序有重要影响。为了确保脚本能够正确访问 DOM 并提高页面加载性能,**推荐将 `<script>` 标签放在 `</body>` 标签之前**,也就是页面内容的最后。 --- ## ✅ 推荐的 `<script>` 放置位置: ```html <body> <!-- 页面主体内容 --> ... <script> // 你的脚本代码 </script> </body> ``` ### ✅ 应用到你的 HTML 文件中: 你当前的 HTML 结构如下: ```html <!DOCTYPE html> <html lang="zh-CN"> <head>...</head> <body> <!-- 页面内容 --> ... <!-- 这里插入你的 <script> --> </body> </html> ``` 所以你应该将懒加载的 `<script>` 放在 `</body>` 前面,如下所示: ```html <!-- ... 其他 body 内容 ... --> <div id="coverage"> <details id="coverage-details"> <summary style="..."> 原始报告(击展开/折叠) </summary> <div class="title" id="coverage-content" style="margin-top: 10px; display: none;"></div> </details> </div> <script> document.getElementById('coverage-details').addEventListener('toggle', function () { const contentDiv = document.getElementById('coverage-content'); if (this.open && !contentDiv.dataset.loaded) { const htmlContent = `{{ origin_report | safe }}`; contentDiv.innerHTML = htmlContent; contentDiv.dataset.loaded = 'true'; contentDiv.style.display = 'block'; } }); </script> </body> </html> ``` --- ## 🧠 补充说明: ### ✅ 为什么不能放在 `<head>` 里? - 如果 `<script>` 放在 `<head>` 中,它会在 DOM 加载完成前执行。 - 这会导致 `document.getElementById(...)` 找不到元素,出现 `null` 错误。 ### ✅ 为什么推荐放在 `</body>` 前? - 此时整个页面的 DOM 已经加载完毕。 - 脚本能安全地访问页面上的元素(如 `document.getElementById`)。 - 用户可以更快看到页面内容,JS 在最后加载不会阻塞渲染。 --- ## ✅ 可选方式(使用 `defer` 或 `async`): 如果你一定要把 `<script>` 放在 `<head>` 中,可以使用以下属性: ### 使用 `defer`(推荐): ```html <head> <script defer> // 你的脚本 </script> </head> ``` - `defer` 会等整个 HTML 文档解析完成后再执行脚本。 - 适用于需要访问 DOM 的脚本。 ### 使用 `async`: ```html <head> <script async> // 你的脚本 </script> </head> ``` - `async` 是异步加载脚本,加载时不阻塞 HTML 解析。 - 但脚本一旦加载完成就会立即执行,不能保证执行顺序。 --- ## ✅ 总结: | 方式 | 位置 | 是否阻塞渲染 | 是否等待 DOM | 推荐使用场景 | |------|------|----------------|----------------|----------------| | `<script>` 放在 `</body>` 前 | ✅ 推荐 | ❌ 否 | ✅ 是 | 默认推荐方式 | | `<script defer>` 在 `<head>` | ✅ | ❌ 否 | ✅ 是 | 需要提前加载 JS | | `<script async>` 在 `<head>` | ⚠️ | ❌ 否 | ❌ 否 | 不依赖 DOM 的脚本 | | `<script>` 在 `<head>` | ❌ | ✅ 是 | ❌ 否 | 不推荐,易出错 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值