【问题标题】:Does javascript execute if no function is called?如果没有调用任何函数,javascript 会执行吗?
【发布时间】:2013-04-10 20:10:56
【问题描述】:

我有一些带有 javascript 代码的 wordpress 页面需要 javascript 文件引用。对于不调用这些 js 文件引用中的函数的页面,包含这些文件(文件调用除外)应该不会影响性能吧?

-- 编辑以响应@cdhowie--

如果只有某些页面需要这些 javascript 文件,是否可以将它们移出 head 部分并进入页面?我读过这是不好的做法。

但从理论上讲,这可以防止整个站点因未使用的文件而受到性能影响?

【问题讨论】:

  • 如果一棵树倒在森林里,而周围没有人听到它,它会发出声音吗?
  • @Ian 在这种情况下,是的。
  • @cdhowie 我什么都没听到。
  • @Ian 但是浏览器做到了。 :)
  • 点击离开的访问者也是如此。

标签: javascript performance wordpress


【解决方案1】:

在这两种情况下,引用的 JavaScript 文件将被下载(或从缓存中获取),然后由浏览器的 JavaScript 解释器执行。需要执行“JavaScript 文件引用”以创建您可能使用的变量和函数,并且浏览器无法提前知道您是否会使用它们。此外,包含的文件实际上可能会操纵文档,而浏览器在执行它们之前也不知道这一点。

所以是的,无论您是否调用这些函数,都会对性能产生影响。它是否足以让您担心是您必须确定的事情。 (在做出这样的决定之前,请务必分析您页面的加载时间!)

【讨论】:

  • 但只要你不调用函数,你应该没问题(大部分)
  • @4thSpace HTML 中外部链接的规则是“在页面中声明您的 CSS 链接尽可能高,而您的 JavaScript 在页面中尽可能低。”无论哪种情况,您的脚本标记都应位于文档的末尾,就在</body> 之前——首先是您需要的库,然后是您自己的 JavaScript 文件/代码。
  • 将js文件引用移动到页面底部,如果页面中的js没有执行怎么办?
  • @cdhowie 如果您的脚本只有几行并且您不关心页面加载时间 - 几行代码的毫秒或更低范围(大多数人不这样做) ,那你应该没事。 4thSpace 一旦你有一个脚本标签作为你的页面的一部分,它总是会被 JavaScript 解释器读取,即使你可能没有调用这个函数。就像随身携带钱包一样,即使您可能在某一天没有调用信用卡、现金或驾照功能,它仍然会增加您的体重。
  • @4thSpace 然后你把它们放错了顺序。您的脚本应该始终位于您需要的库之后的底部。您的代码不应与页面内容混合;这太傻了。
【解决方案2】:

Javascript 函数只有在您显式调用它们时才会执行(或在回调等中隐式调用)。然而,无论是否调用函数,浏览器仍然会在每个页面上解释代码。

编辑: 我说性能影响无关紧要是错误的。这实际上完全取决于您的具体情况(代码来自哪里、代码量等)以及您对性能的关心程度(以毫秒为单位)。

一个可能的“性能”问题是这些额外的 .js 文件是否在您的服务器上。如果是这样,并且您在不需要时加载它们,那么您将导致服务器不需要的流量和带宽。

【讨论】:

  • 我明白了,您不同意@cdhowie 的回应?
  • 不,实际上我同意他所说的。我们的答案是指两个不同的事情。我只是说,如果您在文件中包含 Javascript 代码,但从未显式调用该代码中包含的任何函数,那么您将获得比从未包含代码时最差的性能。但是,我是说这种性能影响非常小。另外,我指的是如果您正在加载不需要的文件,那么您在服务器上添加了不必要的负载。
  • @DevinLynch 但我认为包含对外部 Javascript 文件的引用(甚至不使用它)是可能的最大性能损失......因为它必须发出单独的 HTTP 请求并加载(可能)大文件,它也必须被解释,并且什么都不做。网络通常是瓶颈,而不是浏览器。如果代码是内联在 HTML 中,那么它不会是那么大的负担,因为没有单独的 HTTP 请求。
  • @Devin: cdhowie 是说外部文件的内容将被执行(不仅仅是解析),即使文件中没有页面 js 调用函数。但你说情况并非如此。你是说文件只会被解析。我相信您不同意 cdhowie 所说的话……除非你们俩的意思是执行 == 已解析???
  • @4thSapce:如果 cdhowie 说一个封闭的函数被执行,即使它没有在代码中的某处显式或隐式调用,那么是的,我不同意他的观点。我认为他在谈论封装代码时是在谈论全局代码,因为您在问题中提到了“调用函数”
【解决方案3】:

这将执行,但占用很少的 cpu 时间

<script type="text/javascript">
   // just a comment
</script>

没有函数,只是一个注释......但它仍然是“代码”,仍然需要解析,仍然需要检查语法错误等等......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2020-07-22
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多