每个 javascript 开发人员都知道;评估是邪恶的
但是因为我正在寻找 javascript 中的终极模块技术,所以我读到了一些非常有趣的关于有人使用 eval 作为模块加载器的东西,它有两个主要好处:
- 移动设备加载速度更快,因为它一次加载整个字符串
- 脚本分离,无需在每个模块中定义像 require.js 这样的包装器
那是怎么回事?它可以成为一个解决方案,只通过 eval 加载几个函数吗?我的意思是从安全方面...
编辑:sry 忘记了文章的链接:文章
每个 javascript 开发人员都知道;评估是邪恶的
但是因为我正在寻找 javascript 中的终极模块技术,所以我读到了一些非常有趣的关于有人使用 eval 作为模块加载器的东西,它有两个主要好处:
那是怎么回事?它可以成为一个解决方案,只通过 eval 加载几个函数吗?我的意思是从安全方面...
编辑:sry 忘记了文章的链接:文章
由于 3G 连接的高延迟,单个 HTTP 请求,即使有更多数据,通常也比多个较小的请求快得多。
那篇文章建议将多个模块组合到一个文件中,如下所示:
var modules = {
'main.js': 'alert("Main module")',
'another.js': 'alert("Another module")',
'notUsed.js': 'alert("I am never used")',
};
这样,它们都可以通过一个更快的 HTTP 请求下载,并且您仍然可以只包含/评估您需要的模块。
例如你可以这样做:
var requireFile = function(file) {
if(modules[file])
eval(modules[file]);
};
requireFile('main.js');
requireFile('another.js');
并且只有main.js
andanother.js
会被评估,notUsed.js
只会被忽略。
安全方面,通过标签包含它们应该没有什么不同,<script>
只要您用于组合脚本的任何内容都不会意外地组合/包含其他文件/字符串。
因此,从安全的角度来看,与上述内容应该没有任何区别:
<script src="main.js"></script>
<script src="another.js"></script>
当然,您仍然有eval 的其他缺点。