主题体积和加载速度之间的关系经常被忽略。商业主题为了适应各种行业的场景,通常会集成十几个演示模块、页面构建器和全套图标字体,但是实际使用的只有不到三分之一,其他的代码仍然会被解析以及发起网络请求。

第一步就是盘点资源。浏览器开发者工具中的网络面板会列出所有的CSS和JS文件,按照大小和耗时进行排序,标出没有参与渲染的部分。查看主题加载函数,确定哪些样式表和脚本是全局注册的,而不是按需加载的,这些资源最容易减少。
按需加载就是最直接的好处。联系表单插件只在联系页中使用,滑块脚本只在首页有轮播的时候才会被加载,通过条件判断在对应的模板中入队,其他页面则不加载。如果图标字体只使用几个符号的话,那么就可以把内联矢量图形代替掉,这样可以省去几百千字节的字体文件和额外的请求。
合并和延迟处理要慎重。合并可以减少请求数量,但是缓存粒度变粗了,任何一个文件的修改都会使整个包失效;脚本延迟执行会打乱依赖关系,造成交互失败。应该先进行减法操作,确认效果之后再进行合并。
废弃的功能也计入体积。文章中的脚本、表情符号资源、旧版兼容库在新主题里一般是没有用的,可以通过过滤钩子来取消。没有使用的自定义文章类型和短代码如果已经确定没有历史内容依赖的话,一起删除。
直接修改父主题的话,在更新的时候就会被覆盖掉。正确的做法是建立子主题,把更改写入到子主题的加载逻辑中,必要时以插件的形式来登记自定义代码。清理之后测量首字节时间、资源数量以及渲染阻塞时长,和清理之前逐项对比,确定每个改动都有效果,防止为了优化而优化。