对 Lume 进行性能调优
大家好,我是无能。
服务器端的缓存等设置仍然是以前WordPress的配置,所以我将再次进行更改。
Nginx
在执行反向代理的 Nginx 端,所有必要的內容都已缓存。
如果在到达后端 Apache 之前进行缓存,可以将其视为自建 CDN 服务器。
更改
if ($request_uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2|svg|pdf|zip|eot|ttf|xml|json|txt|html)(\?.*)?$") {
set $do_not_cache 0;
}
之前没有缓存 HTML,但既然使用了“静态网站”生成器,我就把它添加进去了。
另外,在静态网站中,是否有必要加入是否缓存的分支呢?
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|sitemap(_index)?.xml") {
set $skip_cache 1;
set $skip_reason URI;
}
这里特意保留了代码。一方面是为了随时可以回到 WordPress,另一方面也是因为不想缓存 sitemap 等内容,所以设置了不缓存。
Nginx 端大概就是这些了。
以前我把文章放在 /blog 下,所以一直对 /blog 有单独的缓存设置。但考虑到是否有必要特意分开,所以决定不再分开。
Lume
我查看了 Lume 的插件,把所有能缩小代码的插件都装上了。 Plugins
Terser
Terser
从 Terser 网站内部查看 Terser 的文档。
就是 API Reference Minify options structure
这一部分。
我一边向 AI 提问,一边只修改了必要的部分。
能加上注释让代码更清晰,真是太好了。
$ cat _config.ts
import lume from "lume/mod.ts";
import blog from "blog/mod.ts";
import plugins from "./plugins.ts";
import nunjucks from "lume/plugins/nunjucks.ts";
import basePath from "lume/plugins/base_path.ts";
import terser from "lume/plugins/terser.ts";
import minifyHTML from "lume/plugins/minify_html.ts";
import lightningCss from "lume/plugins/lightningcss.ts";
const site = lume({
src: "./src",
location: new URL("https://soulminingrig.com"),
});
site.use(basePath());
site.use(plugins());
site.use(nunjucks());
// ファイル圧縮
site.use(terser({
options: {
compress: {
drop_console: true,
passes: 5, // パスを増やしてさらに圧縮を試みる
unsafe: true,
pure_getters: true, // ゲッターを純粋な関数として扱う
unsafe_arrows: true, // アロー関数の最適化
unsafe_comps: true, // 比較の最適化
unsafe_Function: true, // Functionコンストラクタの最適化
unsafe_math: true, // 数学的な最適化
unsafe_methods: true, // メソッド呼び出しの最適化
unsafe_proto: true, // __proto__の最適化
unsafe_regexp: true, // 正規表現の最適化
conditionals: true, // 条件文の最適化
dead_code: true, // デッドコードの除去
evaluate: true, // 定数式の評価
booleans: true, // ブール演算の最適化
loops: true, // ループの最適化
unused: true, // 未使用のコードの削除
hoist_funs: true, // 関数宣言の巻き上げ
keep_fargs: false, // 未使用の関数引数を削除
hoist_vars: true, // 変数宣言の巻き上げ
if_return: true, // if-returnの最適化
inline: true, // インライン化
join_vars: true, // 変数宣言の結合
side_effects: true, // 副作用のある式の削除
warnings: false, // 警告を無効化
},
mangle: {
properties: {
reserved: ['$', '_'],
regex: /^_/, // アンダースコアで始まるプロパティを保護
},
toplevel: true, // トップレベルの変数名も難読化
},
format: {
comments: false,
beautify: false,
ascii_only: true, // ASCII文字のみを使用
wrap_iife: true, // IIFEをラップ
},
sourceMap: false, // ソースマップを完全に無効化
ecma: 2023,
enclose: false,
keep_classnames: false,
keep_fnames: false,
ie8: false,
module: false,
nameCache: null,
safari10: false,
toplevel: true,
},
}));
我修改了必要的部分,并删除了在我的环境中添加后无法正常工作的部分。
说实话,设置的便捷性确实让我很感动。JS 这样应该可以了吧。
### Lightning CSS
Lightning CSS
import lightningCss from "lume/plugins/lightningcss.ts";
~
site.use(lightningCss({
extensions: [".css"],
include: /.+\.css$/,
options: {
minify: true,
sourceMap: false,
drafts: {
nesting: true,
customMedia: true,
},
nonStandard: {
deepSelectorCombinator: true, // 深いセレクタ結合子を有効化(必要な場合)
},
targets: {
android: 98,
chrome: 98,
edge: 98,
firefox: 97,
ios_saf: 15,
safari: 15,
opera: 83,
samsung: 16,
},
browserslist: null,
},
}));
~~~
说实话,我对此不太感兴趣,所以没什么特别要说的。
我觉得默认设置就足够了,甚至不需要任何选项。
Minify HTML
Minify HTML 说实话,前面已经进行了一定程度的优化,所以这只是作为一种“玩玩看”的心态,觉得还有这种东西。
import minifyHTML from "lume/plugins/minify_html.ts";
~~~
site.use(minifyHTML());
构建后的 HTML 文件是这样的。
对于直接接触 HTML 文件的人来说,这可能会引起反感,但实际上我只接触构建前的 .md 文件或通过 LumeCMS 浏览器操作,所以不太在意。
结果
如果不加载 Google 相关内容,速度很快。
说实话,最终还是归结到如何处理外部加载的问题上。
嗯……实际上,我的目的是尽量减少手动操作以加快速度,所以不打算再深入探究了。虽然不完全满意,但大概就是盯着 Network 面板再调整一下吧。就到这里。
虽然结束得有点模糊,但下次再见。
顺便说一句,大约凌晨 1 点醒来,心情迷迷糊糊地捣鼓了一下,就变成了这样。这就是所谓的“迷糊时间”。也请给我“毛茸茸时间”吧。