Ceci est une solution testée dans un site à volume élevé qui fonctionne.
En premier lieu, afin d'éviter une concurrence entre les ressources de la page de destination et les ressources préchargées pour la bande passante, vous pouvez retarder la charge avec javascript:
var prevOnLoad=window.onload;
function onLoadPreloadComponents() {
if(prevOnLoad) {
try{
prevOnLoad();
}catch(err){
}
}
preloadSiteComponents();
}
window.onload=onLoadPreloadComponents;
Ce n'est pas la façon dont je résolu ce problème parce que dans mon cas d'utilisation un événement flash (utilisant le flash vers JS brigde) signale l'atterrissage final. Mais le code précédent doit aussi fonctionner. Lorsque l'événement charger la page est déclenché par le navigateur, cette fonction exécute le code onLoad précédent et le préchargement.
J'ai mis un cointainer div vide où le iframe sera chargé.
<div id="mainSiteComponentsContainer" style="display: none;">
</div>
Et le code de fonction est:
function preloadSiteComponents() {
try{
document.getElementById('mainSiteComponentsContainer')
.innerHTML=
"<iframe src=\"http://www-components.renxo-cdn.net/preload-site-components-data-url-scheme-version-1.2.84-css-1.0.53.html\" frameborder=\"no\" height=\"0px\" width=\"0px\"></iframe>";
}catch(err) {
}
}
Comme vous pouvez le voir, le lien URL pour iFrame est dynamique, il change entre versions différentes Plataform (différents déploiements) afin d'éviter le cache indésirable du navigateur avec nouveaux déploiements.
Le code HTML qui sera dans le iframe pourrait être quelque chose comme ceci (par exemple):
<html class=" gecko win js" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="noindex,nofollow" name="robots">
<script src="http://www-components.renxo-cdn.net/scripts/lib-1.2.84.js" type="text/javascript">
<link href="http://www-components.renxo-cdn.net/styles/skin-data-url-scheme-1.0.53.css" media="all" type="text/css" rel="stylesheet">
</head>
<body> </body>
</html>
Ici vous pouvez voir les liens vers les composants que je veux précharger. Enfin, le div cointainer aura l'iframe. Après l'événement onLoad:
<div id="mainSiteComponentsContainer" style="display: none;">
<iframe width="0px" height="0px" frameborder="no" src="http://www-components.renxo-cdn.net/preload-site-components-data-url-scheme-version-1.2.84-css-1.0.53.html">
<html class=" gecko win js" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="noindex,nofollow" name="robots">
<script src="http://www-components.renxo-cdn.net/scripts/lib-1.2.84.js" type="text/javascript">
<link href="http://www-components.renxo-cdn.net/styles/skin-data-url-scheme-1.0.53.css" media="all" type="text/css" rel="stylesheet">
</head>
<body> </body>
</html>
</iframe>
</div>
Vous pouvez voir la solution de travail here. Utilisez Firebug pour voir la charge différée de ces composants.
Le problème avec cette approche est que le site peut vraiment empêcher le chargement de certaines URL. De cette façon, dès que la page est chargée, vous ne pouvez pas utiliser AJAX pour ces URL. – Konstantin