当前位置: 首页 > 面试题库 >

jQuery:如果在页面底部使用外部JS,为什么还要使用document.ready?

太叔景曜
2023-03-14
问题内容

我将所有JS作为外部文件包括在内,这些文件在页面的底部加载。在这些文件中,我定义了几个这样的方法,我从ready事件中调用它们:

var SomeNamepsace = {};

SomeNamepsace.firstMethod = function () {
    // do something
};

SomeNamepsace.secondMethod = function () {
    // do something else
};

$(document).ready(function () {
    SomeNamepsace.firstMethod();
    SomeNamepsace.secondMethod();
});

但是,当我删除ready函数并直接调用方法时,所有工作原理都相同,但是执行起来明显更快—在一个漂亮的基本文件上,几乎快了一秒钟!由于应该在此时加载文档(因为所有标记都在script标记之前),是否有充分的理由仍然使用ready事件?


问题答案:

好问题。

整个“页面底部的放置脚本”建议及其尝试解决的问题都有些混乱。对于这个问题,我不会谈论在页面底部放置脚本是否会影响性能/加载时间。我只说说是否还需要$(document).ready在页面底部放置脚本

我假设您在那些立即在脚本中调用的函数中引用了DOM(任何简单的方法如documentordocument.getElementById)。我还假设您仅在询问这些[DOM-referencing]文件。IOW,库脚本或您的DOM引用代码所需的脚本(如jQuery)需要放在页面的前面。

要回答您的问题 :如果您在页面底部添加了DOM引用脚本,则不需要$(document).ready

说明
没有"onload"$(document).ready拇指法则这样的相关实现的帮助,是:与页面内的DOM元素交互的任何代码都应比其所引用的元素放置/包含在页面的下方。最简单的方法是将该代码放在结束之前</body>。看到这里和这里。它也可以解决IE令人恐惧的“操作中止”错误。

话虽如此,但这绝不会使的使用无效$(document).ready。在加载对象之前引用对象是从DOM
JavaScript开始时最常犯的错误之一(见证了很多次以至于无法计算)。这是jQuery的解决方案,它不需要您考虑与该脚本所引用的DOM元素有关的位置。对于开发人员来说,这是一个巨大的胜利。他们要做的只是减少一件事。

另外,将所有DOM引用脚本移到页面底部通常很困难或不切实际(例如,发出document.write呼叫的任何脚本都必须保留)。有时,您使用的是呈现某些模板或创建动态JavaScript的框架,其中引用了需要在js
之前 包含的功能。

最后,它曾经是将所有DOM引用代码塞入其中的“最佳实践”window.onload,但是由于文档原因,它已被$(document).ready实现掩盖了。

所有这些加起来$(document).ready是对过早引用DOM元素的问题的一种优越,实用和通用的解决方案。



 类似资料:
  • 问题内容: Angular对于构建单页应用程序非常有用。它基本上建立在当前范例上,在该范例中我们向不同的端点发出请求,以帮助我们创建更好的单页应用程序。 另一方面,我们拥有的Meteor似乎更加强大,特别是因为它们具有称为DDP的功能,该功能基本上允许双向数据流。看来Meteor是Angular的超集,并且显然是更好的选择。 尽管Angular确实提供了一些诸如测试和本地化之类的功能,但我只是不明

  • 编写 jQuery 插件与向 jQuery.prototype(通常显示为 $.fn)添加方法一样简单,且需要遵循一些简单的规则,比如返回 this。所以为什么会存在部件库(Widget Factory)? 在本章节中,我们将讲解部件库(Widget Factory)的好处,并了解何时使用它,以及为什么要使用它。 无状态 vs. 有状态插件 大多数 jQuery 插件是无状态的,它们执行一些动作即

  • 我理解为什么文件提供商可以在控制权限的同时,将一个应用程序的私有文件(应用程序内部存储中的文件)共享给另一个应用程序。 文档解释了它如何也可以用来共享外部存储(SD卡等)中的文件: <代码> 而不是 <代码> (https://developer.android.com/reference/android/support/v4/content/FileProvider.html) 这有什么意义?为

  • 问题内容: 我试图了解是什么使并发锁如此重要,如果可以使用的话。在下面的虚拟代码中,我可以执行以下任一操作: 同步了整个方法或同步了易受攻击的区域() 或使用ReentrantLock锁定易受攻击的代码区域。 码: 问题答案: 一个ReentrantLock的是非结构化的,不像结构-即你不需要使用块结构锁,甚至可以举行跨越方法的锁。一个例子: 这样的流程不可能通过构造中的单个监视器来表示。 除此之

  • 问题内容: 我有以下两个javascript函数: 1 2 我想将它们放在外部“ .js”文件中 1 2 调用这些函数的正确语法是什么? 问题答案: 像这样的代码 希望对您有帮助。…谢谢

  • 本文向大家介绍如何在页面引用外部的html页面?相关面试题,主要包含被问及如何在页面引用外部的html页面?时的应答技巧和注意事项,需要的朋友参考一下 1.是完整的页面。拥有,。使用 2.是一个页面片段。使用请求。或者使用