自建博客(网站加速之我是怎么从24秒提到两秒之内的)

前几天一直优化自己的网站,一开始网站速度24s,我都以为是人家的测试出了问题,经过我不懈的努力,终于把速度提到了两秒之内

先看一下这几天的测试记录。真是一言难尽啊
在这里插入图片描述
再看看现在的速度
在这里插入图片描述
在这里插入图片描述
好啦,话不多说,直接干活奉上。。

在哪查看速度慢的原因

我使用的卡卡网里面有一个高级诊断。高级诊断完成,他会给你生成一个报表,告诉你去优化什么。你可以下载诊断报告。进行适当优化。
在这里插入图片描述

说一下,我进行的优化

gzip压缩

用gzip工具压缩html文件可以减少 32.1KB (85.0%)的数据传输量,就是这个工具,将我网站大小缩减了很多。
在这里插入图片描述

说一下我是怎么配置的。首先我是用nginx服务器配置的。(还可以用IIS)。
在服务器找到nginx配置文件,在http中添加如下配置,下面有详细 的注释,我就不一一介绍了。

http {
  
    #启用gzip模块
    gzip  on;
    #在客户端访问网页时,对文本、JavaScript和CSS文件进行压缩输出
    gzip_types text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml;

    #表示按照原始数据大小以16KB为单位的4倍申请内存
    gzip_buffers 4 16k;
    #表.示压缩级别为4,由于压缩级别越高,则需要压缩的时间越长,CPU消耗也越大
    #一般推荐将压缩级别设置为4
    gzip_comp_level 6;
    #设置浏览器为IE6时,不进行压缩,防止出现页面假死的现象。
    gzip_disable "MSIE [1-6]\.";
    #当响应内容大于5KB时进行压缩输出
    gzip_min_length 1k;
    #只有是HTTP/1.0协议的请求时才会进行gzip压缩
    gzip_http_version 1.1;
    #设置Nginx作为反向代理服务器时,无条件压缩所有结果数据
    gzip_proxied any;
    #表示在响应消息头中添加Vary: Accept-Encoding,
    #使代理服务器根据请求头中的AcceptEncoding识别是否启用Gzip压缩。
    gzip_vary on;
}

Nginx动静分离

   location ~ .*\.(html|js|css|gif|jpg|jpeg|png)$ { #静态
                   proxy_pass http://39.96.64.200:8081;
                   #cache
                   expires 3d;
                }

        location ~ .*\.(htm|jsp|do|action)$ {  #动态
                   proxy_pass http://39.96.64.200:8082;
                }

压缩css,js,图片

卡卡网有对图片,css,js压缩的工具,可以直接使用
在这里插入图片描述
我这个图片加载了5s,我这里就对图片进行了压缩
在这里插入图片描述

这些css文件加载时间太长,都要进行压缩优化
在这里插入图片描述

删除页面中多余的引用的js,css文件

这个js文件我是用不到的,在这个页面删除对它的引用
在这里插入图片描述

优化redis缓存

原来首页没有加缓存,感觉不出速度慢来,现在加了缓存,速度是真的快。
一开始,我把缓存设置成了永久缓存,也就是没有设置过期时间,TTL都是-1
在这里插入图片描述
后来发现,由于缓存 的原因,有些数据不会实时的更新,或许我更新的不是很频繁,但是我更新了,你缓存还是不变那就不行了。

我给缓存的每个key都配置了缓存过期时间。有一些真的不频繁改变的,我设置成了永久缓存。这些永久缓存也不是一直在缓存中,只有当后台更新出新的数据的时候才会进行删除,更新那些缓存。

具体代码如下自己配置一个缓存自定义的类

@Configuration
@EnableCaching
//Redis 缓存配置类
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {
    //让保存到 Redis 里的 key 和 value 都转换为可读的 json 格式。否则会是二进制格式,通过RedisClient 工具也无法识别
        RedisSerializer stringSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.PUBLIC_ONLY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        redisTemplate.setKeySerializer(stringSerializer);
        redisTemplate.setHashKeySerializer(stringSerializer);

        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

        RedisCacheManager  cacheManager = new RedisCacheManager(redisTemplate);
        //这里可以设置一个默认的过期时间 单位是秒
     //   cacheManager.setDefaultExpiration(6000);
        // 设置缓存的过期时间
        Map<String,Long> expiresMap=new HashMap<>();
        expiresMap.put("blogs",3600*1L);
        expiresMap.put("tags",3600*1L);
        expiresMap.put("types",3600*1L);
        expiresMap.put("comments",3600*1L);
        cacheManager.setExpires(expiresMap);
        return cacheManager;
    }
}

上面的那些是用来让保存到 Redis 里的 key 和 value 都转换为可读的 json 格式的,不是重点,下面的缓存配置过期时间是重点。给不同的key设置过期时间。
在这里插入图片描述
这里的key值在java中可以用注解指定
第一种方式,指定为blogs
在这里插入图片描述
第二种方式,指定为forever
在这里插入图片描述
第一种方式我用来存储会过期的数据,我使用第二种方式来存储永久数据。

在这里插入图片描述
redis优化完了。

CDN加速

所有都优化完了,如果还是嫌慢,那就用用CDN加速吧。
什么是CDN加速?对于网站来说,通过CDN加速可以提高网站的访问速度,因为这是一种将网站内容通过缓存方式分发不同节点的技术。当网站有了CDN加速以后,往往可以根据用户的请求地域,去选择一个离用户最近网络的缓存服务器,这样就可以为用户更快的提供内容服务,与直接访问源站是没有什么区别的,这种缩短与内容网络距离的方式,达到加速效果的技术,就叫做CDN加速。
关于cdn加速,我主要是用来进行图片加速。cdn加速有两家,一个是阿里云的要钱,百度云的不要钱,当然速度也是一份价钱一分货。我那小网站,当然是选百度云了。进行了三天的实名认证了,百度云的还没通过实名。
我试了一下阿里云的图片加速。用了之后,反而加载更慢了。我有点慌乱。仔细观察,发现他的对我每次图片的访问都进行了优化,可能我用的时间短,还没看出效果来。

后来问了客服,也确实是用的时间短。不过我还是打算试试百度云的吧。评论都说不稳定。自己试试对比一下就知道了。

数据库优化

最后说一下数据库优化。我用的jpa,前期写代码是真的爽,后期优化是真的傻。我优化了一些比如说返回对象的所有信息,我改成只返回对象中我需要的信息。
比如说,一个博客对象,我只需要id,name,title,其他数据我不需要,那么我就只返回这些数据,其他数据都是null,这样也加快了redis缓存查询的速度。比如像下面的json数据一样,id,title有值,其他都为空。
在这里插入图片描述

进行数据处理后,大大缩减了内存空间。加快了查询速度,以及缓存读取速度。一举两得。

猜你喜欢

转载自blog.csdn.net/qq_43925089/article/details/107726446