Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 何时定义模块以及何时仅需要使用requireJS的文件_Javascript_Module_Requirejs - Fatal编程技术网

Javascript 何时定义模块以及何时仅需要使用requireJS的文件

Javascript 何时定义模块以及何时仅需要使用requireJS的文件,javascript,module,requirejs,Javascript,Module,Requirejs,我正在努力让requireJS正常工作。佩奇很好,但我认为我做事情的方式非常错误 例如,在第xzy页上我将在页面末尾添加以下JavaScript(JS现在必须留在页面上,因此不可能有外部JS文件) // 这样做可以使google.map和$.().gmap方法在全球范围内可用,而这可能不应该在全球范围内可用 问题: 我应该把它转换成一个requireJS模块吗?为什么? 如果是这样,该模块是否也可以在其他页面上使用,或者我是否只是在第123页上“重新定义”,并且依赖项文件已经被缓存 最后

我正在努力让requireJS正常工作。佩奇很好,但我认为我做事情的方式非常错误

例如,在第xzy页上我将在页面末尾添加以下JavaScript(JS现在必须留在页面上,因此不可能有外部JS文件)


//

这样做可以使
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>