基于用户行为的图片等资源预加载

一、图片的懒加载和预加载

  懒加载和本文要提到的预加载实际是不同的概念。

典型的懒加载,例如本博文章的图片,当用户滚动图片进入窗体的时候,才去加载;或者用户点击选项卡,原本隐藏的图片此时再去加载,这个也称之为懒加载。

而预加载则是,用户还没有行为发生,资源已经加载完毕,从这一定义来讲,我们传统图片啪啪啪全部加载完毕,本质上也是预加载,好处就在于,体验好啊,没有泛白或者菊花的出现。不足也很明显,那就是资源可能白白加载了,尤其视频之类的,小明打开bilibili就是来围观广告的,结果,百兆视频巴拉拉魔仙般全加载好了,搞得好像流量不要钱的样子,也是不可取的。

那有什么办法可以把懒加载的省资源省流量和预加载良好体验结合在一起呢?有一些比较好的案例,那就是基于用户行为的资源预加载。

二、基于用户行为的资源预加载

下图所示是一个常见的选项卡:

此选项卡对应面板内容是包含图片信息的,由于,选项卡是点击行为触发的切换效果,因此,后面的“美女2”和“美女3”按钮对应的图片如果不点击,用户是永远都看不到的,此时这两位美女图片就没必要加载,因为,很可能,用户不会点这两个选项卡按钮。

因此,选项卡2和3我们需要岁图片进行懒加载处理,也就是页面载入默认不加载的。

然后,我们通常的处理是当用户去点击选项卡按钮的时候,在对应面板呈现的时候,我们再去加载图片内容。于是,就存在这样一个不好的体验——由于内容呈现瞬时,而图片呈现是异步的,就很容易出现选项卡主体内容切换过来了,结果是个空白,过了会儿图片才出现。

其实,我们可以基于某些行为对此图进行不一样的预加载,来提示我们的浏览体验,怎么做呢?

我们绝大数用户都是鼠标去点击选项卡的,而点击选项卡之前会有其他一些行为发生,例如:

mouseover按钮的容器 → mouseover按钮 → mousedown按钮等。

于是,就给了我们机会,在click行为发生之前去预加载图片,例如,我们鼠标hover按钮的时候。一般一个用户hover一个按钮再click行为技术,说有0.5秒的时长一点都不为过吧,因为光鼠标按下再抬起就上百毫秒了。从hover到click之间的这段时间,已经足够我们图片进行预加载了。而hover到click的行为是极大概率事件。于是乎,我们通过提前捕捉用户的其他行为实现了懒加载和预加载的完美结合!

点击选项卡,十有八九图片瞬间就呈现了,就是因为你hover的时候,图片已经去加载了。大家有兴趣可以打开控制台观察资源的加载,就可以明白上面巴拉巴拉说的hover预加载是怎么回事了。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>用户行为预加载</title>
    <style>
        *{
            margin: 0;
            padding:0;
        }
        html{
            font-family: "Helvetica Neue", Helvetica, sans-serif;
        }
        a{
            color:#333;
            text-decoration: none;
        }
        .container{
            margin: 0 auto;
            width: 210px;
        }
        .tab{
            margin: 20px 0;
        }
       .tab .tab-a{
           font-size: 14px;
           padding:4px;
       }
       .tab .active{
           border-bottom: 2px solid #00BCD4;
       }
        .panel img {
            display: none;
        }
       .panel .active{
           display: inline-block;
       }
    </style>
    <script src="../jquery-3.1.0.js"></script>
</head>
<body>
    <div class="container">
        <div id="tab" class="tab">
            <a href="#" class="tab-a active">美女一</a>
            <a href="#" class="tab-a">美女一</a>
            <a href="#" class="tab-a">美女一</a>
        </div>
        <div id="panel" class="panel">
            <img src="mv1.png" class="active">
            <img data-src="mv2.png">
            <img data-src="mv3.png">
        </div>
    </div>
</body>
<script>
    $(function(){
        var elAs = $("#tab a"),
            elImgs = $("#panel img");
        elAs.each(function(index,ele){
            $(this).data("index",index).on("click",function(){
                var target = elImgs.eq($(this).data(‘index‘));
                // 选项卡UI
                $(this).addClass(‘active‘).siblings(‘a‘).removeClass(‘active‘);
                // 面板显隐
                target.addClass(‘active‘).siblings(‘img‘).removeClass(‘active‘);
            });
        });

        // 本demo的最重点,hover行为预加载图片
        elAs.on({
            mouseenter: function() {
                var target;
                if (!this.preloaded) {
                    target = elImgs.eq($(this).data(‘index‘));
                    // 图片地址换成真实地址
                    target.attr(‘src‘, target.attr(‘data-src‘)).removeAttr(‘data-src‘);
                    // 标记已加载
                    this.preloaded = true;
                }
            }
        });
    });
</script>
</html>

@ 转载处 本文地址:http://www.zhangxinxu.com/wordpress/?p=5419  

时间: 2024-08-01 10:44:19

