javascript - 准备好 100 个文件比准备好 1 个文件好还是坏?

标签 javascript jquery pagespeed

只是想知道 document.ready 调用的数量是否会影响页面加载速度。 Gulp/Grunt 有没有办法通过删除单独的文档就绪函数来丑化/缩小 JS?

最佳答案

检查一下!

我没有发现 Chrome 有什么显着差异。
据我所知,它对 IE8 很关键,但没有检查这个事实。
IE11 在第一个片段上显示 2 秒,而其他片段只需要 200 毫秒。

此外,jQuery 似乎已经聚合了加载事件。

不要忘记

  1. 当您在一个选项卡中运行相同的代码时,浏览器会记住一些东西并更快地运行它。
  2. 重新加载页面是不够的。而是打开一个新标签页。
  3. 打开新标签页后,以不同顺序运行代码段。
  4. 如果片段首先在选项卡上运行,与其他三个相比,它会进一步减速。

for (var q=0; q<1000; ++q) {
  document.addEventListener('DOMContentLoaded', (function (i) {
    console.log(i);
  }).bind(null, q));
}

document.addEventListener('DOMContentLoaded', function () {
  document.querySelector('output').textContent = performance.now().toFixed(3);
});
<output></output>

document.addEventListener('DOMContentLoaded', function () {
  for (var q=0; q<1000; ++q) {
    (function (i) {
      console.log(i)
    }).bind(null, q)();
    
    document.querySelector('output').textContent = performance.now().toFixed(3);
  }
});
<output></output>

for (var q=0; q<1000; ++q) {
  $((function (i) {
    console.log(i);
  }).bind(null, q));
}

$(function () {
  document.querySelector('output').textContent = performance.now().toFixed(3);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<output></output>

$(function () {
  for (var q=0; q<1000; ++q) {
    (function (i) {
      console.log(i)
    }).bind(null, q)();
    
    document.querySelector('output').textContent = performance.now().toFixed(3);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<output></output>

Maybe it's just me as a JavaScript avoider, but none of the scripts have document.ready inside. If you JS guys talk about document.ready, that's a synonym for addEventListener('DOMContentLoaded')?

有两个事件:DOMContentLoadedload (window.onload)。第一个发生在 body pasring 完成时,但一些 Assets 仍在加载。第二个 - 当页面完全加载时。第一个非常适合运行带有 dom 操作的脚本,但浏览器并不总是支持它。

所以 jQuery 使用这两个事件中的第一个,经典的订阅形式是

$(document).ready(function () {
  // ...
});

但在某些版本之后,if 被简化为将函数直接传递给 jQuery:

$(function () {
  // ...
});

所以在 vanilla 示例中,我使用了 2 个事件中的第一个,而在 jQuery 示例中,我使用了简短的订阅形式。由于不支持此事件的浏览器是 very old假设 jQuery 始终使用 DOMContentLoaded 是正确的(可能 load 方式在版本 2 中被删除 - 没有检查它,但没有理由将它保留在那里)。

关于javascript - 准备好 100 个文件比准备好 1 个文件好还是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39223795/

相关文章:

javascript - jquery显示/隐藏按钮标题

html - 为响应式布局修复 Google PageSpeed 的 "Serve scaled images"

javascript - 预加载所有类型图像的最佳方式是什么?

javascript - 无法在 javascript 中的嵌套对象/数组中正确循环

javascript - 定位没有类的 div

javascript - 如何解决并非所有代码路径都返回值的问题?

javascript - 创建选取框样式动画

javascript - 创建一个不会调整其内容大小的 Div 容器

.htaccess - mod_pagespeed : Exclude some directory using htaccess

javascript - 如何使 html div 在其高度达到页面的 100% 高度后垂直滚动?