Javascript 何时定义模块以及何时仅需要使用requireJS的文件
我正在努力让requireJS正常工作。佩奇很好,但我认为我做事情的方式非常错误 例如,在第xzy页上我将在页面末尾添加以下JavaScript(JS现在必须留在页面上,因此不可能有外部JS文件)Javascript 何时定义模块以及何时仅需要使用requireJS的文件,javascript,module,requirejs,Javascript,Module,Requirejs,我正在努力让requireJS正常工作。佩奇很好,但我认为我做事情的方式非常错误 例如,在第xzy页上我将在页面末尾添加以下JavaScript(JS现在必须留在页面上,因此不可能有外部JS文件) // 这样做可以使google.map和$.().gmap方法在全球范围内可用,而这可能不应该在全球范围内可用 问题: 我应该把它转换成一个requireJS模块吗?为什么? 如果是这样,该模块是否也可以在其他页面上使用,或者我是否只是在第123页上“重新定义”,并且依赖项文件已经被缓存 最后
//
这样做可以使google.map
和$.().gmap
方法在全球范围内可用,而这可能不应该在全球范围内可用
问题:我应该把它转换成一个requireJS模块吗?为什么? 如果是这样,该模块是否也可以在其他页面上使用,或者我是否只是在第123页上“重新定义”,并且依赖项文件已经被缓存
最后,我是否需要将require调用中的代码转换为module.methods,然后通过
module\u name.method\u name(传递一些参数)
?查看JS:
你可以看到窗口。google
是一个全局搜索引擎。如果谷歌不发布AMD版本,你就没什么办法了
关于是否创建模块的决定首先应该是JS代码的可读性/可维护性问题。模块是(应该是)可读的、可重用的代码块/可重用的抽象,其他代码都可以使用。您还应该从中获得测试的好处-每个模块都应该更易于单独测试
如果选择模块化方法,最终可能会得到更多的JS文件,您可能会认为这会导致性能问题,即多个HTTP请求。但通过使用将模块优化为单个文件,可以缓解这一问题
如果您转换为一个模块,是的,您可以从其他页面要求它,并且如果设置了HTTP缓存头,那么浏览器可以选择使用缓存版本,从而为您保存HTTP请求(如果您已将每个模块优化为单个文件,则同样的缓存启发式适用)
如果您重新定义(我假设您是指复制和粘贴代码块),那么require
调用中列出的那些依赖项都应该由浏览器缓存,因此立即可用(取决于您的web服务器及其HTTP缓存头)
最后,是的,您可能需要稍微重构代码以公开新模块的API。如果这意味着使用方法公开单个对象,那么这就是您应该做的。根据我的经验,这个过程几乎不可避免地会产生更好的代码。因为您必须更多地考虑模块的用途,这通常会导致您打破代码片段之间的耦合
<script type="text/javascript" language="javascript">
//<![CDATA[
(function () {
require([
'async!http://maps.google.com/maps/api/js?v=3&sensor=false',
'maps/jquery.ui.map.full.min.js',
'maps/jquery.ui.map.extensions.min'
], function() {
// ... do stuff with Google Maps
}
);
}());
//]]>
</script>