你把javascript放在哪里?

你把javascript放在哪里?,javascript,Javascript,您是否将javascript本地化到该页面,或者是否有主应用程序“application.js”或类似程序 如果是后者,那么确保.js没有在错误的页面上执行的最佳实践是什么 编辑:javascript是指作为开发人员编写的自定义javascript,而不是js库。我无法想象有人会将jQuery源代码复制/粘贴到他们的页面中,但你永远不会知道。就我个人而言,我尝试包含几个Javascript文件,按模块()排序。但偶尔,当我写一行时,我会把它放在页面上。最好的做法可能是把它放在页面上 (这取决于你

您是否将javascript本地化到该页面,或者是否有主应用程序“application.js”或类似程序

如果是后者,那么确保.js没有在错误的页面上执行的最佳实践是什么


编辑:javascript是指作为开发人员编写的自定义javascript,而不是js库。我无法想象有人会将jQuery源代码复制/粘贴到他们的页面中,但你永远不会知道。

就我个人而言,我尝试包含几个Javascript文件,按模块()排序。但偶尔,当我写一行时,我会把它放在页面上。

最好的做法可能是把它放在页面上


(这取决于你所说的“你的”javascript是什么意思,我想:)

将所有的js放在一个文件中可以提高性能(只有一个请求而不是几个请求)。如果您使用Akamai这样的内容分发网络,则可以提高缓存命中率。另外,始终在页面的最底部(就在body标记的上方)抛出内联js,因为这是同步执行的,可能会延迟页面的呈现

是的,如果你正在使用的一个js文件也托管在google上,请确保使用该文件。

以下是我的“指南”。请注意,这些都不是正式的,它们似乎是正确的做法

所有共享的JS代码都存在于
SITE/javascripts
目录中,但它加载在“tiers”中

对于站点范围的内容(如jquery或我的站点范围的application.js),站点范围的布局(这将是ASP.net中的母版页)包括该文件。
脚本
标记位于页面顶部

还有“区域范围”的东西(例如:js代码,它只在站点的管理部分需要)。这些区域要么具有公共布局(然后可以包含脚本标记),要么将呈现公共部分,并且该部分可以包含脚本标记)

对于共享较少的内容(比如说我的库,它只在少数地方需要),然后我在这些HTML页面中分别放置一个
script
标记。脚本标记位于页面顶部

对于只与单个页面相关的内容,我只编写内联javascript。我试着让它尽可能接近它的“目标”。例如,如果我有一个按钮的onclick js,那么
脚本
标记将位于按钮下方

对于没有目标的内联JS(例如:
onload
events),它位于页面底部


那么,一些东西是如何进入本地化的库或站点范围的库的呢

  • 当你第一次需要它时,把它写进行内
  • 下次需要时,将内联代码拉到本地化库中
  • 如果从(大约)3个或更多地方引用本地化库中的某些代码,请将代码向上拉到区域范围的库中
  • 如果需要来自多个区域的数据,请将其拉到站点范围的库中
对于这样一个系统,一个常见的抱怨是,您最终会得到10或20个小JS文件,从网络的角度来看,其中2或3个大JS文件的性能会更好。 但是,rails和ASP.NET都有一些功能,可以处理将多个JS文件组合并缓存到一个或多个“超级”JS文件中,以满足生产环境的需要


我建议使用这样的特性,而不是损害实际源代码的质量/可读性。

我尽量避免在呈现页面上放置javascript函数。通常,我有一个application.js(或root.js),它具有菜单操作等通用功能。如果给定页面具有特定的javascript功能,我将创建一个.js文件来处理该代码,并模拟如何访问该文件的dir结构(也使用与呈现文件相同的名称)


换句话说,如果呈现的页面位于public/dir1/dir2/mypage.html中,那么js文件将位于public/js/dir1/dir2/mypage.js中。我发现这种风格很适合我,尤其是在网站上做模板时。我构建了一个模板引擎来“自动加载”我的资源(css和js),方法是获取请求路径,并在根目录的css和js目录中检查css和js的等价物。

对JavaScript的性能提出了一些很好的建议。他曾经是那个团队的一员(他现在在谷歌),他写了一些可以帮助你决定把JavaScript放在哪里的东西。

这也是我一直在努力解决的问题。最后,我使用后端PHP脚本根据用户请求的内容智能地构建了一个所需JS文件列表

通过将我的JS文件组织到一个存储库中,该存储库包含按用途组织的多个文件(无论是通用文件、针对单个页面的焦点文件、单个部分文件等),我可以使用在后端构建页面的事件链,根据需要选择性地选择包含哪些JS文件(参见下面的示例)

这是在实现我的web应用程序之后,没有充分考虑代码的这一方面。现在,我还应该补充说,我使用的JavaScript增强了,但并不构成我的站点的基础。如果你使用像SproutCore或Ext这样的东西,我想解决方案会有所不同


下面是一个PHP驱动的网站示例: 如果您的站点被划分为多个部分,其中一个部分是日历。用户导航到“index.phhp?module=calendar&action=view”。如果PHP代码是基于类的,则路由算法将实例化CalendarModule类,该类基于“Module”并具有虚拟方法“getJavascript”。这将返回在“日历”模块上执行操作“查看”所需的javascript类。它还可以考虑任何其他特殊需求,并为这些需求返回js文件。在为最终页面构建javascript包含列表时,呈现代码可以验证js文件是否没有重复。因此getJavascript方法返回如下数组

return array('prototype.js','mycalendar.js');
请注意,这或其某种形式不是n