基于用户行为的图片等资源预加载的相关文章

手把手教你构建 Android WebView 的缓存机制 &amp; 资源预加载方案

前言 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案. 目录 1. Android WebView 存在什么性能问题? Android WebView 里 H5 页面加载速度慢 耗费流量 下面会详细介绍. 1.

前端资源预加载并展示进度条

我们经常会看到,一些站点在首次进入的时候会先显示一个进度条,等资源加载完毕后再呈现页面,大概像这样: 然后整个页面的操作就会非常流畅,因为之后没必要再等待加载资源了.尤其是在移动端,或者是页游中,这样做能避免页面出现白屏(等待加载图片),很大程度提升用户体验.那这种技术是如何实现的呢?其实非常简单,本文就来从基础细节探究一番. 为什么需要资源预加载 大多时候,我们的页面并不是一次渲染完毕的,而是随着用户的操作,不断修改DOM节点,如果你动态插入了一个图片节点,那么浏览器要马上发一个http请求,

前端性能优化 - 资源预加载

转帖: https://css-tricks.com/prefetching-preloading-prebrowsing 当提到前端性能优化时,我们首先会联想到文件的合并.压缩,文件缓存和开启服务器端的 gzip 压缩等,这使得页面加载更快,用户可以尽快使用我们的 Web 应用来达到他们的目标. 资源预加载是另一个性能优化技术,我们可以使用该技术来预先告知浏览器某些资源可能在将来会被使用到. 引用 Patrick Hamann 的解释: 预加载是浏览器对将来可能被使用资源的一种暗示,一些资源可

页面资源预加载(Link prefetch)

不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用.htaccess设置页面头信息和缓存时间,JavaScript压缩,使用CDN等.我曾经介绍过本站上使用的一些速度优化技术.而在HTML5里,出现了一个新的用来优化网站速度的新功能:页面资源预加载/预读取(Link prefetch). 页面资源预加载/预读取(Link prefetch)是什么?

HTML5页面资源预加载(Link prefetch)功能加速页面加载速度

页面资源预加载/预读取(Link prefetch)是什么?来自MDN的解释: 页面资源预加载(Link prefetch)是浏览器提供的一个技巧,目的是让浏览器在空闲时间下载或预读取一些文档资源,用户在将来将会访问这些资源.一个Web页面可以对浏览器设置一系列的预加载指示,当浏览器加载完当前页面后,它会在后台静悄悄的加载指定的文档,并把它们存储在缓存里.当用户访问到这些预加载的文档后,浏览器能快速的从缓存里提取给用户. 简单说来就是:让浏览器预先加载用户访问当前页后极有可能访问的其他资源(页面

[转]资源预加载

资源预加载可以提升用户体验,如果每次用户打开页面都要加载图片,js,css等资源,会影响用户体验.资源预加载可以一定程度上改善这种情况. 我们可以做的是,但第一个页面load完的时候,在用户阅读网页的空隙,把下一个页面所用的资源提前加载过来cache住,这样下个页面就直接读缓存资源了,这样可以一定程度改善用户体验. 那么预加载资源需要解决的主要问题是JS加载过来不会被直接执行,css加载过来不会更改页面样式. 这样就会产生很多方案, 这里介绍一种不错的兼容方案: 1. IE下用new Image

前端性能优化 – 资源预加载

导语    当提到前端性能优化时,我们首先会联想到文件的合并.压缩,文件缓存和开启服务器端的 gzip 压缩等,这使得页面加载更快,用户可以尽快使用我们的 Web 应用来达到他们的目标. 资源预加载是另一个性能 当提到前端性能优化时,我们首先会联想到文件的合并.压缩,文件缓存和开启服务器端的 gzip 压缩等,这使得页面加载更快,用户可以尽快使用我们的 Web 应用来达到他们的目标. 资源预加载是另一个性能优化技术,我们可以使用该技术来预先告知浏览器某些资源可能在将来会被使用到. 引用 Patr

关于cocos2d-x 与 cocos2d-html5 资源预加载的思考

移动端资源预加载,可以做到需要加载的时候,从本地磁盘加载到内存,当纹理不需要的时候,都是强制清理内存里的纹理占用: cc.TextureCache.getInstance().removeAllTextures(); cc.TextureCache.getInstance().dumpCachedTextureInfo();//test 打印仍然在使用的纹理 cc.TextureCache.purgeSharedTextureCache(); cc.SpriteFrameCache.getIns

资源预加载preload和资源预读取prefetch简明学习

前面的话 基于VUE的前端小站改造成SSR服务器端渲染后,HTML文档会自动使用preload和prefetch来预加载所需资源,本文将详细介绍preload和prefetch的使用 资源优先级 在介绍preload和prefetch之前,首先要介绍浏览器的资源优先级 在Chrome浏览器中,不同的资源在浏览器渲染的不同阶段进行加载的优先级不同 一共分成五个级别 Highest 最高 Hight 高 Medium 中等 Low 低 Lowest 最低 其中主资源HTML和CSS的优先级最高,其他