自建博客(网站加速之我是怎么从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有值,其他都为空。

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

全部评论

相关推荐

2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本&nbsp;专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴&nbsp;快手&nbsp;去哪儿&nbsp;小鹏汽车&nbsp;不知名的一两个小厂其中字节13场&nbsp;两次3面挂&nbsp;两次2面挂&nbsp;一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂&nbsp;最后一次到录用评估&nbsp;至今无消息滴滴三面完&nbsp;没几天挂了&nbsp;所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通&nbsp;至今无消息小鹏汽车hr&nbsp;至今无消息美团2面挂&nbsp;然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂&nbsp;这个是我菜,面试官太牛逼了拼多多二面挂&nbsp;3道题也全写了&nbsp;也没问题是回答不出来的&nbsp;泡一周后挂腾讯面了5次&nbsp;一次2面挂&nbsp;三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务