语境
我正在制作一个应用程序,用于在无法访问 Internet 的无线 LAN 中向大约 50 名观众展示同步的 HTML5 幻灯片。
我在其中一台计算机上运行 Node.js 服务器,并通过 Socket.IO 与 50 个客户端连接(顺便说一句,其中只有一个控制演示)。
硬件是一台家用无线 802.11b/g 路由器和 50 台移动设备(平板电脑、上网本、智能手机)。
问题
当幻灯片开始时,客户端需要很长时间(大约 10 分钟或更长时间才能看到 5 MB 幻灯片)才能看到它,因为路由器必须同时将完整的幻灯片发送给所有客户端。
我的幻灯片看起来如何
<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
</script>
</body>
</html>
我想做什么
一开始,我想加载slides-container
元素完全为空。
然后,当我浏览幻灯片时,我想从服务器获取div
代表下一张幻灯片,并将其附加到 DOM 以便只有在完成后,客户端才开始下载图片和其他内容那张幻灯片(因此,大大减少了我的网络过载)。
另一个相关的事实是,幻灯片(包括slidesplayer.js
)是从将 PowerPoint 演示文稿解析为这种 HTML5 格式的外部软件自动生成的,我们将使用许多已经在 PowerPoint 中制作的演示文稿。
我的第一印象是我应该通过使用 jQuery-ajax 来实现这一点,但我不知道如何做到这一点,因为我的想法只是将div.slide
元素复制到单独的文件中。
更新: 这个答案建议在显示之前使用 jQuery 进行 DOM 操作。似乎 jQuery 每次操作 DOM 对象时都会请求资源,即使它没有插入到当前的 DOM 中。因此,一种可能的解决方案是仅使用字符串。你可以在这个和这个问题中看到更多关于这个问题的信息。