久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

百度地圖API詳解之地圖API加載方式

 JT_man 2016-11-17

本文將向大家介紹百度地圖API的兩種不同加載方式:同步加載和異步加載。

同步加載

這是最常見(jiàn)的加載方式,,開(kāi)發(fā)者需要在頁(yè)面的head標(biāo)簽內(nèi)添加一個(gè)script標(biāo)簽,,標(biāo)簽的src屬性填寫(xiě)為地圖API的地址:

1
<script src="http://api.map.baidu.com/api?v=1.2"></script>

此時(shí)腳本是同步加載的,,如果直接在瀏覽器敲入這個(gè)地址你會(huì)發(fā)現(xiàn)這段js腳本實(shí)際返回的內(nèi)容為:

1
2
document.write('<link rel="stylesheet" type="text/css" <script type="text/javascript" src="http://api.map.baidu.com/getscript?v=1.2&key=&services=&t=2922163450"></script>');

返回的腳本通過(guò)document.write方法寫(xiě)入了一個(gè)link標(biāo)簽和另一個(gè)script標(biāo)簽,,link標(biāo)簽負(fù)責(zé)加載API的樣式表文件,而另一個(gè)script則是地圖API真正的腳本資源,。當(dāng)然你也可以把腳本寫(xiě)在body標(biāo)簽內(nèi),,但是從規(guī)范角度來(lái)說(shuō)不建議這么寫(xiě)(html4規(guī)范上規(guī)定link標(biāo)簽只能存在于head標(biāo)簽內(nèi))。一個(gè)完整的同步加載的代碼示例如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>同步加載</title>
<script src="http://api.map.baidu.com/api?v=1.2"></script>
</head>
<body>
<div id="map" style="width:500px;height:320px;"></div>
<script>
var map = new BMap.Map("map");
map.centerAndZoom(new BMap.Point(121.491, 31.233), 11);
</script>
</body>
</html>

我們看到在地圖容器#map之后,,立刻插入了一個(gè)script標(biāo)簽,,標(biāo)簽內(nèi)直接編寫(xiě)調(diào)用API的代碼,效果如圖:

62a88a00caedb9e7e850cd75

瀏覽器先加載API的資源然后再加載頁(yè)面其他元素,,通過(guò)資源加載順序圖可以更清晰的看到這一點(diǎn):

30d5d7f8fa6dd26fd8f9fd70
注意這里的藍(lán)色豎線出現(xiàn)在API腳本加載(包括網(wǎng)絡(luò)時(shí)間和執(zhí)行時(shí)間)完以后,,這就表明了頁(yè)面正在同步加載API的JS腳本。此外還看到在加載主腳本的同時(shí)瀏覽器是被阻塞住的,,不能加載其他頁(yè)面資源,。當(dāng)然API也在逐漸努力減少同步加載JS的文件大小,這除了讓地圖本身展現(xiàn)速度更快以外,,還能最大限度的減少對(duì)第三方頁(yè)面的影響,。

如果使用地圖的頁(yè)面內(nèi)容較多,而地圖僅是一個(gè)小模塊時(shí),,可以考慮將API腳本放在body的最后,,而地圖初始化放在body的onload事件中:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>同步加載</title>
<script>
function initialize(){
var map = new BMap.Map("map");
    map.centerAndZoom(new BMap.Point(121.491, 31.233), 11);
}
</script>
</head>
<body onload="initialize()">
<div id="map" style="width:500px;height:320px;"></div>
<script>
</script>
<script src="http://api.map.baidu.com/api?v=1.2"></script>
</body>
</html>

這樣API的腳本不會(huì)影響頁(yè)面其他元素,,雖然用法不太規(guī)范,。

異步加載

API支持完全異步加載,,使用方式如下:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>異步加載</title>
<script type="text/javascript">
function initialize() {
    var map = new BMap.Map('map');
    map.centerAndZoom(new BMap.Point(121.491, 31.233), 11);
}
function loadScript() {
    var script = document.createElement("script");
    script.src = "http://api.map.baidu.com/api?v=1.2&callback=initialize";
    document.body.appendChild(script);
}
window.onload = loadScript;
</script>
</head>
<body>
<div id="map" style="width:500px;height:320px"></div>
</body>
</html>

我們通過(guò)動(dòng)態(tài)創(chuàng)建script標(biāo)簽的方式來(lái)添加對(duì)地圖API的引用,此時(shí)API腳本是異步加載的,,如果直接在瀏覽器輸入這個(gè)地址,,我們會(huì)得到下面代碼:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('type', 'text/css');
link.setAttribute('href', 'http://api.map.baidu.com/res/12/bmap.css');
document.getElementsByTagName('head')[0].appendChild(link);
window.BMap = window.BMap || {};
window.BMap.apiLoad = function () {
    delete window.BMap.apiLoad;
    if (typeof initialize == "function") {
        initialize();
    }
};
var s = document.createElement('script');
s.src = 'http://api.map.baidu.com/getscript?v=1.2&key=&services=&t=2922163450';
document.body.appendChild(s);

代碼里沒(méi)有了document.write,而是createElement動(dòng)態(tài)添加,。

我們還需要在引用地址里面添加callback參數(shù),,這是在告訴API加載完成后需要調(diào)用什么方法來(lái)初始化地圖。注意這個(gè)方法名必須是全局可見(jiàn)的,。此時(shí)我們?cè)賮?lái)看一下資源加載的瀑布圖:

ed3e980fcdd2788daa64577f

雖然資源總數(shù)沒(méi)有什么變化,,但是會(huì)發(fā)現(xiàn)藍(lán)線和紅線的位置都大大提前,這就說(shuō)明地圖API腳本是異步加載的,,對(duì)頁(yè)面元素的加載沒(méi)有任何影響,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多