Танзимоти плагини W3 Total Cache Minify: Чӣ тавр намуди ҷойгиркуниро интихоб кардан мумкин аст? Таҷрибаи ман оид ба ҳалли мушкилот ва маслиҳатҳои наҷотбахш

W3 Total Cache Minify 嵌入类型不会选?分享站长实测踩坑经历,手把手教你精准选型 Minify 嵌入类型,规避网站样式错乱、加载崩溃风险,附零基础可直接套用的保命设置方案,WordPress 提速不翻车!

我之前给一个网站做优化,打开 W3 Total Cache 的 Minify 设置一看,直接傻眼了。那个嵌入类型的下拉菜单里摆着四个选项:默认(阻止)、使用JS进行非阻塞、使用“异步”进行非阻塞、使用“延迟”进行无阻塞。

我寻思了一下,这都啥跟啥啊?

相信我,你不是一个人。这四个选项别说是新手了,就算你用 WordPress 用了几年,第一次看到这个界面大概率也会懵。这篇文章就是把我踩过的坑、总结出的经验,直接端到面前。你不需要再去翻文档,直接按着我说的做就行。

这四种嵌入类型到底是啥?

Танзимоти плагини W3 Total Cache Minify: Чӣ тавр намуди ҷойгиркуниро интихоб кардан мумкин аст? Таҷрибаи ман оид ба ҳалли мушкилот ва маслиҳатҳои наҷотбахш

先讲讲这四个选项都是什么德性。

默认(阻止),英文叫 Default blocking。这是最老实的做法,浏览器遇到脚本就停下来,先把脚本下载完、执行完,再继续往下渲染页面。听起来挺靠谱对吧?但代价就是你的首屏加载会被堵住,用户打开页面得等着脚本跑完才能看到东西。

使用JS进行非阻塞,这个比较有意思。它不是直接在页面上写 script 标签,而是先输出一个小脚本,等页面先跑起来之后,再通过 JavaScript 动态把那些要加载的脚本注入到页面里。这样页面可以先渲染出来,脚本再慢慢加载。听起来挺美好对吧?但问题在于,这个动态注入的过程可能会打乱脚本原来的执行顺序,如果你页面里有些脚本很依赖执行顺序,可能就会出问题。

使用“异步”进行非阻塞,这个就是在 script 标签上加个 async 属性。脚本会在后台异步下载,下载完就立刻执行,页面不会等着它。但缺点是执行顺序完全不受控制,谁先下载完谁先执行,根本不管你在代码里写的顺序。

使用“延迟”进行无阻塞,这个就是加 defer 属性。脚本会等到页面整个解析完之后再执行,而且关键是,它会保持你原来写的顺序。这就比较人性化了,既不堵首屏,又不乱顺序。

到底该选哪个?

说白了,这四个选项就是在做一道选择题:你要速度,还是要顺序。

我的建议是这样的:

如果你网站规模不大,脚本不多,而且你对加载速度没有那么极端的要求,直接用默认(阻止)最省心。虽然慢一点,但不会出乱子。

如果你想提升首屏速度,而且你的脚本之间没有那种“A必须在B之前执行”的强依赖关系,优先选使用“延迟”进行无阻塞(defer)。这几乎是目前最理想的方案,既不堵渲染,又能保顺序。

如果你试了 defer 之后发现某些功能还是有问题,再考虑使用JS进行非阻塞。这个方案更激进一些,但兼容性也稍微差一点。

使用“异步”进行非阻塞(async)是我最不推荐的一个。因为执行顺序完全乱套,除非你非常确定你的脚本都是独立运行的,否则很容易翻车。

我踩过的两个大坑

光说不练假把式。我把自己踩过的两个坑写下来,你对照着看能不能避过去。

第一个坑:WordPress 主题自定义无法实时预览

有一阵子在自定义主题的时候,点击保存之后,预览界面愣是不刷新。改了点东西,刷新页面一看,还是老样子。

后来研究半天,发现是 Minify 的压缩功能在作妖。解决方案很简单:

进入 W3 Total Cache 插件的常规设置,找到“压缩”那个选项,把勾取消掉。然后在右上角点击“保存设置”下面那个小箭头,选“保存设置和清除缓存”。这一步很关键,不清缓存的话你看到的还是旧版本。

弄完之后再进主题自定义,实时预览就恢复正常了。

第二个坑:Astra 主题搜索框点击无反应

这个坑我踩得比较久。用的是 Astra 主题,某天突然发现搜索框怎么点都没反应。一开始还以为是主题本身的问题,结果后来发现是 W3TC 的 Minify 设置搞的鬼。

解决方法如下:

进入 W3 Total Cache → 常规设置 → 压缩高级设置 → JS → 缩小引擎设置 → 区域设置,把嵌入类型改成这两个之一:

  1. 在 之前,使用JS进行非阻塞
  2. After,使用JS进行非阻塞

同样,清除缓存,刷新页面,搜索框就能正常工作了。

至于为什么是这两个选项而不是其他的,我也查过一些资料,简单来说就是 Astra 主题的前端组件对脚本的执行时机比较敏感,某些非阻塞方式会导致事件绑定失败。用“使用JS进行非阻塞”这个模式,可以保证脚本在页面加载完成之后再执行,同时又不会像 async 那样乱顺序。

落地清单

最后给你一个可以直接照着做的清单:

第一步,先明确你的目标。是要首屏加载最快,还是求稳不出错?这决定了你要用哪种嵌入类型。

第二步,不要一次性全部改掉。先找一个不重要的页面测试,观察个一两天,确认没问题再全站推广。

第三步,每次修改之后一定要清除缓存。W3TC 的缓存机制会让你看到的不是最新改动,所以“清缓存再测试”这一步绝对不能省。

第四步,用浏览器的开发者工具或者 PageSpeed Insights 之类的工具,对比一下前后的加载速度。数据说话,别凭感觉。

Дар охири нависед

说实话,我第一次看到这个嵌入类型设置的时候,也是在那愣了半天。默认阻塞感觉太慢,异步又不保证顺序 defer 又怕兼容性问题,选哪个都感觉心里没底。

但后来想明白了,这就是个权衡的东西。你不可能既要最快又要最稳,总得牺牲一头。我的经验就是,先用 defer,这是目前最稳妥的非阻塞方案,出了问题再往回调。

如果你也遇到了类似的问题,或者按着我的方法弄完之后还有别的情况,欢迎来聊。网站这事儿就是这样踩坑踩过来的,谁也不例外。

谢谢你看我的文章,我们,下次再见。

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) 分享的《W3 Total Cache Minify插件设置:嵌入类型怎么选?我的踩坑经历与保命建议》,对您有帮助。

Хуш омадед ба мубодилаи истиноди ин мақола:https://www.chenweiliang.com/cwl-34003.html

Барои кушодани ҳилаҳои пинҳонии бештар🔑, хуш омадед ба канали мо дар Telegram ҳамроҳ шавед!

Поделиться ва лайк, агар ба шумо писанд омад! Саҳмияҳо ва лайкҳои шумо ангезаи доимии мо мебошанд!

 

发表 评论

Суроғаи почтаи электронии шумо нашр намешавад. 必填 项 已 用 * Нишон

Акс аз бойгонӣ