网站优化(四):SpringBoot的优化与技术选型
上一篇写完了服务器的购买和配置,这篇就写一下SpringBoot的优化与技术选型,选用了效率更高的Freemarker,增加了Redis缓存,增加了性能统计,增加了Github的Actions Workflows。
前端引擎选用Freemarker放弃Thymeleaf
在之前的版本里,我都使用的是Thymeleaf作为我的前端视图引擎,它能很好的保留html静态文件特征,使得可以直接打开html静态文件,可以和java代码解耦合,但是!截止到我发文时间,Thymeleaf这帮憨憨已经4年没有更新了,见下方截图,而且执行效率给我的感觉总是很慢,感觉不是秒开。我又去Freemarker那边看了看,见下方继续说。

Freemarker的更新频率见下方截图,虽然不能说每天都有更新,但最少可以看出是有人在管理和更新的,而且我尝试了一下对比Freemarker和Thymeleaf的执行效率,我感觉Freemarker几乎是秒开页面,而且在网络上搜索了一些资料发现使用Freemarker的人更多,所以我选择了执行效率更高的Freemarker作为我的前端引擎。

使用Redis缓存
说到使用缓存,我还得先说场景问题,因为并不是所有地方都适用缓存,抛开使用场景直接就加缓存的都是耍流氓。
本次更新的重点是提升页面打开速度,在使用缓存方面就需要先分析一下我自己的使用场景,我的个人网站博客基本都是查询操作,没有繁重的业务逻辑,也不需要事务的支持,唯一在更新的就是文章浏览量,但这个数值并不需要准确和实时的时效,加缓存完全可接受。磁盘IO跟内存比是很慢的,所以不如直接将热数据加载到内存中,随时取用。
然后就是缓存的选择,最早我使用过Memcache,后来开始流行Redis,虽然它们都是将数据存储在内存中,但Redis更多的数据类型,Redis还可以定期将数据写回数据库,而且Redis可以定期保存到磁盘(持久化),数据丢失后可以通过aof恢复,而Memcache遇到意外的话,数据就没有了。然后对比流行的程度和SpringBoot的支持,我选择了更流行的Redis作为我的缓存数据库。
关于缓存的时间,每个人都有自己的想法,因为每个人遇到的流量也不一样,访问量小时间短的话起不到缓存的意义,如果缓存时间太长又担心变化的数据不能及时更新,比如浏览量和评论数据等等,我目前使用的缓存时间是2个小时,因为根据我的网站流量,基本每个小时肯定会有人访问,经过折中决定使用两个小时作为我的缓存时间。
增加性能统计
有的同学可能关注到,在我的网站页面右下角,会显示一行字,例如”Processed in 0.001055 second(s), calls 6 methods.“,这是通过Spring的AOP面向切面统计的时间,在后台可以打印出调用了多少个方法,每个方法执行的耗时,这样可以快速定位到是哪个方法出了问题,对性能低下的方法进行优化,本篇只讲后端的内容,前端的性能优化和评测在后面连续更新中再写。

使用Github的Actions Workflows
说到网站页面右下角,可能还有同学注意到这样一行字”Ver: 1.0.24 Build: 20201206143526“,本次更新主要优化效率,而每次更新打包部署,也非常耗费时间和精力的,正巧发现了Github的Actions Workflows,这个是Github的类似CD/CI的自动化工作流,这个Github还是非常厚道的,之前我使用Travis-CI速度非常慢,而Github提供的Actions性能非常高,似乎没有保留和限速,编译速度杠杠的,所以在这里推荐一下Github的Actions Workflows。
利用Github的Actions,在每次发布版本的时候触发工作流,自动执行编译、打包、上传Docker镜像,所以页面下方会有当前的版本和编译时间戳。

商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
相关推荐
猜你还喜欢这些内容,不妨试试阅读一下评论与留言
以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。微信订阅号
扫码关注「任霏博客」微信订阅号- 大佬 引入jar包那里的 driver class 怎么选的?
- 我也遇到了这个问题,已经解决了,在此分享一下 1、宿主机也要创建kingbase的用户和用户组,并且要查看一下用户和用户组的ID(这个很重要) 2、把data目录的用户和用户组设置为kingbase 3、先不要把data路径挂载到宿主机上,这时就可以正常启动,启动后进入容器,查看一下容器内的kingbase的用户和用户组ID是多少,和第一步的ID是否一致,如果ID一致,那正常挂载目录就行;如果ID不一致,那就需要修改Dockerfile文件,在构建镜像时,修改容器内的用户和用户组ID,必须和宿主机的保持一致。然后重新构建镜像,就可以正常挂载宿主机目录了 4、其实直接修改宿主机的用户和用户组ID也是可以的,但是容器内的ID一般是1000,但是宿主机的这个ID很可能已经被占用了,无法修改,就只能修改容器内的ID
- 接口已经允许跨域请求,也就是说你可以在你的页面上调用,获取用户的公网 IP。 如果你还需要其他需求,可以提交 Issue 给我。
- V008R003C002B0320 这个对应的jdbc链接驱动你在哪里找到的?我也遇到了这个问题。
- WARNING: max_connections should be less than orequal than 10 (restricted by license) HINT: the value of max_connect is set 10 WARNING: max_connections should be less than orequal than 10 (restricted by license) HINT: the value of max_connect is set 10 kingbase: superuser_reserved_connections must be less than max_connections 我按照文档修改了以后,不知道如何重启。
- 然后把数字都改成 1 再启动。 如何重新启动?
- ksql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.KINGBASE.54321"
- 进入容器查看一下日志,是不是启动失败了,日志文件在:/opt/kingbase/logfile
- ksql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.KINGBASE.54321"?
- 先通过 docker exec -it 容器名/id /bin/bash 进入容器,然后在容器中使用 ksql 客户端进行连接数据库:/opt/kingbase/Server/bin/ksql -U system test
- 免费.ml域名10年委托合同到期被马里共和国收回域名经营权
- 从极狐Gitlab看各种中间件技术选型
- 时隔十年首次收到 Google AdSense 的付款
- ga域名被加蓬共和国从Freenom公司手中收回域名经营权
- Freenom 被 Meta(Facebook) 起诉导致暂停 .tk/.ga/.ml/.cf/.gq 等新域名注册
- 生花妙笔信手来 – 基于 Amazon SageMaker 使用 Grounded-SAM 加速电商广告素材生成 [1]
- github.renfei.net 不再完整代理 Github 页面改为代理指定文件
- 优雅的源代码管理(三):本地优雅的使用 Git Rebase 变基
- 优雅的源代码管理(二):Git 的工作原理
- 优雅的源代码管理(一):版本控制系统 VCS(Version Control System)与软件配置管理 SCM(Software Configuration Management)