管理和部署大型JavaScript应用的最佳做法
管理中型JavaScript应用程序有哪些标准做法?我担心的是浏览器下载的速度以及开发的便捷性和可维护性。
我们的JavaScript代码大致"命名空间"为:
var Client = { var1: '', var2: '', accounts: { /* 100's of functions and variables */ }, orders: { /* 100's of functions and variables and subsections */ } /* etc, etc for a couple hundred kb */ }
目前,我们有一个(未包装,未剥离,易读的)JavaScript文件来处理Web应用程序上的所有业务逻辑。此外,还有jQuery和几个jQuery扩展。我们面临的问题是,要永久找到JavaScript代码中的所有内容,浏览器仍然有十几个文件可供下载。
少数几个"源" JavaScript文件被"编译"为一个最终的压缩JavaScript文件是否很常见?还有其他方便的提示或者最佳做法吗?
解决方案
回答
我发现对我有用的方法是为每个类都使用单独的JS文件(就像我们在Java和Cand中一样)。另外,如果我们更易于浏览,则可以将JS分为应用程序功能区域。
如果将所有JS文件放在一个目录中,则可以使服务器端环境(例如PHP)遍历该目录中的每个文件,并输出<script src ='/ path / to / js / $ file。所有UI页面都包含的某些头文件中的js'type ='text / javascript'>
。如果我们定期创建和删除JS文件,则可以发现此自动加载特别方便。
部署到生产环境时,我们应该具有一个脚本,可以将它们全部组合到一个JS文件中并"最小化"以减小尺寸。
回答
为了提高服务器效率,最好将所有JavaScript合并到一个缩小的文件中。
确定所需代码的顺序,然后将压缩后的代码按所需的顺序放置在单个文件中。
关键是减少加载页面所需的请求数量,这就是为什么我们应该将所有javascript放在一个文件中进行生产的原因。
我建议保留文件以供开发,然后创建一个构建脚本来组合/编译所有内容。
另外,根据经验,请确保在页面末尾包含JavaScript。如果标头(或者页面中任何位置)中包含JavaScript,则即使打开了流水线功能,它也会停止发出所有其他请求,直到加载完毕为止。如果它在页面末尾,则不会出现此问题。
回答
只是Steve已经指出的一个补充节点,我们应该真正"缩小"JS文件。在JS中,空格实际上很重要。如果我们有一千行JS,并且仅除去不需要的换行符,那么我们已经节省了大约1K。我认为你说对了。
有一些工具可以完成这项工作。而且,我们永远不要手工修改"缩小" /剥离/混淆的JS!绝不!
回答
Flickr着名的Cal Henderson撰写了一篇有关维生素的最佳文章,内容涉及如何优化CSS和JavaScript的交付:http://www.iamcal.com/serving-javascript-fast/
回答
在我们的大型javascript应用程序中,我们使用类似Java的命名空间/目录结构,将所有代码写在小的单独文件中,每个"类"或者功能组一个文件。然后,我们有:
- 一个编译时步骤,使用我们所有的代码并将其最小化(使用JSMin的变体)以减小下载大小
- 编译时步骤,将始终或者几乎始终需要的类取而代之,并将它们串联成一个大包,以减少到服务器的往返次数
- 一个"类加载器",可以在运行时按需加载其余类。
回答
阅读其他(好的)javascript应用程序的代码,并查看它们如何处理。但是我从每个班级的文件开始。但是一旦准备好投入生产,我就将文件合并为一个大文件并缩小。
我不合并文件的唯一原因是,如果我不需要所有页面上的所有文件。
回答
另外,建议我们使用Google的AJAX库API来加载外部库。
这是一个Google开发人员工具,它捆绑了主要的JavaScript库,并始终使用压缩版本,从而使部署,升级和简化工作变得更加轻松。
而且,它使项目更简单,更轻松,因为我们无需在项目中下载,复制和维护这些库文件。
使用这种方式:
google.load("jquery", "1.2.3"); google.load("jqueryui", "1.5.2"); google.load("prototype", "1.6"); google.load("scriptaculous", "1.8.1"); google.load("mootools", "1.11"); google.load("dojo", "1.1.1");