美文网首页
第一章:加载和运行

第一章:加载和运行

作者: Ching_Lee | 来源:发表于2019-06-17 14:12 被阅读0次
  • 1.javascript具有阻塞特征,<script>标签出现,会停止页面的下载和解析,等待脚本执行,因为脚本可能在运行过程中修改页面内容。
  • 2.脚本位置
<html>
<head>     
     <title>Script Example</title>     
     <-- Example of inefficient script positioning -->     
     <script type="text/javascript" src="file1.js"></script>     
     <script type="text/javascript" src="file2.js"></script>     
     <script type="text/javascript" src="file3.js"></script>     
     <link rel="stylesheet" type="text/css" href="styles.css">
</head>   
<body>     
    <p>Hello world!</p>   
</body> 
</html> 

存在的性能问题:
浏览器在遇到body之前,不会渲染页面的任何部分,head部分加载了三个js文件,每个<script>标签阻塞了页面的解析,直到它完整的下载并运行了js代码之后,页面才会继续进行。这就会导致,页面打开时,首先是一个空白的页面。


推荐的方法:

  • 将所有script标签尽可能接近<body>标签底部,尽量减少对整个页面下载的影响。

  • 下载一个100kb的文件比下载四个25kb的文件要快,减少引用外部文件的数量,将多个js文件整合成一个,可以使用打包工具。

  • 3.defer属性:
    指明元素中所包含的脚本不打算修改DOM,因此代码可以稍后执行。

<script type = "text/javascript" src="file1.js" defer></script>

带有defer属性的<script>标签可以放置在页面任何位置,对应的Javascript文件在<script>标签被解析时启动下载,它不会阻塞浏览器的其他处理过程,这些文件可以与页面的其他资源一起并行下载。这些代码的执行时机在页面解析完后,但在 DOMContentLoaded事件之前。

  • 4.async属性
<script type="text/javascript" src="demo_async.js" async="async"></script>

async属性同defer属性相同的地方在于,可以被放到任何位置,当遇到<script>标签时开始启动下载,并且不会阻塞浏览器的其他处理过程。

不同的地方在于,带有async标签的脚本一旦下载完成就开始执行(当然是在window的onload之前),执行也是异步的不会阻塞浏览器的其他处理过程。这意味着这些script 可能不会按它们出现在页面中的顺序来执行,如果你的脚本互相依赖并和执行顺序相关,就有很大的可能出问题。

相关文章

  • 第一章:加载和运行

    1.javascript具有阻塞特征, 标签出现,会停止页面的下载和解析,等待脚本执行,因为脚本可能在运行过程中修...

  • 类加载流程

    类加载流程 加载阶段 加载阶段分为 虚拟机启动加载和运行时期加载。 虚拟机启动加载:加载JAVA_HOME/lib...

  • 《Scala程序设计(Ver.2)》读书笔记

    第一章 命令行中使用:load命令来加载(编译并运行)文件(脚本文件):scala> :load example....

  • spring boot热部署和资源文件读取

    热部署和热加载 热部署在服务器运行时从新部署项目,一般在生产环境的使用。热加载在运行时重新加载class ,在开发...

  • tomcat-1

    tomcat-1 tomcat 热部署和热加载 热部署和热加载可以在运行过程中不重启系统升级WEB应用。 热加载 ...

  • 3.jvm加载机制

    一、类装载子系统 加载过程 加载 预加载:加载rt.jar,里面是一些常用的类lang包和io包 运行时加载 连接...

  • 关于前端性能优化

    前端性能优化主要关注的点就是速度,具体分为加载性能和运行性能。 加载性能 检查加载性能可以参考window.per...

  • 类加载器和双亲委派机制

    类加载器 什么是类加载器类加载器加载的是.clss文件,至于能否运行不由类加载器负责。相当于连接了.class和j...

  • Java反射 - 动态类加载和重载

    可以使用Java在运行时加载和重新加载类,虽然它不像人们希望的那样简单。 本文将解释何时以及如何在Java中加载和...

  • SpringBoot2.0深度实践学习笔记(五)之 Spring

    SpringApplication运行阶段加载:SpringApplication 运行监听器运行:SpringA...

网友评论

      本文标题:第一章:加载和运行

      本文链接:https://www.haomeiwen.com/subject/ruzatqtx.html