【发布时间】:2011-11-26 18:51:45
【问题描述】:
注意:我现在创建了一个 jQuery 插件,这是我尝试解决这个问题的方法。我确信它可以改进,我可能忽略了很多用例,所以如果有人想提供反馈,请随时:-) https://github.com/WickyNilliams/ReadyBinder
我没有这样的问题,但认为这将是一个有趣的讨论点,我希望人们对此有一些有趣的想法。
基本上,我在一个大型网站上工作,并且我们正在编写越来越多的 JavaScript。这很好,我喜欢 JS 的独特方法,并且我发现该语言的一些较暗的编年史中的古怪是可爱的 ;-) 然而,一直困扰我的一件事是如何管理文档就绪事件,因为它们变得越来越大随着时间的推移(因此对所服务页面的关注度/特定性降低)
问题是我们有一个 JS 文件(合并和缩小,尽管这对我的问题来说无关紧要)。大多数 JS 都是使用显示模块模式编写的,而 jQuery 是我们选择的框架。所以我们所有的 JS 功能在逻辑上被分组为方法,命名空间,然后在脚本文件的底部我们有这个
$(function(){
//lots of code here, usually calling encapsulated methods
//on our namespaced revealing module
});
问题在于,并非此文档就绪处理程序中的所有代码都适用于每个页面。例如,在一个页面上可能只有 10% 的内容是相关的,而在另一个页面上可能有 80% 是相关的。对我来说,这感觉非常错误,我觉得我应该只执行每页需要的代码,主要是为了效率,也是为了可维护性。
我在谷歌上搜索过解决这个问题的方法,但找不到任何东西,也许我只是在寻找错误的东西!
无论如何,所以我的问题是:
- 有人想过这个问题吗?
- 这真的是其他人认为的问题吗?
- 您的代码中是否有一个大型、包罗万象的文档就绪处理程序,还是更专注于所服务的页面类型?
- 如果是后者,您如何管理?多个处理程序在 JS 中切换或在服务器端动态吐出文档就绪处理程序?
期待大家对此事的看法。
干杯
【问题讨论】:
-
这并不完全相关,因为我不关心脚本加载,而是如何限制在准备好文档时执行的代码量(特别是如果你的所有 JS 都合并到一个文件中,虽然单独的文件也将是有益的)
-
坦率地说,您甚至不应该加载您不会使用的代码。我建议查看require.js 或head.js。
-
预取是一种非常有效的方法。预先加载所有(或至少大部分)代码可以节省后续请求的未来带宽使用。然而,requireJS 正在解决一个不同的问题——脚本加载。您仍然需要一种管理文档就绪处理程序的方法。事实上 requireJS 会与我的建议一起工作,而不是与我的建议竞争。您可以让相关文档就绪代码(我正在尝试解决的问题)动态加载他们需要的脚本,然后再将脚本用于任何目的(requireJS 试图解决的问题)
标签: javascript jquery maintainability document-ready