是否存在组织Javascript代码的最佳方法?
Is there a best way to organize Javascript code?
我一直在做一个小的web应用程序,使用jQuery在Javascript中添加行为和追加DOM对象。问题是,代码开始增长非常快,我不知道在哪里存储它(无论是在同一页,它正在使用,或在一个大的js文件)。现在,我有:
- 1 js文件与一个对象存储一些从服务器,与最重要的方法(应该跨应用程序)。其中之一方法包含一个DOM元素生成器(然后我从
- 1 js文件中有一个大方法当窗口时调用。准备好了吗?行为到一堆DOM对象(只与一个网页相关)。
- 一些标签已填满而页面上的代码却没有使用第二个js文件。此代码也是网页相关的。
现在,你的眼睛可能会杀了我,我知道。这绝对不是一个好的(或者至少是不一致的)存储Javascript的方式。所以,我的问题是:
是否有组织Javascript代码的最佳方法?
我想至少我应该遵循一个规则,虽然问题是,我不确定是否最好有一个js文件的所有"全局数据和方法",然后存储在较小的js文件或其他的,或者干脆放弃,去喝茶。
你们觉得怎么样?提前感谢!
PS:显然代码重用是一个很好的观点。然而,我将重用最多的脚本保存在第一个js文件中(具有全局内容的那个)。
我通常将全局脚本存储在单个公共文件中,每个页面都有其单独的脚本文件。
您可以将页面特定的脚本文件与页面一起存储(在同一个文件夹中),或者在一个公共的"脚本"文件夹中复制站点的目录结构(如果您有许多许多脚本文件很有用),这两种方式我都将脚本文件命名为它们的页面对应,以使映射更容易。
还可以使用名称空间进一步组织代码。
这个问题没有明确的答案,但有一点要记住,如果你把尽可能多的javascript放在外部文件中,它可以被缓存,这将使后续访问页面的速度更快。
我倾向于遵循的规则是:
- 所有可以在多个地方使用的代码都放在外部文件 没有外部文件包含实际做任何事情的代码,这些文件作为我可以使用的代码库。
- 页面本身包含最小的javascript代码来初始化我的库中的代码。
- 如果这个初始化代码需要超过10行左右的代码,那么值得考虑将其放入库 中的函数/方法中。
- 所有javascript都尽可能靠近页面底部,就在
</body>
标签之前。这是因为当浏览器遇到<script>
标记时,它将停止呈现页面并在继续之前评估脚本。这会让用户感觉页面变慢(尽管在加载时间上没有实际的区别,感知很重要!) - 只有绝对必须放在头部的脚本才会被放在那里,原因如上所述。
编辑:如果你在一个页面中包含很多javascript文件,那么值得考虑将它们合并到一个文件中。这是因为页面中的每个<script src="...">
标记都会触发一个HTTP请求,并且规范说在任何时候每个域只能有两个请求打开。将它们放在一个文件中还可以增加使用JS压缩器(如closure或YUI)的好处,以及使用mod_gzip
yslow是一个很好的工具,用于确定优化以加速页面加载,它提供了大量关于javascript文件优化的建议。
如果您使用面向对象的设计策略,那么"代码放在哪个文件中"的答案几乎会自己回答。
javascript的主要部分(类定义和大量方法)应该放到适当的.js文件中(类定义通常有自己的.js文件)。但是初始化代码应该放到使用它们的HTML页面中。 jQuery提供了一个很好的例子:它有自己的.js文件用于主类和函数定义,它允许你添加执行特定任务的插件,每个插件都在自己的。js文件中。
一旦你想使用jQuery,只需添加jQuery脚本。想要这个插件在这个页面上吗?
我想我理解你的问题,所以你可以用模块组织你的代码,这些模块将在一个文件中连接。
对于模块,你可以使用CommonJS技术。它看起来像这样:
(function(window) {
var Module = {};
window.Module = Module;
})(window);
,除了:
(function(module) {
module.NewProp = {};
})(window.Module);
当然,你可以用你自己的变量来代替window等
并且,如果你将使用Node.js -它是在服务器和客户端之间共享变量的好方法。
(function(exports) {
exports.Func = function(){};
})(typeof exports === 'undefined' ? wow : exports);
希望有帮助!
- 有条件更新d3.js力图中节点的最佳方法
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 从数组中删除元素的最佳方法是:javascript/jquery
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 列出没有 mysql 的元素的最佳方法是什么
- 在jquery库中重新定义方法的最佳方法
- Javascript,用vars创建对象的最佳方法
- 使用 jQuery 从 HTML 中获取某些值的最佳方法
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用jasmine测试JavaScriptUI的最佳方法
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 在 JavaScript 中获取范围的随机数的最佳方法
- 在对象类上实现 jquery 作用域的最佳方法
- 将同步函数包装到承诺中的最佳方法是什么?
- 使用 MVC 删除 JavaScript 中硬编码字符串 Asp.Net 最佳方法