gpt4 book ai didi

javascript - 带有 eval() 的 Javascript 模块;

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:00 26 4
gpt4 key购买 nike

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

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

  • 移动设备加载速度更快,因为它一次加载整个字符串
  • 脚本分离而不花哨地在每个模块中定义包装器,如 require.js

那到底是怎么回事?是否可以通过 eval 仅加载几个函数来解决这个问题?我的意思是从安全方面...

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

最佳答案

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

在安全方面,通过 <script> 包含它们应该没有什么不同。标签提供的任何你用来组合脚本的东西都不会意外地组合/包含其他文件/字符串。

所以从安全的 Angular 来看,上面和这个应该没有任何区别:

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

当然你还有other disadvantages of eval .

关于javascript - 带有 eval() 的 Javascript 模块;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16395570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com