コンテクスト
1つのワイヤレスルーターを使用して、国内LAN内の50のクライアント間で同期するように設計されたHTML5 + CSS+JSスライドショーがあります。
問題
スライド(主に写真)の内容が重すぎる可能性があるため、現在サイトはすべてのスライドのすべてのファイルをから取得するため、スライドごとに動的にロードします(たとえば、クライアントが[次へ]ボタンをクリックするとき)。ページがロードされたときの最初のサーバー、ルーターの過負荷。
この質問(同じ問題に対する別のアプローチ)では、ユーザーがAJAXを使用してDOMのみを取得し、そのコンテンツを動的にロードすることを提案しました。それにもかかわらず、コンテンツは私が望む瞬間の前にロードされるので、彼の解決策は私にはうまくいきません。
このAJAXベースのアプローチは正しいですか?もしそうなら、私は何を間違っているのでしょうか?
私のコード
slideshow.html(スライドショー構造)
<html>
<head>
<title>My Slideshow</title>
<script src="javascripts/slidesplayer.js"></script>
<link rel="stylesheet" href="/stylesheets/style.css">
</head>
<body>
<div id="slides-containter">
<div class="slide" id="slide_1">
<!--Contents such as images, text, video and audio sources -->
</div>
<div class="slide" id="slide_2">
<!--Contents -->
</div>
<!--A bunch of slides here-->
</div>
<script>
// Here I load the slides calling a function defined in slidesplayer.js
</script>
</body>
</html>
slideshow-placeholder.html(スライドショーのURLを入力すると読み込まれます)
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="/path/to/ajaxSlidesScript.js"></script>
</head>
<body>
<h1>Hello slides!</h1>
</body>
</html>
ajaxSlidesScript.js
$(document).ready(function() {
$.ajax('/path/to/slideshow.html', {
async : false,
complete : function ajaxCallback(slidesDOM) {
// Pull out the individual slides from the slideshow HTML
$slides = $(slidesDOM.responseText).find('.slide');
// For each one ...
$slides.each(function prepareSlide() {
// Store a reference to the slide's contents
var $slideContent = $($(this).html()); // <--- GETs all the files for this slide which I want to avoid.
// Empty the contents and keep only the slide element itself
var $slideWrapper = $(this).empty();
// Attach to focus event handled by the slideware
$slideWrapper.appendTo('body').on('focus', function injectContent() {
// Put the content in — NOW external resources should be downloaded via GET and loaded, not before.
$slideWrapper.append($slideContent);
});
});
}
});
});
更新: DOMオブジェクトを操作すると、DOMにリソースを挿入しなくてもリソースがダウンロードされるため、このアプローチは機能しません。この質問で私が何をしたかがわかります。