个人博客:https://mmmmmm.me

源码:https://github.com/dataiyangu/dataiyangu.github.io

tip:没有耐心的可以直接看:正式在hexo next中加入懒加载(最下面)

废话

本来想全部优化完,一起写博客的,大半夜的也不想太累,可是可能因为年纪大了吧(23了),怕隔天给忘记了,到时候回头找错误岂不是浪费更多的时间,索性,今天拖着疲惫的大脑,写下这篇博文吧~

背景

本人的博客mmmmmm.me (目前可能还是问题很多的,不介意的可以稍微看一下) pjax基本优化完了,目前我涉及到的,现在想优化一下网站的加载速度,因为我的网站刚进去的时候白屏大半天,然后浏览器的转盘转半天,(就是刷新那个标识了,不会表达),之后就是一堆查看通过浏览器的审查模式看network,发现首页的大图片占了很久的响应时间,之后发现我的hexo后台管理工具,hexo-admin(一个很方便的博客发布工具,有兴趣的看我另一篇博客,网上一搜一大堆),每次直接复制粘贴进去,它默认保存的是png格式的,关于jpg和png的区别,希望大家也了解一下,使得我的图片好几兆,我就手动复制成jpg格式的,但是还是不行的呀,这个时候,就上网查各种优化,发现,有个懒加载这个东东,客观往下看。

懒加载简单介绍

何为懒加载,简言之就是在html加载的时候,若果img标签的src是有内容的,在加载的过程中,img标签就回去请求这个图片,知道加载完,我们的浏览器的刷新那个图标才会停止转动,也就是才算请求玩,这个时候懒加载就应运而生。懒加载能够在你鼠标不懂得时候只加载目前电脑窗口内需要展示的图片,电脑屏幕内部需要展示的图片就暂时不加载,对于图片比较多的网站是不是很实用呢?

关于懒加载的语法简单介绍一下:

引入js

 <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="jquery.lazyload.js"></script>

重点!敲黑板了!!!

修改图片属性(增加data-original属性,去掉src属性)

    <img alt="" width="640" height="480" data-original="img/example.jpg" />

完善懒加载函数

<script>
$(function() {
    $("img").lazyload();
});
<script>

懒加载函数可配置的参数

备注:这里必须设置图片的width和height,否则插件可能无法正常工作。

上面是最简单的调用,但是一般而言,我们还有一些特殊的需求,比如想要提前一点点加载,避免网络过慢时加载缓慢,加载隐藏图片等等,lazyload都为我们提供相应的参数。

1.设置临界点

默认情况下图片会出现在屏幕时加载. 如果你想提前加载图片, 可以设置threshold 选项, 如:设置 threshold 为 200 令图片在距离屏幕 200 像素时提前加载.

$("img").lazyload({
    threshold : 200
});

2.使用特效

默认情况下,图像完全加载并调用show()。你可以使用任何你想要的效果。下面的代码使用fadeIn (淡入效果)

    $("img").lazyload({
        effect : "fadeIn"
    });

3.当图片不连续时

滚动页面的时候, Lazy Load 会循环为加载的图片. 在循环中检测图片是否在可视区域内. 默认情况下在找到第一张不在可见区域的图片时停止循环. 图片被认为是流式分布的, 图片在页面中的次序和 HTML 代码中次序相同. 但是在一些布局中, 这样的假设是不成立的. 不过你可以通过 failurelimit 选项来控制加载行为.

    $("img").lazyload({
        failure_limit : 20
    });
      

将 failurelimit 设为 20 ,当插件找到 20 个不在可见区域的图片时停止搜索.

4.加载隐藏图片

当界面有很多隐藏图片的时候并希望加载他们的时候则使用kip_invisible 属性,将其设置为false

   $("img").lazyload({
        skip_invisible : false
    });

到这里,上面的方法已经基本满足常规的懒加载使用了,还有特殊的使用,可查看官网API。

正式在hexo next中加入懒加载

