博客的加载速度和大小的优化、优化再优化

0. 前言

最近对博客的加载速度和各种文件体积进行了优化,特此记录一下

可以点击七仔的博客测试我的博客速度

1. 基础

1.1 图片加载优化

  1. 对于非文章类的大图片先进行一遍压缩,使用各种压缩网站就可以

  2. 然后对于各种图片最好都转换为为webp格式,相对于传统格式能降低大小大概四成左右

1.2 gzip压缩

gzip是针对文本类型进行压缩的,例如html、js、css、txt等格式,可以在nginx处打开

http {gzip  on;gzip_buffers 32 4K;gzip_comp_level 6;gzip_types text/plain application/javascript text/css;
}

2. 首屏渲染

Vue类型的博客的内容是通过实时加载去渲染的,如果蜘蛛只获取了html而没有去加载js的话实际是没有内容的。有几种解决方案。

  1. 将vue渲染成静态文件,每次增加新文章都重新渲染一遍,然后上传到服务器上。优点是加载快,但是调整插件什么的比较麻烦。

  2. 实时判断爬虫然后进行服务器端渲染。

我这里主要讲一下服务端渲染。首先是nginx判断爬虫:

http {...server {...location ... {if ($http_user_agent ~* "Sogou web spider|BingPreview|baidu|Baiduspider|twitterbot|facebookexternalhit|rogerbot|linkedinbot|embedly|quora link preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator|bingbot|Sosospider|Sogou Pic Spider|Googlebot|360Spider|qihoobot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|Sogou web spider|soso|sogou|yahoo|sohu-search|yodao|robozilla|msnbot|MJ12bot|NHN|Twiceler|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Googlebot|Ezooms") {proxy_pass  http://xxx.xxx.xxx.xxx:3000?url=https%3A%2F%2Fwww.xxxxxxxx.com${document_uri}$is_args$query_string;}}}
}

逻辑就是通过请求的User-Agent判断是否是爬虫,如果是爬虫就调用一个端口为3000的服务将路径转发给它让它加载完返回加载后(js会渲染完成)的html。

至于这个端口为3000的服务,我是用了一个docker安装的镜像为zenato/puppeteer-renderer的容器,对外端口为3000,作用就是进行服务端渲染。

docker运行语句:

docker run -d --name puppeteer-renderer -p 3000:3000 zenato/puppeteer-renderer:latest

zenato/puppeteer-renderer的开源地址:https://github.com/zenato/puppeteer-renderer


3. 接口

后端服务其实没什么好说的,就是做缓存就好了,可以用Redis。另外一般返回格式为json,所以最好在nginx处加上json格式的gzip。

http {...gzip_types text/plain application/javascript text/css application/json;
}

4. Live2d的优化

对于live2d,基础的js和css的优化就不说了,顺便提一下live2d的图片因为要拼接起来,所以很大,记得也要压缩

这里主要说一下moc格式,moc这个是用来存live2d模型的,我这里会达到三百多k,非常占资源,其实moc是可以进行gzip压缩的,压缩后我这里会降低到一百多k,不到一半,moc进行gzip压缩有我这里有两种方案:

  1. 对nginx进行配置,再增加一个针对moc的gzip压缩
http {...gzip_types text/plain application/javascript text/css application/json text/x-moc;
}

蕾姆live2d

  1. 调整xx.model.json文件中的后缀
{"model": "xx.moc.txt",
}

然后修改xx.moc为xx.moc.txt即可(需要确保nginx有做text/plain的gzip压缩)


5. 七牛云的优化

5.1 七牛云的图片瘦身

可以在七牛云的 对象存储 -> 空间管理 -> 你自己的空间 -> 多媒体样式 -> 新建样式 中配置。

我这里建议是打开图片瘦身+输出格式为webp。需要注意修改以后右侧可以看到示例链接,复制你图片的链接加上多出来的后缀即可访问。我这里访问后基本可以做到瘦身三四成的样子。

放一下配置截图:

image.png

5.2 七牛云的gzip压缩

截止到我写这篇文章的时候,七牛云会默认开启gzip加速的类型有:

text/plain
text/css
text/javascript
text/xml
application/x-javascript
application/json
application/xml
application/xml+rss
application/javascript

来源: https://developer.qiniu.com/fusion/1571/seven-niuyun-support-for-text-file-download-optimization

不能进行自定义,所以对于上面的live2d的moc文件最好调整为txt格式进行gzip压缩


6. 工具

我这里用了谷歌的 PageSpeed Insights 进行分析,分析还是很全的。

PageSpeed Insights: https://pagespeed.web.dev/?hl=zh_CN

放一下截图:

4790eaf60145dd91b3f147df0db582f0.png

可以点击七仔的博客测试我的博客速度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《51测试天地》电子杂志 第八十六期发布文章:打造基于 WebSocket + CDP 的 Selenium 替代方案

《51测试天地》电子杂志 第八十六期:http://www.51testing.com/html/68/n-7807368.html 阅读地址:http://download.51testing.com/wenzhang/51Testing_wenzhang86.pdf

实用指南:数字孪生背后的大数据技术:时序数据库为何是关键?

实用指南:数字孪生背后的大数据技术:时序数据库为何是关键?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

Qt和ffmpeg结合打造gb28181推流/支持udp和tcp被动以及tcp主动三种方式

一、前言说明 上次已经实现了ffmpeg的rtp推流,折腾了好一阵子才搞定,原来是要指定rtp_mpegts方式,但是问题又来了,默认ffmpeg支持的是udp推流,而28181中的要求还要支持tcp被动和tcp主动两种方式,这个要么改ffmpe…

【每日积累】浅谈mvc,mvvm,mvp

复杂的软件必须有清晰合理的架构,否则无法开发和维护。 如果是一個人開發 App,不會有人管你怎麼寫、怎麼設計,反正自己開心就好。 但是如果是一群人同時在開發一個 App,這時候,層次分明、分工明確、模組化的設計架…

时序攻击

细微差别背后,隐藏着惊人的安全漏洞两段看似相同的代码,为何一段安全另一段却致命?深入浅出时序攻击细微差别背后,隐藏着惊人的安全漏洞作为程序员,我们经常编写比较函数——比较字符串、密码、令牌等。但你是否想…

【React系列】一文让你了解React中Component和PureComponent差异之分

关于React中Component和PureComponent 你应该了解的 任何技术和产品产生的时候,都应该了解当时所处的场景,以及为什么会需要这个东西,他是来解决当下业务线那些弊端,又或者优化了什么,否则它的产生将毫无意义可言…

DIY ChatGPT 一周狂揽 27k Star「GitHub 热点速览」

上周,腾讯、阿里、蚂蚁到谷歌、Anthropic,各大厂都跟约好了一样,在 AI 各个领域疯狂“亮剑”。咱们吃瓜群众围观“神仙打架”的同时,开源社区也没闲着。抛开那些高大上的大模型不谈,GitHub 上的“野生”开源大神们…

Active Directory安全技巧:FSMO角色管理与PowerShell查询

本文详细介绍了Active Directory中FSMO角色的重要性,提供了使用PowerShell查询森林和域中FSMO角色持有者的具体代码,帮助系统管理员更好地管理域控制器备份和安全策略。Active Directory安全技巧第10篇:FSMO角色 获…

Random VIMs

Random VIMs 设置缩进 :set ts=4 sw=4 sts=4设置相对行号 :set relativenumber本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/19154054

【React系列】React.memo() vs useMemo()

React.memo()与useMemo()之间有什么主要区别? 性能优化是一只web开发中的一个重要讨论点。对于react团队同样如此,为了实现加速组件的渲染速度,采用“备忘录”的方式。 所以这个时候就React.memo()和 useMemo 钩子 …

【每日积累】javascript 一文弄懂eval

eval 动态化执行语句 概述 eval方法是javascript的全局方法,能够执行含有javascript代码的字符串,虽然eval方法带来强大的动态执行功能,但考虑其负面影响,建议少用,在特殊情况下可以使用eval方法动态改变代码的执…

腾讯云COS通过CDN加速配置指南 - 教程

腾讯云COS通过CDN加速配置指南 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

前端: 如何优化列表大批量的数据渲染

需求点:如何列表数据渲染进行优化? 最近业务上也碰到这个问题点。上网也查了查资料,貌似也经常问,特此写文章记录下来。关于如何处理以上上面的业务痛点: 就两点: 1 、虚拟列表是最主流的解决方案,不渲染所有的…

量子计算25年发展历程与技术挑战

本文回顾了量子信息处理会议25年发展历程,探讨了量子计算从理论到实验的突破,包括量子算法实现、量子复杂性理论对数学的影响,以及当前面临的可扩展性、错误率控制和实际应用等关键技术挑战。25年量子信息处理发展历…

tomcat启动一次问题的处理。

tomcat启动一次问题的处理。说明:2025.10.20,出现启动tomcat对任何请求都没有响应的情况。通过删除 $tomcat/work/Catalina 下的全部数据。并重启解决。但是重启需要的时间比较久。大约5分钟。

软件开发 --- trae如何和环境配合执行

软件开发 --- trae如何和环境配合执行trae会自动执行代码,但是执行前需要我们提前安装好所有的执行环境。 有的环境可能需要手动配合,比如trae在执行这个代码前手动触发环境执行。

marmot的一些特点

marmot的一些特点以前简单介绍过marmot ,以下说下一些特点 特点当前版本已经通过nats server 包内置到了服务中,不需要独立部署nats 了,但是推荐还是部署3个节点 默认内置的nats 没有开启认证,注意使用,同时nats …

应用安全 --- 如何反编译一个超大的函数

应用安全 --- 如何反编译一个超大的函数先用ida反编译一下 再用claude max 完善代码并配合完整的提示词 再次执行上述过程直到没有任何遗漏的代码