Bonsoir,

Je débute en javascript, et j'ai besoin d'un coup de main pour optimiser mes requêtes à l'API google, parce que je n'arrive pas à trouver de solution simple à mon problème.

En gros, je passe des requêtes à l'API google analytics pour obtenir des graphs, les uns à la suite des autres... Mais au bout de plusieurs requêtes passées simultanément, l'API renvoi une erreur "too many connexion".

En bon gros noob, j'ai donc trouvé une solution dégueulasse qui consiste à décaler l'exécution des fonctions par des setTimeout(). Malheureusement, cela ralenti considérablement le temps d'exécution du script, car il faut prévoir de la marge... Quelle solution propre me conseillez-vous ?

Voici un exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function majGraphs() {
 
	var StartDate = ($("#start").val());	
	var EndDate = ($("#end").val());
 
	setTimeout(chart1, 1000);
	setTimeout(chart2, 2000);
        // etc...
 
function chart1() {
    var chart1 = new gadash.Chart({
      'type': 'Table',
      'divContainer': 'gnagna',
      'query': {
        'ids': TABLE_ID,
		'metrics': 'ga:visitors',
	        'start-date': startDate,
		'end-date': endDate,
		'dimensions': 'ga:date'
      },
		'onSuccess': function(response) {
		var totalVisits = response.totalsForAllResults['ga:visitors'];
		document.getElementById('totalVisits').innerHTML = totalVisits;
		this.defaultOnSuccess(response);
		},
    }).render();
}
 
function chart2() {
    var chart2 = new gadash.Chart({
      'type': 'Table',
      'divContainer': 'gnagna2',
      'query': {
        'ids': TABLE_ID,
		'metrics': 'ga:visitors',
	        'start-date': startDate,
		'end-date': endDate,
		'dimensions': 'ga:customVarValue3'
      },
		'onSuccess': function(response) {
		var nbFemmes = response.rows[0][1];
		var nbHommes = response.rows[1][1];
		document.getElementById('nbFemmes').innerHTML = nbFemmes;
		document.getElementById('nbHommes').innerHTML = nbHommes;
		this.defaultOnSuccess(response);
		},
    }).render();
}
}
	$(document).ready(function(){
		majGraphs() 
		$('#start').change(function() {
			majGraphs();
		});
		$('#end').change(function() {
			majGraphs();
		});
	});
Par ailleurs, les plus avisés remarqueront peut-être aussi que ma manière de modifier les dates est absolument dégeue, parce qu'il suffit que l'utilisateur modifie la date de fin (EndDate) sur le picker juste après que celle de début (StartDate) pour que ça refasse planter mes requêtes en réexécutant dans un labs de temps trop court la fonction majGraphs().

Si une bonne âme pouvait aussi m'indiquer une manière propre de faire cela, je lui en serais infiniment reconnaissant.