【发布时间】:2019-06-07 06:17:33
【问题描述】:
我有一个使用谷歌地图的 angularJS webapp。出于性能目的,我想优先考虑页面加载或至少关键渲染路径,所以我想在页面加载后延迟谷歌地图的加载。
为了更详细一点,实际上我有在索引页面中加载谷歌地图的脚本,例如:
<html ng-app="myApp">
<head></head>
<body>
<!-- My code here -->
<script async defer type="text/javascript" src="//maps.googleapis.com/maps/api/js?v=3.37"></script>
</body>
</html>
另外,我有一个部分模板视图,它有一个使用谷歌地图的指令。
<boats-map location="Spain" zoom="8" class="map-container"></boats-map>
我认为指令的细节与问题无关。但应该是这样的:
.directive('boatsMap', [
function() {
function link(scope, element, attrs) {
console.log("Map loaded");
// Do whatever logic
}
一切正常,如上所述,这只是出于性能目的,但我在 devtools 的网络瀑布中注意到的是,当我评论加载谷歌地图的脚本以及我视图中的指令时,我的页面和关键渲染路径大约提前 3 秒加载。
所以,我想延迟此功能,直到页面完全加载。
请注意脚本是使用 async 和 defer 来异步加载脚本,但这并不能避免对加载造成很大的影响。
我读过这样的方法:How do I load google maps external javascript after page loads? 但不确定这是否是角度方式。
【问题讨论】:
-
将
$(document).ready放在AngularJS 指令中是没有意义的。 $compile 服务永远不会在 DOMcontentLoaded 事件之前链接指令。 -
谢谢。已编辑。但是,有什么办法可以解决这个问题吗?
标签: javascript angularjs google-maps