【问题标题】:Pagespeed - Defer loading of slideshow imagesPagespeed - 延迟加载幻灯片图像
【发布时间】:2014-01-22 23:34:25
【问题描述】:

我正在尝试降低页面速度,而我的幻灯片是我的主要障碍。为简单起见,我在下面的代码中仅显示使用 3 张图片...我实际上有 17 张相当大的图片。我想弄清楚的是如何将第一个图像加载为 img src 或 base64 并将剩余的图像推迟到加载完成。

幻灯片的html(使用jquery和js称为loopedslider1)loopedSlider js可以在这里找到http://jsfiddle.net/tS27H/

<div id="slider">
<div id="loopedSlider1">
    <div class="container1">
        <div class="slides1">
            <div>
                <img src="i/1.jpg" width="624" height="535" alt="">
                    <p>Copyright © 2014 - All Rights Reserved.</p></div>
            <div>
                <img src="i/2.jpg" width="624" height="535" alt="">
                    <p>Copyright © 2014 - All Rights Reserved.</p></div>
            <div>
                <img src="i/3.jpg" width="624" height="535" alt="">
                    <p>Copyright © 2014 - All Rights Reserved.</p></div>                    
            </div>
        </div>
        <div id=slider1-button-wrap>
            <a class="previous slider1-button-left" href="#">Left</a>
            <a class="next slider1-button-right" href="#">Right</a>
        </div>
    </div>
</div>

我看着做一个精灵,base64,base64 的精灵,使用 css 延迟图像:

<script>
 function downloadAtOnload1() {
 var element1 = document.createElement("style");
 element1.src = "xd.css";
 document.body.appendChild(element1);
 }  
 if (window.addEventListener)
 window.addEventListener("load", downloadAtOnload1, false);
 else if (window.attachEvent)
 window.attachEvent("onload", downloadAtOnload1);
 else window.onload = downloadAtOnload1;
</script>

<div id="image2">
    <p>Copyright © 2014 - All Rights Reserved.</p>
</div>

 #image2{background-image: url(data:image/png;base64,longstring}

只有在使用 html img src 时才能运行幻灯片放映。

任何建议将不胜感激。

【问题讨论】:

  • 作为一个流程怎么样? 1. 加载用户将在首屏看到的任何内容。 2.window.load之后,加载剩下的图片。 3. 加载完所有图像后,开始幻灯片放映。
  • 我不知道这是否有任何帮助,但 元素确实有一个 onload 事件,您可以使用它进行调查。
  • 你想支持哪些浏览器?
  • 你能让你的小提琴真正工作吗?
  • @Jasper 我明白你在说什么......幻灯片在首屏播放时有足够的延迟,如果我能弄清楚如何推迟其余的图像,如果应该工作的话。

标签: javascript jquery html css image


【解决方案1】:

好的……这就是我解决这个问题的方法

创建一个非常小的 1px x 1px 图像,我称之为 blank.png

把我的 HTML 改成这个

<div id="slider">
<div id="loopedSlider1">
    <div class="container1">
        <div class="slides1">
            <div>
                <img src="i/1.jpg" width="624" height="535" alt="">
                    <p>Copyright © 2014 - All Rights Reserved.</p></div>
            <div>
                <img id="i2" src="blank.png" width="624" height="535" alt="">
                    <p>Copyright © 2014 - All Rights Reserved.</p></div>
            <div>
                <img id="i3" src="blank.png" width="624" height="535" alt="">
                    <p>Copyright © 2014 - All Rights Reserved.</p></div>                    
            </div>
        </div>
        <div id=slider1-button-wrap>
            <a class="previous slider1-button-left" href="#">Left</a>
            <a class="next slider1-button-right" href="#">Right</a>
        </div>
    </div>
</div>

通过将第一张图片保留在幻灯片中,这是我想要展示的真实图片之一,幻灯片中的延迟允许使用延迟的 javascript 替换所有空白.png 图像。

我的 defer js 脚本标签放置在 html 标签的最底部,就在关闭 body 标签之前

<script>
 // Add a script element as a child of the body
  function downloadJSAtOnload() {
 var element = document.createElement("script");
 element.src = "x.js";
 document.body.appendChild(element);
 }
 // Check for browser support of event handling capability
 if (window.addEventListener)
 window.addEventListener("load", downloadJSAtOnload, false);
 else if (window.attachEvent)
 window.attachEvent("onload", downloadJSAtOnload);
 else window.onload = downloadJSAtOnload;
</script>

我在 x.js 文件中放入的内容

jQuery(function(){
$('#i2').attr('src','i/2.jpg')
$('#i3').attr('src','i/3.jpg')
});

【讨论】:

  • 如果运行我的页面以提高页面速度.... i/1.jpg 和 blank.png 是唯一会影响我的页面速度的图像...其余的将推迟到页面已加载。通过将 blank.png 设为 base64 图像,您可以将其减少到甚至 1。
猜你喜欢
  • 2012-12-20
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2012-07-13
相关资源
最近更新 更多