什么是谷歌地图';s的javascript加载策略

什么是谷歌地图';s的javascript加载策略,javascript,Javascript,当我使用GoogleMaps时,我对它的实现感兴趣,所以我使用firebug进行检查 然后我发现它的javascript加载策略非常有趣。以本页为例: 然后,当我第一次打开此页面时,加载了以下js: https://maps.googleapis.com/maps/api/js?sensor=false https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/13b/main.js https://maps.gstatic.com/cat_js

当我使用GoogleMaps时,我对它的实现感兴趣,所以我使用firebug进行检查

然后我发现它的javascript加载策略非常有趣。以本页为例:

然后,当我第一次打开此页面时,加载了以下js:

https://maps.googleapis.com/maps/api/js?sensor=false
https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/13b/main.js
https://maps.gstatic.com/cat_js/intl/en_us/mapfiles/api-3/9/13b/%7Bcommon,map,util,poly%7D.js
https://maps.gstatic.com/cat_js/intl/en_us/mapfiles/api-3/9/13b/%7Bonion,geometry%7D.js
https://maps.googleapis.com/maps/api/js?sensor=false
https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/13b/main.js
但是如果我刷新页面(使用ctrl+f5),将加载以下js:

https://maps.googleapis.com/maps/api/js?sensor=false
https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/13b/main.js
https://maps.gstatic.com/cat_js/intl/en_us/mapfiles/api-3/9/13b/%7Bcommon,map,util,poly%7D.js
https://maps.gstatic.com/cat_js/intl/en_us/mapfiles/api-3/9/13b/%7Bonion,geometry%7D.js
https://maps.googleapis.com/maps/api/js?sensor=false
https://maps.gstatic.com/intl/en_us/mapfiles/api-3/9/13b/main.js
但是页面仍然可以工作,覆盖层在地图中绘制。但是poly.js等在哪里呢

还有,谁能告诉我如何按组件加载js?对于exmaple,示例中的
公共
util
poly


当我编写不同的组件时,我应该知道什么?

1。当poly.js加载时,它会将一个字符串传递给
google.maps.\uuuuu gjsload\uuuuu

这里有一段摘录:

google.maps.\uu gjsload\uuuu('common','use strict';var Ai=isNa…

文件的其余部分只是该字符串的内容

我的直觉是,这个函数可能将这个字符串存储在
localStorage
sessionStorage
中,因此只需检索一次

2.此外,如果您想了解如何根据需要加载js文件,请查看和/或CommonJS:

AMD的良好实施(我的偏好)是

更新 我做了一些探索,并且
localStorage
sessionStorage
似乎没有在这个页面上使用。我也不能复制你的结果。在Firebug中,poly.js总是为我加载。可能在某个地方发生了一些神奇的事情,但我看不到

但是,完全可以将字符串存储在
localStorage
sessionStorage
中进行检索,而无需进行额外的js调用

还有,谁能告诉我如何通过组件加载js

这涉及到异步javascript文件加载的主题。如果您曾经使用过一种能够在脚本中的任何一点“包含”文件的语言,您就会明白javascript不具备这种功能。因此,有一种通过脚本标记注入“aysnc javascript添加”的完整范例

脚本标记注入:动态创建一个脚本标记,并将其源设置为所需的文件,然后将该标记插入DOM中,瞧,一个新文件已经加载并执行。对于大量使用javascript的应用程序,这是很常见的,尤其是在加载第三方应用程序时。Google一直都在这样做,只要查看Google analyt即可ics的include脚本就是一个很好的例子

现在,由于这是一种敏感而微妙的编码方式,一些“javascript组件/模块/资产加载”框架对其进行了改进,使其非常稳定。common.js、require.js等都在这方面做得很好

当我编写不同的组件时,我应该知道什么


对于使用google maps所做的工作,您不需要了解太多。但如果您进入javascript模块模式开发,您需要了解以下内容:确保您的全局名称空间不会被您自己的变量弄乱,因此尽可能将所有工作封装在闭包中,并且(推荐但不是必需的)用一个
来启动它们,这样它们就不会在无序加载时互相破坏。

其他javascript文件被缓存。这就是为什么它们不加载第二个javascript文件的原因time@hguser我已经写了一个关于js资产注入的长答案,我可能会为您回答一组不同于您想要的问题,但我认为是这样的将帮助您,但如果没有帮助,我很抱歉,但是require.js将使用回调,也就是说要运行的代码应该放在回调函数中,但是,在main.js中,我没有找到任何回调。