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