问题
我在运行时加载来自各种第三方开发人员的脚本(这个应用程序不是由我托管的,所以一旦运行,我就失去了对代码的控制),比如说a.js、b.js、c.js.
我想减少HTTP请求,所以我将它们作为一个大的串联文件abc.js 提供
我希望避免任何一个文件中的错误影响任何其他文件的执行。我怎样才能做到这一点?
非启动器
-
尝试捕获
Try-catch对语法错误没有帮助。语法错误将导致整个文件失败。它也会导致FunctionDeclarations出现问题,而FunctionDeclaration在Firefox中已从全局范围中删除。
-
取消连接
我需要减少请求。文件在传输过程中必须连接起来。
首选项
保持脚本的同步加载。
可能的解决方案
- 将连接文件加载为文本,然后分别评估每个脚本。GMail Mobile使用了一种技术——http://googlecode.blogspot.com.au/2009/09/gmail-for-mobile-html5-series-reducing.html
任何预先存在/预打包的库都可以实现这一点,这对我来说是最好的解决方案
编辑:我的"应用程序";是现场安装的,并且在运行时可以使用来自第三方的任意JS进行插入。所以我从来没有在生产之外一起测试过所有的JS。
你不能这么做。如果是一个大的串联文件,语法错误就在一个大文件中。如果不连接文件,则会收到多个对单独文件的请求,但至少可以将错误定位到特定文件。这是没有办法的。
也就是说,除非文件被缩小,否则任何像样的浏览器,如Chrome、Safari、Firefox,都应该在开发者工具中显示错误所在。
你真的无法做到这一点(除非你建议将其加载为文本文件,然后对其进行评估,但老实说,这太可怕了)。
您可能应该做的是在开发过程中保持文件的分离,一旦对它们进行了测试,就可以在生产环境中连接它们。
花更多的钱购买更好的服务器/连接或在S3上托管您的应用程序;无论你在做什么,成本都可能比你的时间便宜。