近期博客访问越来越慢,有时候网络不好的时候打开一个页面需要5秒以上,所以我决定对博客来一次彻底的优化;然后本文记录了优化的过程及步骤
1. 优化了代码结构
每个页面的独有js放页面的最后,让页面加载的时候最后加载js
删除zblog中的冗余代码及不用的模块
更新了页面的样式(这个就算UI优化了)
删除了某些插件
2. 静态资源的优化
压缩js,css代码(此操作对静态资源的加载耗时提升很大)
比如jquery引入国内新浪的资源镜像(之前引入的是本地的,但是服务器在国外所以国内访问巨慢)
https://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.j
对于其他的静态资源,我们可以放在七牛上,速度也会快很多
写了个python脚本压缩了所有文章的已上传的图片,这里吐槽下zblog,上传图片都不压缩,直接放原图,有时候一张图片500多k,需要加载超过1秒的时间,所以我们需要压缩图片,压缩脚本如下 github
import tinify import os # https://tinypng.com/dashboard/api key从这里获取,每月500次调用次数 tinify.key = 'you key ' fileArray = [] # 递归深度遍历文件 def traverse(f): fs = os.listdir(f) for f1 in fs: tmp_path = os.path.join(f, f1) if not os.path.isdir(tmp_path): if is_img(tmp_path): fileArray.append(tmp_path) else: traverse(tmp_path) # 根据路径判断文件是不是img def is_img(path): path = path.split('.')[-1].upper() return True if (path == 'PNG') | (path == 'JPG') | (path=='JPEG') else False traverse('你想压缩的根目录') for imgpath in fileArray: print("compressing ..." + imgpath) tinify.from_file(imgpath).to_file(imgpath)
这里我们使用了tinypng这个网站提供的api进行压缩的,效果很不错
做到这里的时候,博客的速度已经提高了很多,页面完全加载时间在3秒左右
3. 系统环境的优化
升级了php版本,从php7.1升级到7.3
开启了opcache,配置如下,此配置对php7性能提升明显,php.ini配置如下
[opcache] ; 启动操作码缓存 opcache.enable=1 ; 针对支持CLI版本PHP启动操作码缓存 一般被用来测试和调试 opcache.enable_cli=1 ; 共享内存大小,单位为MB opcache.memory_consumption=128 ; 存储临时字符串缓存大小,单位为MB,PHP5.3.0以前会忽略此项配置 opcache.interned_strings_buffer=8 ; 缓存文件数最大限制,命中率不到100%,可以试着提高这个值 opcache.max_accelerated_files=4000 ; 一定时间内检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 单位为秒 opcache.revalidate_freq=60 ; 开启快速停止续发事件,依赖于Zend引擎的内存管理模块,一次释放全部请求变量的内存,而不是依次释放内存块 opcache.fast_shutdown=1 ;启用检查 PHP 脚本存在性和可读性的功能,无论文件是否已经被缓存,都会检查操作码缓存,可以提升性能。 但是如果禁用了 opcache.validate_timestamps选项, 可能存在返回过时数据的风险。 opcache.enable_file_override=1 ; 拓展库so文件关联加载 /www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/opcache.so/www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/opcache.so
开启了Opcache file cache,php.ini配置文件如下(保证/tmp文件存在且有权限写入)
通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升
opcache.file_cache=/tmp
其实这里的瓶颈主要在网络上,因为我的服务器在美国,所以在中国访问肯定会慢一些,我们只能去减少整个页面的资源大小来实现优化,相应的数据库优化等就不再进行,因为即使优化了提升也不会太明显