码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JavaScript 到底放在哪个位置,不同位置效果又是怎么样


    前言

    一般script标签会被放在头部或尾部。

    头部 就是 里,尾部 一般指里


    为什么建议script放在尾部

    将script放在里,浏览器解析HTML,发现script标签时,会先下载完所有这些script,再往下解析其他的HTML,在这个过程中就会导致后面的代码等待JS下载解决。

    JS并发一起下载的。不管JS是不是来自同一个host,浏览器最多只能同时下载两个JS

    script放在头部,会让网页内容呈现滞后,导致用户感觉到卡。

    所以script建议放在尾部(标准做法你是放在body里面的尾部,放在外面是不标准的至于为什么建议Google)。


    备注:放body在有的时候也不是最优解

    所谓编程无绝对,将script放在尾部的也有缺点

    这是因为放尾部浏览器只能先解析完整个HTML页面,再下载JS。而对于一些依赖于JS的网页,就会出错。

    所以,将script放在尾部也不是最优解,也可能在某些情况下是万万不能的,具体位置还是要具体分析。

    一般的原则是页面使用script放最后,插件例如jQuery放里。


    实现下载JavaScript的同时进行HTML渲染

    更modern的方式:使用async和defer

    这两个属性能让浏览器做到一边下载JS(还是只能同时下载两个JS),一边解析HTML。

    普通 script

    <script src="first.js"></script>
    
    • 1

    处理方式:

    • 停止解析 document.
    • 请求 a.js
    • 执行 a.js 中的脚本
    • 继续解析 document

    defer

    <script src="first.js" defer></script>
    <script src="second.js" defer></script>
    
    • 1
    • 2

    处理方式:

    • 不阻止解析 document, 并行下载 d.js, e.js
    • 即使下载完 d.js, e.js 仍继续解析 document
    • 按照页面中出现的顺序,在其他同步脚本执行后,DOMContentLoaded 事件前 依次执行 d.js, e.js。

    async

    <script src="first.js" async></script>
    <script src="second.js" async></script>
    
    • 1
    • 2

    处理方式:

    • 不阻止解析 document, 并行下载 b.js, c.js
    • 当脚本下载完后立即执行。(两者执行顺序不确定,执行阶段不确定,可能在 DOMContentLoaded 事件前或者后 )

    结论

    • 两者都不会阻止 document 的解析
    • defer 会在 DOMContentLoaded 前依次执行js文件下载
    • async 则是下载完立即执行,不一定是在 DOMContentLoaded 前
    • async 因为顺序无关,所以很适合像 Google Analytics 这样的无依赖脚本
  • 相关阅读:
    人脸识别5.2- insightface人脸3d关键点检测,人脸68个特征点、106个特征点;人脸姿态角Pitch、Yaw、Roll、
    数据结构之顶层父类的创建
    快速入门Flask微服务架构
    深入理解注意力机制(下)——缩放点积注意力及示例
    计算机网络协议栈:物理层 | 信道通信
    文献学习-19-基于dVRK平台的机器人柔性内窥镜的外科医生偏好引导自主器械跟踪方法
    Systemd&&Sysvinit
    猿创征文|【Vue五分钟】 Vue Cli脚手架创建一个项目
    【软件项目管理】敏捷软件开发 —— Scrum模式
    ROS Rviz插件制作案例(以多点连续导航插件为例)
  • 原文地址:https://blog.csdn.net/weixin_35773751/article/details/126749229
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号