太多的音频标签使我的网站加载速度非常慢.有没有解决方案
too many audio tags make my website load very slowly. is there a solution?
我做了一个网站(还没有播出),我用一些免费托管对其进行了现场测试。该网站包含一个地图标签和一张大图片。我这样做是为了让如果有人点击图片的一部分,就会听到特定的音频,根据他点击的位置。
我的问题是有很多音频标签(大约 300 个),并且因为有很多占用带宽的文件,大约需要 10 分钟才能完全加载网站,这意味着大多数音频在几分钟内无法工作。
我想知道是否有一种方法,也许是javascript或PHP的响应方式,它允许我仅在用户单击地图时才制作这些音频标签。这样它就不会使用那么多带宽。另外,如果有人能想到更好的方法,它将不胜感激。
我正在为点击事件添加 javascript,以便您可以看到它的全部内容 -
$('#Swensens_maze').click(function(){
$('audio').each(function(){
this.pause(); // Stop playing
// Reset time
});
$('#Swensens_maze_audio').get(0).play();
return false;
});
这是众多例子中的一个例子。"#swensens_maze"是区域标签,"#Swensens_maze_audio"是它的音频标签。
发生您的问题是因为浏览器尝试为每个音频标签预加载音频。所以答案是将音频标签中的属性预加载设置为值 none
<audio preload="none">
编辑
音频现在会自动分层
编辑 2
我刚刚想起空src
是一种不好的做法,我会找到一个解决方案,最好的方法是将信息存储在其他标签中,然后使用 js
创建一个音频标签编辑 3
JS小提琴版本2
更好的版本,不留空的src
属性,所有的音频信息都存储在隐藏的input
内,一旦点击该区域,点击div
内通过JS提供的audio
标签。
<html>
<head>
<script src="jq.js"></script>
<style>
.map {width:100%;height:75px;background:#bbb}
.c1 {background:#f2f2f2}
.c2 {background:#000}
.c3 {background:#cc4444}
</style>
</head>
<body>
<div class='map c1'>
<input type='hidden' data-original='1.mp3' data-format="audio/mpeg" />
</div>
<div class='map c2'>
<input type='hidden' data-original='2.mp3' data-format="audio/mpeg" />
</div>
<div class='map c3'>
<input type='hidden' data-original='3.mp3' data-format="audio/mpeg" />
</div>
<script>
$('div.map').click(function () {
$('audio').each(function () {
this.pause();
});
//Check if audio is already present, if true, then exit
if($(this).find('audio').length > 0)
return;
var childInput = $(this).find('input:hidden'), //Find information
audioTag = document.createElement("AUDIO"),// Create AUDIO element
audioSource = document.createElement("SOURCE"), //Create SOURCE element
audioType = childInput.attr('data-format'),//retrieve audio type, then you could checkif the browser supports this format
audioSrc = childInput.attr('data-original'); //retrieve audio src
//Set type and src of the source
audioSource.type= audioType;
audioSource.src= audioSrc;
//Enable controls and append SOURCE to AUDIO
audioTag.controls = true;
audioTag.appendChild(audioSource);
this.appendChild(audioTag);// Append the created audio tag to the clicked div
audioTag.load();//Load the src
audioTag.play();//Play the audio
return false;
});
</script>
</body>
</html>
较早的答案
对空源不利 $('div.map').click(function () { $('audio').each(function () { this.pause(); }); var audioTag = $(this).find('audio'), sourceTag=audioTag.children('source');
if (sourceTag.attr('src')=='') {
sourceTag.attr('src', sourceTag.attr('data-original'));
audioTag.load()
}
audioTag.get(0).play();
return false;
});
整页小提琴演示(播放器不出现,因为没有任何音频文件):
<html>
<head>
<script src="jq.js"></script>
<style>
.map {
width:100%;
height:75px;
background:#bbb
}
.c1 {
background:#f2f2f2
}
.c2 {
background:#000
}
.c3 {
background:#cc4444
}
</style>
</head>
<body>
<div class='map c1'>
<audio controls>
<source data-original='1.mp3' src='' type="audio/mpeg" />
</audio>
</div>
<div class='map c2'>
<audio controls>
<source data-original='2.mp3' src='' type="audio/mpeg" />
</audio>
</div>
<div class='map c3'>
<audio controls>
<source data-original='3.mp3' src='' type="audio/mpeg" />
</audio>
</div>
<script>
$('div.map').click(function () {
$('audio').each(function () {
this.pause();
});
var audioTag = $(this).find('audio'),
sourceTag=audioTag.children('source');
if (sourceTag.attr('src')=='') {
sourceTag.attr('src', sourceTag.attr('data-original'));
audioTag.load()
}
audioTag.play();
return false;
});
</script>
</body>
</html>
<audio src="abc.mp3"controls class="audioDemo" preload="none"></audio>
<audio src="abc1.mp3"controls class="audioDemo" preload="none"></audio>
<audio src="abc2.mp3"controls class="audioDemo" preload="none"></audio>
<audio src="abc3.mp3"controls class="audioDemo" preload="none"></audio>
<audio src="abc4.mp3"controls class="audioDemo" preload="none"></audio>
,不要将 src 属性留空,而是给 src 一个有效的空白和短文件.mp3。然后当用户单击或用好文件替换 src 时,如下所示:
document.getElementById("audio8").src = "song.mp3";
此外,根据页面的制作方式,如果音频逐块出现,请查看懒惰大小.js以便在吼叫时顺利加载内容。易于使用且功能强大。https://github.com/aFarkas/lazysizes
您的浏览器会尝试为每个音频标签预加载音频。所以答案是将音频标签中的属性预加载设置为值 none使用可以使用:<audio controls preload="none">
- CS5隐藏图层的速度非常慢
- 简单的dart网页应用程序在IE上添加按钮的速度非常慢
- 启动网站时,页面和图像加载速度非常慢
- 太多的音频标签使我的网站加载速度非常慢.有没有解决方案
- 生成图像的速度非常快
- $cordovaContacts加载速度非常慢
- IEDriverServer 发送密钥的速度非常慢 - JavaScript 替代建议
- Facebook推荐/最近的活动挂在浏览器上,速度非常慢
- jQuery:当重复调用时,重绘函数的速度非常慢
- html5sql.js在安卓蜂窝和ICS中的插入速度非常慢
- IE8(javascript):在SELECT元素中加载大量选项的速度非常慢
- CanvasRenderingContext2D.drawImage()在大画布上的Chrome中速度非常慢
- 安卓设备上的JavaScript/HTML/CSS应用程序-速度非常慢
- 使得音频文件在线播放速度非常慢
- 以非常高的速度显示流数据
- 在javascript中切换时,Chrome应用样式表的速度非常慢
- 我的Node.js应用程序的反应速度非常慢
- 许多颜色选择后,动画的表现和速度非常慢
- Javascript在Ajax中的加载速度非常慢
- couchDB的过滤速度非常慢,即使使用erlang也是如此