Оптимизация производительности 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. Вот и все.
Это немного расплывчатое завершение, но я надеюсь на дальнейшее сотрудничество.
Кстати, я проснулся около часа ночи и, находясь в расслабленном состоянии, начал возиться, и вот что получилось. Так называемое "пушистое время". Дайте мне также "мягкое время".