之前尝试过很多方法:

1:

如上查看相关的懒加载api文档,自定义懒加载函数,但是忽略了,img中需要data-original,并且去掉src属性,之后发现然后弥补,想要通过js的方式动态的给我的img加入这个属性,然后去掉src属性,但是js加入的前提是加载完dom模型,加载完dom模型的前提是src中的内容已经加载了,所以是不行的,故尝试修改html,next主题中没有html事swig文件,img中的内容是通过js渲染出来的。故放弃。

2:

上谷歌查看,发现可以:

    npm install hexo-lazyload --save

然后修改_config.yml文件

 lazyload:
      enable: true
      # className: #可选 e.g. .J-lazyload-img
      # loadingImg: #可选 eg. ./images/loading.png

可是我发现貌似是不行的,反正报各种错,网上好像是有人成功的。这个方法待定,附上原博客地址,感兴趣的可以研究。

http://www.zhaojun.im/hexo-lazyload/

3:按我的步骤来,不要问为什么。

我自己成功的方法:

在主题文件夹下的scripts文件夹里,写一个 js 文件,名字不限,xxxx.js,比如wohaoshuai.js


    use strict';
    var cheerio = require('cheerio'); 

    function lazyloadImg(source) {
        var LZ= cheerio.load(source, {
            decodeEntities: false
        });
        //遍历所有 img 标签,添加data-original属性
        LZ('img').each(function(index, element) {
            var oldsrc = LZ(element).attr('src');
            if (oldsrc) {
                LZ(element).removeAttr('src');
                LZ(element).attr({

                     'data-original': oldsrc
                });

            }
        });
        return LZ.html();
    }
    //在渲染之前,更改 img 标签
    hexo.extend.filter.register('after_render:html', lazyloadImg);

然后网上是说在header或者footer中引入js

     <script type="text/javascript" src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
     //也可替换其他的lazyload源
    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery-lazyload/1.9.5/jquery.lazyload.min.js"></script>
        <script type="text/javascript">
          $(function() {
          //对所有 img 标签进行懒加载
              $("img").lazyload({
              //设置占位图,我这里选用了一个 loading 的加载动画
                placeholder:"/img/loading.gif",
                //加载效果
                  effect:"fadeIn"
                });
              });
        </script>

但是我发现hexo next主题中有个themes/next/source/js/src/utils.js文件。

找到这个方法:

  lazyLoadPostsImages: function () {
        // $('#posts').find('img').lazyload({
        //   placeholder: '/images/loading.gif',
        //   effect: 'fadeIn',
        //   threshold : 0
        // });
        $('img').lazyload({
           placeholder: '/images/loading.gif',
          effect: 'fadeIn',
          threshold : 100,
          failure_limit : 20,
          skip_invisible : false
        });
      },

修改内容即可,之前是注释掉的内容,意思是只对article中的内容进行懒加载,可是我需要的是全局的都懒加载,因为上面的scripts中的js已经将全局的img都替换了标签内容,不全局懒加载的话会有的不显示,

然后就是这两个配置:


     threshold : 100,
      ailure_limit : 20,

意思上面有关懒加载的说的很清楚了,为了解决有的图片可能会不显示。

