4

每个 javascript 开发人员都知道;评估是邪恶的

但是因为我正在寻找 javascript 中的终极模块技术,所以我读到了一些非常有趣的关于有人使用 eval 作为模块加载器的东西,它有两个主要好处:

  • 移动设备加载速度更快,因为它一次加载整个字符串
  • 脚本分离,无需在每个模块中定义像 require.js 这样的包装器

那是怎么回事?它可以成为一个解决方案,只通过 eval 加载几个函数吗?我的意思是从安全方面...

编辑:sry 忘记了文章的链接:文章

4

1 回答 1

7

由于 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.jsandanother.js会被评估,notUsed.js只会被忽略。

安全方面,通过标签包含它们应该没有什么不同,<script>只要您用于组合脚本的任何内容都不会意外地组合/包含其他文件/字符串。

因此,从安全的角度来看,与上述内容应该没有任何区别:

<script src="main.js"></script>
<script src="another.js"></script>

当然,您仍然有eval 的其他缺点

于 2013-05-06T14:32:40.010 回答