浏览器是在Javascript文件中读取/存储所有内容还是只读取所需内容?

时间:2015-11-11 22:07:27

标签: javascript html optimization browser

这就是我要问的问题:

假设我在我的网站上

<script type="text/javascript" src="global.js"></script>
<script type="text/javascript">
    someFunction();
    someOtherFunction();
</script>

并假设someFunctionsomeOtherFunction是页面上使用的唯一函数,并且是global.js中10,000个函数中的2个。显然,在这种情况下,浏览器会更好,仅查看global.js中的那两个函数,并跳过不依赖于它们的所有内容,但以下哪种方式实际上是浏览器解析JS的方式? / p>

  1. JS引擎接受它遇到的每个函数定义并将其转换为机器代码,然后在需要时使用它
  2. JS引擎查找函数的使用,然后查找它们的定义并构建机器代码并在需要时使用该函数(包括它找到的用例)

2 个答案:

答案 0 :(得分:0)

1

  

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

将global.js的整个文本源加载到内存中。在当前的全局环境中解析并执行任何JavaScript代码。

2

<script type="text/javascript">
 someFunction();
 someOtherFunction();
</script>

在当前的全局环境中查找名为someFunction()的函数并调用它。接下来查看名为someOtherFunction()的函数的当前全局环境并调用它。完全没有关于它们在何处或如何定义的线索。

总而言之,浏览器将获取整个文件并解析并预先执行所有包含的代码,因为这是语言的设计。它不会期待或编译&#34;一次性页面中的所有JavaScript代码。

答案 1 :(得分:0)

这是一个很好的问题!

作为对您的问题的回答,#1 是最正确的,因为在脚本加载期间解释器确实解析了所有函数,而不仅仅是包含脚本引用的函数。

首先,只要include语句执行整个JS文件就会加载到客户端的浏览器缓存中。此时,global.js被浏览器的Javascript引擎解析解释执行。然后,在global.js中声明的任何全局函数和变量都可以被包含的脚本使用。

然而,重要的是要注意,没有Javascript被编译成机器代码,而是根据ECMA标准进行词法分析和解释

有关脚本加载的更多信息,请查看html5rocks上的这个优秀资源:Script Loading