hexo next主题深度优化(二),懒加载。的更多相关文章

  1. hexo next主题深度优化(一),加入pjax功能。

    文章目录 背景: 进入正题 pjax初体验--instantclick 真正的pjax 第一步 第二步 第三步 第四步 专门基于hexo next主题的pjax(将丢失的js效果重现) 将下面讲到的提 ...

  2. hexo next主题深度优化(十),博文加密,不需要插件,极简模式,相对安全,融合pjax。

    文章目录 效果: 代码: 注意: 背景: 思路: https://www.jianshu.com/p/90c0a15c6f36 http://zhailiange.com/2017/07/06/hex ...

  3. hexo next主题深度优化(十一),next主题中加入scrollReveal.js,让文章随着鼠标的滚动,出现点小动作。

    文章目录 效果 scrollReveal简单介绍以及简单操作 参考文档: next主题中加入scrollReveal 给article标签添加属性 给底部的不蒜子添加属性 本地引入依赖并且编写启动函数 ...

  4. hexo next主题深度优化(三),引入require.js,适配pjax。

    文章目录 require.js的好处, hexo next中加入require.js 新建一个main.js作为所有js的入口 pjax的require.js实现 关于require js适配过程中报 ...

  5. 前端性能优化--图片懒加载(lazyload image)

    话说前头: 上次写了一篇webpack的学习心得,webpack能做到提升前端的性能,其模块打包最终生成一个或少量的文件能够减少对服务端的请求.除此之外,本次的图片懒加载(当然不仅限于图片,还可以有视 ...

  6. SPA应用性能优化(懒加载)

    前提: 如今开发方式都是采用前后台分离的方式,前台采用的方式则是单页面应用开发简称SPA,这种开发模式最大的一个特点就是将有所代码打包成了一个文件, 这会导致了一个问题就是如果这个应用过大,打出来的这 ...

  7. Hibernate 性能优化之懒加载

    针对数据库中的大数据,不希望特别早的加载到内存中,当用到它的时候才加载 懒加载分为:类的懒加载.集合的懒加载.单端关联的懒加载 类的懒加载    1.在默认情况下,类就是执行懒加载        2. ...

  8. hexo next主题深度优化(五),评论系统换成gittalk

    文章目录 背景: 开始: 新建comments_git.js 找到comments.swig在最后一个endif之前 引入代码 pjax加入gitalk 遇到的问题 所有的页面共享的一个评论issue ...

  9. hexo next主题深度优化(七),cdn加速。

    文章目录 注: 正题: 免费cdn 收费cdn 个人博客:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io ...

随机推荐

  1. flutter 调用摄像头和照片

    设置一个按钮调用 打开showCupertinoModalPopup FloatingActionButton(onPressed: (){ _showDialog(context); }, chil ...

  2. thinkphp5.0多条件模糊查询以及多条件查询带分页如何保留参数

    1,多条件模糊查询 等于:map[‘id′]=array(‘eq′,100);不等于:map[‘id′]=array(‘eq′,100);不等于:map[‘id’] = array(‘neq’,100 ...

  3. 分析无法进入Linux系统的原因

    上文:http://www.cnblogs.com/long123king/p/3549701.html 1: static int __init kernel_init(void * unused) ...

  4. Spring Boot配置随机数

    Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位MD5字符串 user.random.secret=${r ...

  5. python不同包之间调用时提示文件模块不存在的问题

    python对于跨包调用函数时,经常会提示模块不存在的问题,主要是python程序执行时,搜索路径导致的,python程序执行的路径依次是: (1)程序根目录(2)环境变量(3)标准库目标(D:\Py ...

  6. java-day22

    数据库设计的范式         * 概念:设计数据库时,需要遵循的一些规范.要遵循后边的范式要求,必须先遵循前边的所有范式要求 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不 ...

  7. python调用tushare获取股票日线实时行情数据

    接口:daily 数据说明:交易日每天15点-16点之间.本接口是未复权行情,停牌期间不提供数据. 调取说明:基础积分每分钟内最多调取200次,每次4000条数据,相当于超过18年历史,具体请参阅本文 ...

  8. Python 变量作用域 LEGB (下)—— Enclosing function locals

    上篇:Python 变量作用域 LEGB (上)—— Local,Global,Builtin https://www.cnblogs.com/yvivid/p/python_LEGB_1.html ...

  9. 浅析vue响应式原理

    图很清晰 当我们把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 g ...

  10. 使用JMeter进行http压力测试

    一.背景及文档目的说明 采用JMeter测试工具对腾讯视频做负载测试,使用 JMeter图形结果和聚合图帮助测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力并估计系统瓶颈和并发 ...