带有eval()的Javascript模块;
每个javascript开发人员都知道;埃瓦尔是邪恶的 但由于我在寻找javascript中的终极模块技术,我读到了一些非常有趣的关于使用eval作为模块加载器的人的文章,这有两个主要好处:带有eval()的Javascript模块;,javascript,security,module,eval,Javascript,Security,Module,Eval,每个javascript开发人员都知道;埃瓦尔是邪恶的 但由于我在寻找javascript中的终极模块技术,我读到了一些非常有趣的关于使用eval作为模块加载器的人的文章,这有两个主要好处: 移动设备的加载速度更快,因为它可以一次加载整个字符串 脚本分离,无需在每个模块中定义像require.js这样的包装器 那又是怎么回事?通过eval只加载几个函数,这可能是一个解决方案吗?我的意思是从安全方面来说 编辑:sry忘记了文章的链接:因为3G连接的延迟很高,一个HTTP请求,即使有更多的数据,
- 移动设备的加载速度更快,因为它可以一次加载整个字符串
- 脚本分离,无需在每个模块中定义像require.js这样的包装器
编辑:sry忘记了文章的链接:因为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
和other.js
会被计算,notUsed.js
会被忽略
就安全性而言,通过
标记包含它们应该没有什么不同,无论您使用什么来组合脚本,都不能意外地组合/包含其他文件/字符串
因此,从安全角度来看,上述内容与以下内容没有任何区别:
<scruipt src="main.js"></script>
<scruipt src="another.js"></script>
当然,您仍然有.我认为评估您100%控制的静态字符串(您的代码-您计划执行的代码,只是延迟加载)是可以的。我真的不明白为什么您会将代码作为字符串加载,而不是作为脚本文件加载,为什么这样会更快?很难调试已评估的脚本。没有优化。但这是“好的评估”:我正在处理requirejs/ember的问题,并且正在考虑走这条路。从表面上看,实现起来很简单,但我还没有看到任何库可以做到这一点。目前是否有大型项目正在这样做?我担心以后会遇到问题(例如性能)。什么是标签?