嵌入与包含用于DOM交互的Javascript?

嵌入与包含用于DOM交互的Javascript?,javascript,dom,requirejs,separation-of-concerns,Javascript,Dom,Requirejs,Separation Of Concerns,每一本Javascript初学者指南都会谈到嵌入式脚本的弊端 我明白了:对于没有模块化设计概念的新手来说,这绝对是个好建议。但是每一条规则都有一个例外,由于我对web开发(但不是一般的开发)相当陌生,我想问一下以下是否是一个好的例外: 我正在服务器端使用MVC(Django,记录在案)构建一个web应用程序,并要求客户端使用.js来管理应用程序逻辑脚本。我很小心地将这些脚本保持为DOM不可知 对我来说,将剩余的DOM交互代码直接嵌入到定义该DOM的服务器端HTML模板中是有意义的。创建单独的JS

每一本Javascript初学者指南都会谈到嵌入式脚本的弊端

我明白了:对于没有模块化设计概念的新手来说,这绝对是个好建议。但是每一条规则都有一个例外,由于我对web开发(但不是一般的开发)相当陌生,我想问一下以下是否是一个好的例外:

我正在服务器端使用MVC(Django,记录在案)构建一个web应用程序,并要求客户端使用.js来管理应用程序逻辑脚本。我很小心地将这些脚本保持为DOM不可知

对我来说,将剩余的DOM交互代码直接嵌入到定义该DOM的服务器端HTML模板中是有意义的。创建单独的JS文件,这些文件非常小,并且和模板的内容紧密耦合,这让人觉得不必要。我错了吗


假设您已经将所有应用程序逻辑都很好地隐藏在外部文件中,那么在HTML中嵌入几行jQuery以将该逻辑连接到DOM真的很糟糕吗?

如果您有只适用于一个页面的JS,但没有太多,那么是的,我会把它直接放在页面中,而不是作为一个单独的JS包含

如果你有很多只适用于一个页面的JS,那么一个单独的JS include会给你一个优势,那就是(在第一次请求之后)它将位于浏览器缓存中,而不是每次用户刷新该页面时都被下载。因此,在这种情况下,我可能会坚持使用外部JS文件


在决定在一个特定的html页面中包含JS之后,我更喜欢将其作为一个单独的块包含在头部或正文的末尾——我不想在html中搜索隐藏在标记中的多个小脚本块。另外,如果我以后决定将脚本移动到外部文件,那么这样做很容易。

请参阅本文,了解它的发展方向,特别是有关谷歌Angular js的评论

请参阅此比较以进行彻底的测试和比较


看来DOM模板可能是未来的趋势。我很好奇,为什么让服务器生成所需文件的列表,然后将列表发送给客户端,然后客户端运行脚本,通过插入脚本元素加载文件,而不是让服务器使用(它生成的)列表创建客户端用于加载脚本的标记?结果是相同的-从列表创建的一组脚本元素。我的首选是让服务器在标记中执行,因为这样可能更高效。主要是为了缓存目的。随着时间的推移,我可以看到该站点包含更多AJAX提供的内容。在处理这些请求时,我不希望服务器发送冗余的脚本标记,也不希望服务器知道客户端已经加载了哪些脚本。对于第一次访问的人来说,这可能是一个缺点,但在我的书中,随后的缓存速度(加上开发的简易性)弥补了这一缺点。将脚本元素放在HTML中更有效,并且适用于所有发布的浏览器。通过脚本插入它们会带来不需要承担的风险,并且不会带来任何好处。好吧,如果有很多AJAX响应,而服务器无法对客户端已经执行的脚本进行太多假设,那么会不会导致大量已经执行的脚本元素在客户端上冗余运行(例如,函数定义)?我更喜欢一种语言处理复杂的include语句(即缓存依赖项)的环境,RequireJS给了我这种环境。因为它早在IE6就可以工作,所以我不太关心兼容性。我应该说,这些嵌入块中的许多都将生活在“内部模板”中页面级模板将包括服务器端。因此,在特定的模板文件中,是的,嵌入的JS将位于单个块中,但完全呈现的页面将包含多个脚本块。我并不认为这是开发目的的问题,但我想明确地解释我的情况。我说“我更喜欢……一个街区”,而不是“我会坚持一个街区”-实际上,你必须运用一些常识,做适合你的事情。在我看来,有些人把整个“关注点分离”的事情看得太远了,以至于他们的目标是实现一个特定的“理想”“设计模式,而不是实现用户真正需要的东西。