Merge pull request #962 from ahocevar/tilequeue-throttling
Bring back throttling for tile loading. r=@bartvde
This commit is contained in:
+3
-14
@@ -1,20 +1,9 @@
|
|||||||
var urls = [
|
|
||||||
"http://a.tile.openstreetmap.org/${z}/${x}/${y}.png",
|
|
||||||
"http://b.tile.openstreetmap.org/${z}/${x}/${y}.png",
|
|
||||||
"http://c.tile.openstreetmap.org/${z}/${x}/${y}.png"
|
|
||||||
];
|
|
||||||
|
|
||||||
var map = new OpenLayers.Map({
|
var map = new OpenLayers.Map({
|
||||||
div: "map",
|
div: "map",
|
||||||
|
tileManager: new OpenLayers.TileManager(),
|
||||||
layers: [
|
layers: [
|
||||||
new OpenLayers.Layer.XYZ("OSM (with buffer)", urls, {
|
new OpenLayers.Layer.OSM("OSM (without buffer)"),
|
||||||
transitionEffect: "resize", buffer: 2, sphericalMercator: true,
|
new OpenLayers.Layer.OSM("OSM (with buffer)", null, {buffer: 2})
|
||||||
attribution: "Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>"
|
|
||||||
}),
|
|
||||||
new OpenLayers.Layer.XYZ("OSM (without buffer)", urls, {
|
|
||||||
transitionEffect: "resize", buffer: 0, sphericalMercator: true,
|
|
||||||
attribution: "Data CC-By-SA by <a href='http://openstreetmap.org/'>OpenStreetMap</a>"
|
|
||||||
})
|
|
||||||
],
|
],
|
||||||
controls: [
|
controls: [
|
||||||
new OpenLayers.Control.Navigation({
|
new OpenLayers.Control.Navigation({
|
||||||
|
|||||||
@@ -33,6 +33,20 @@ OpenLayers.TileManager = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
cacheSize: 256,
|
cacheSize: 256,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: tilesPerFrame
|
||||||
|
* {Number} Number of queued tiles to load per frame (see <frameDelay>).
|
||||||
|
* Default is 2.
|
||||||
|
*/
|
||||||
|
tilesPerFrame: 2,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIProperty: frameDelay
|
||||||
|
* {Number} Delay between tile loading frames (see <tilesPerFrame>) in
|
||||||
|
* milliseconds. Default is 16.
|
||||||
|
*/
|
||||||
|
frameDelay: 16,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIProperty: moveDelay
|
* APIProperty: moveDelay
|
||||||
* {Number} Delay in milliseconds after a map's move event before loading
|
* {Number} Delay in milliseconds after a map's move event before loading
|
||||||
@@ -251,7 +265,9 @@ OpenLayers.TileManager = OpenLayers.Class({
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Method: updateTimeout
|
* Method: updateTimeout
|
||||||
* Applies the <moveDelay> or <zoomDelay> to the <drawTilesFromQueue> loop.
|
* Applies the <moveDelay> or <zoomDelay> to the <drawTilesFromQueue> loop,
|
||||||
|
* and schedules more queue processing after <frameDelay> if there are still
|
||||||
|
* tiles in the queue.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* map - {<OpenLayers.Map>} The map to update the timeout for
|
* map - {<OpenLayers.Map>} The map to update the timeout for
|
||||||
@@ -259,10 +275,14 @@ OpenLayers.TileManager = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
updateTimeout: function(map, delay) {
|
updateTimeout: function(map, delay) {
|
||||||
window.clearTimeout(this.tileQueueId[map.id]);
|
window.clearTimeout(this.tileQueueId[map.id]);
|
||||||
if (this.tileQueue[map.id].length) {
|
var tileQueue = this.tileQueue[map.id];
|
||||||
|
if (tileQueue.length) {
|
||||||
this.tileQueueId[map.id] = window.setTimeout(
|
this.tileQueueId[map.id] = window.setTimeout(
|
||||||
OpenLayers.Function.bind(function() {
|
OpenLayers.Function.bind(function() {
|
||||||
this.drawTilesFromQueue(map);
|
this.drawTilesFromQueue(map);
|
||||||
|
if (tileQueue.length) {
|
||||||
|
this.updateTimeout(map, this.frameDelay);
|
||||||
|
}
|
||||||
}, this), delay
|
}, this), delay
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -341,8 +361,11 @@ OpenLayers.TileManager = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
drawTilesFromQueue: function(map) {
|
drawTilesFromQueue: function(map) {
|
||||||
var tileQueue = this.tileQueue[map.id];
|
var tileQueue = this.tileQueue[map.id];
|
||||||
while (tileQueue.length) {
|
var limit = this.tilesPerFrame;
|
||||||
|
var animating = map.zoomTween && map.zoomTween.playing;
|
||||||
|
while (!animating && tileQueue.length && limit) {
|
||||||
tileQueue.shift().draw(true);
|
tileQueue.shift().draw(true);
|
||||||
|
--limit;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user