谷歌地图的JavaScript加载策略是什么



当我使用谷歌地图时,我对它的实现感兴趣,所以我使用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

但是如果我刷新页面(使用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

尽管页面仍然有效,但覆盖图已绘制在地图中。但是poly.js等在哪里?

另外,有人能告诉我如何通过组件加载js吗?例如,示例中的common util poly

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

1.加载poly.js时,它会将一个字符串传递给google.maps.__gjsload___

摘录如下:

google.maps.__gjsload__('common', ''use strict';var Ai=isNa...

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

我的直觉是,这个函数可能会将这个字符串存储在localStoragesessionStorage中,这样它只需要检索一次。

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

AMD的一个很好的实现(我更喜欢)是RequireJS。

更新

我翻了一下,localStoragesessionStorage似乎没有在这个页面上使用。我也不能重复你的结果。在Firebug中,poly.js总是为我加载。可能某个地方发生了一些魔法,但我没有看到。

但是,完全可以在localStoragesessionStorage中存储字符串以供检索,而不必进行额外的js调用。

另外,有人能告诉我如何通过组件加载js吗?

这涉及到异步javascript文件加载的主题。如果您曾经使用过一种能够在脚本中的任何位置"包含"文件的语言,那么您就会明白javascript没有这种功能。正因为如此,才有了通过脚本标记注入的"aysncjavascript添加"的整个范例。

脚本标记注入:动态生成一个脚本标记,并将其源设置为所需的文件,然后将该标记插入DOM,瞧,一个新文件已经加载并执行。对于javascript繁重的应用程序,这种情况很常见,尤其是在加载第三方应用程序时。谷歌一直都在做这件事,看看谷歌分析的include脚本就知道了。

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

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

对于你在谷歌地图上做什么,你真的不需要知道太多。但是,如果你进入javascript模块模式开发,你需要知道这一点:确保你保护你的全局命名空间不被你自己的变量弄得一团糟,所以尽可能将你的所有工作封装在闭包中,并(建议但不要求)用;启动它们,这样它们在加载不正常时不会相互破坏。

最新更新