To jest przetestowane rozwiązanie na stronie o dużej objętości, która działa.
Po pierwsze, aby uniknąć konkurencji między zasobów strony docelowej oraz preinstalowanym zasobów dla pasma można opóźnić obciążenie z javascript:
var prevOnLoad=window.onload;
function onLoadPreloadComponents() {
if(prevOnLoad) {
try{
prevOnLoad();
}catch(err){
}
}
preloadSiteComponents();
}
window.onload=onLoadPreloadComponents;
To nie jest tak, jak rozwiązać to dlatego, że w moim przypadku użycia zdarzenie flash (z użyciem Flasha do JS brigde) sygnalizuje, kiedy lądowanie zostało ostatecznie załadowane. Ale poprzedni kod również musi działać. Kiedy zdarzenie zostanie wywołane przez przeglądarkę, ta funkcja wykona poprzedni kod onLoad i wstępne ładowanie.
Położyłem pusty element, w którym zostanie załadowany element iframe.
<div id="mainSiteComponentsContainer" style="display: none;">
</div>
a kod funkcji jest:
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) {
}
}
Jak można zobaczyć, link url do iframe jest dynamiczna, zmienia między zróżnicowanych plataform wersje (różne wdrożeń), aby uniknąć niechcianego pamięć podręczną przeglądarki z nowe wdrożenia.
HTML, który będzie w iframe może być coś takiego (na przykład):
<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>
Tutaj można zobaczyć linki do elementów, które chcę przekręceniem. Wreszcie, element div elementu div będzie miał element iframe. Po zdarzeniu 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>
Widać roztworu roboczego here.
Użyj Firebug, aby zobaczyć opóźnione obciążenie tych komponentów.
Problem z tym podejściem polega na tym, że witryna może naprawdę zapobiec ładowaniu z niektórych adresów URL. W ten sposób, zaraz po załadowaniu strony, nie możesz używać AJAX do tych adresów URL. – Konstantin