最小化可能与其他脚本一起运行的JavaScript代码是否安全?
Is it safe to minify JavaScript code that might run alongside other scripts?
例如,在侵略性模式下,Google Closure将重命名函数。如果有人包括我的闭包编译脚本和另一个脚本其他人也用闭包编译,重命名冲突可能发生吗?
简而言之,我想减少我的代码,但它将用于其他网站,我想避免与其他脚本冲突。
你总是要担心在JavaScript全局作用域中定义的变量的冲突,不管你是否最小化你的脚本。如果你想尽量减少冲突的可能性,可以使用函数闭包包装器来包装代码。
Closure的高级模式只会使潜在的冲突变得更糟,因为它将许多对象编译成新的全局对象(命名相似,例如a
, b
等)以获得最快的性能。这就是为什么Closure的高级模式最好同时使用所有程序文件,而不是零碎地使用。
像ga.js
(Google Analytics)这样的东西被设计成只向全局范围暴露少数对象,而其他所有对象都包装在闭包中。文件本身进行了积极的优化。注意——最小化/非最小化与碰撞无关。你可以有一个带有大量冲突的纯脚本JavaScript文件,或者你可以有一个没有冲突的高度优化的脚本。
冲突与最小化或变量重命名无关。通过避免在全局作用域中创建对象,可以避免冲突。没有在全局作用域中创建的任何其他内容都不会与其他脚本冲突。例如,如果您加载另一个覆盖_gat
或_gaq
全局变量的脚本,则可以碰撞ga.js
。尝试一下,谷歌分析将不再工作。换句话说,ga.js
适用于不同的网页而不是,因为它是无冲突的,但因为它创建了全局变量(即_gat
和_gaq
),其名称非常不太可能被其他脚本选择。
您最好使用yuiccompressor,它的侵略性要小得多,并且往往不会缩小任何看起来是外部的
查看:- http://developer.yahoo.com/yui/compressor/
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- JavaScript代码问题:我正在将对象转换为数组
- Javascript阻止其他Javascript代码
- JavaScript代码未正确检查ajax请求
- 如何调试Javascript代码或函数
- 为什么我在这个javaScript代码中使用NaN
- 将javascript代码转换为jquery代码时出错
- 如何从Objective-C代码中调用javascript代码
- 有什么工具可以轻松读取javascript代码吗
- 这个javascript代码是如何编写的
- 如何解密此javascript代码
- SIMPLE Javascript代码,用于显示谷歌电子表格中单个字段的数据
- HTML标记,包含带引号的JavaScript代码中的引号
- 如何在Win8Metro应用程序的Javascript代码中捕获自己的C#事件
- addEventListener的Javascript代码不工作!?(单击时打开放大的img)
- JavaScript代码无法在表单上呈现部分
- 以下 JavaScript 代码与 Facebook 相关
- 使用解析为javascript源的.php,如何使用条件语句将javascript代码封装在php括号之间