Browse Source

Amélioration de r100848 .

Utiliser une requete XmlHttpRequest en lieu et place de $.get, ainsi pas besoin d'attendre le chargement de tous les scripts pour entamer la requête (environ 200ms gagnées dans un contexte de prod après quelques tests).
TODO (?) : On pourrait ne charger qu'une fois les fonctions getAjax() et getBloc() s'il y a plusieurs blocs déclarés dans _Z_AJAX_PARALLEL_LOAD.
En attente de quelques retours avant de faire un up de z.
pull/1/head
placido@roxing.net 6 years ago
parent
commit
ccee929546
  1. 39
      inclure/ajax_parallel_load.html

39
inclure/ajax_parallel_load.html

@ -10,18 +10,39 @@
#SET{bloc,#ENV{bloc}|dirname|basename}
<div id="zapl-#GET{bloc}" class="zapl-loading"><:zcore:zapl_loading:></div>
<script type="text/javascript">
$(function(){
[//(#REM) equivalent de $.get en pur js, on n'attend pas que jQuery soit chargé]
function getAjax(url, success) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onreadystatechange = function() {
if (xhr.readyState>3 && xhr.status==200) success(xhr.responseText);
};
xhr.send();
return xhr;
}
[//(#REM) Récupérer et insérer le zbloc ]
var getBloc = function(bloc) {
var myurl = window.location + "";
myurl = myurl.split('#');
myurl = myurl[0] + ((myurl[0].indexOf("?")>0)?"&":"?") + "var_zajax=#GET{bloc}";
$.get(myurl, function(data) {
jQuery('document').ready(function(){
jQuery("#zapl-#GET{bloc}").replaceWith(data);
var h = window.location.hash;
if (h && jQuery("<div></div>").html(data).find(h).length>0) jQuery(h).positionner(true);
});
myurl = myurl[0] + ((myurl[0].indexOf("?")>0)?"&":"?") + "var_zajax=" + bloc;
getAjax(myurl, function(data){
var el = document.querySelector("#zapl-"+ bloc);
var newEl = document.createElement('div');
newEl.innerHTML = data;
el.parentNode.replaceChild(newEl, el);
[//(#REM) attendre que jQuery soit chargé et déclencher AjaxLoad ]
var interval = setInterval(function(){
if (typeof jQuery.spip == 'object' && typeof jQuery.spip.triggerAjaxLoad == 'function') {
clearInterval(interval);
jQuery.spip.triggerAjaxLoad();
var h = window.location.hash;
if (h && jQuery(h)[0]) jQuery(h).positionner(true);
return;
}
}, 100);
});
});
};
getBloc('#GET{bloc}');
</script>
<noscript>
<meta http-equiv="refresh" content="2;url=<?php echo ($url=parametre_url(self(),'var_zapl','non'));?>" />

Loading…
Cancel
Save