Hyvä的原理是什么? 重写了哪些内容? 为什么会让前台性能起飞?

这是个很专业、问到本质的问题。我不讲营销话术,直接从 Magento 底层机制 + 前端执行模型 给你拆清楚:


一句话先给“底层结论”

Hyvä 并不是“魔法加速器”,而是:
把 Magento 前台里「最拖慢性能的那一整套东西」彻底拿掉,只保留真正必要的渲染与交互。

性能起飞不是“优化”,而是 架构级减负


一、Magento 原生前台(Luma)的性能瓶颈在哪里?

先理解 Hyvä 为什么快,必须先知道 Luma 为什么慢

1️⃣ Luma 的真实技术栈(问题根源)

Magento 2 默认前台(Luma)依赖:

  • RequireJS(模块加载器)
  • Knockout.js(MVVM)
  • jQuery
  • UI Components(JS 驱动)
  • 巨量 x-magento-init
  • 多层 mixins
  • 动态 JS 渲染 DOM

👉 这套东西在 2016 年是先进的,但现在是:

JS-heavy + Client-side render + 强依赖执行顺序


2️⃣ Luma 的“慢”不是单点,而是叠加效应

页面加载时真实发生的事:

  1. 浏览器下载 HTML(不完整)
  2. 加载 require.js
  3. require.js 解析几十上百个 JS 依赖
  4. Knockout 初始化 bindings
  5. JS 再生成 DOM / 更新 DOM
  6. CSS 阻塞渲染
  7. JS 执行时间很长(TTI 高)

👉 Lighthouse 里你看到的:

  • JS execution time 高
  • Main thread blocked
  • TTI 很晚

不是“某个 JS 慢”,而是整套模型慢。


二、Hyvä 的原理是什么?(核心)

核心原则一句话:

“能用 HTML + CSS 解决的,绝不用 JS;
能在服务端渲染的,绝不放到浏览器。”


三、Hyvä 重写了什么?(重点)

1️⃣ 前端框架:彻底移除 RequireJS / Knockout

Hyvä 做的第一件事就是:

❌ 不用 RequireJS
❌ 不用 Knockout
❌ 不用 jQuery

改用:

✅ 原生 Magento PHP 模板渲染(.phtml)
✅ Alpine.js(极轻量)做交互
✅ 原生浏览器能力(事件 / CSS / HTML)

👉 Alpine.js 本质是:

  • “HTML 增强器”
  • 几 KB
  • 不做复杂状态管理

2️⃣ UI Component → HTML + PHP

在 Luma 里,很多东西是 JS UI Component:

  • minicart
  • messages
  • toggles
  • tabs
  • dropdown
  • validation

Hyvä 的做法是:

  • 90% 直接用 PHP 输出完整 HTML
  • JS 只做:
    • show / hide
    • toggle
    • fetch(必要时)

👉 DOM 一次生成完成,不等 JS。


3️⃣ CSS:Tailwind,解决“CSS 体积 & 阻塞”

Luma 的 CSS 问题:

  • 巨大的 LESS
  • 很多无用样式
  • 阻塞渲染

Hyvä:

  • 用 Tailwind
  • 按需生成 CSS
  • 几乎没有“没用的 CSS”

👉 CSS 文件体积骤减,首屏渲染更早开始


4️⃣ JS 执行模型完全不同(关键)

Luma:

  • JS = 页面结构的一部分
  • 页面“靠 JS 活着”

Hyvä:

  • JS = 装饰层(enhancement)
  • 页面“没有 JS 也能用”

这就是性能差距的本质。


四、为什么 Hyvä 会让前台性能“起飞”?

不是一个原因,是 5 个效应叠加


🚀 原因 1:JS 体积直接砍掉 70%–90%

  • 不加载 require.js
  • 不加载 Knockout
  • 不加载大量 UI JS

👉 JS 下载 + 解析 + 执行 全部下降。


🚀 原因 2:首屏 HTML 是“完整的”

  • Luma:HTML 是骨架
  • Hyvä:HTML 是最终形态

👉 浏览器一拿到 HTML 就能画页面
👉 TTFB → FCP → LCP 连续完成


🚀 原因 3:主线程几乎不被 JS 阻塞

  • Alpine.js 的 JS 执行时间极短
  • 不存在复杂依赖树

👉 Lighthouse 的 “Main thread work” 会明显下降。


🚀 原因 4:CSS 更轻、更快生效

  • 少量、精准 CSS
  • 不等 JS 初始化

👉 FCP/LCP 明显提前。


🚀 原因 5:浏览器原生能力被充分利用

Hyvä 倾向用:

  • CSS hover / focus
  • <details>/<summary>
  • 原生表单校验
  • IntersectionObserver(少量)

👉 减少 JS = 减少性能风险。


五、Hyvä 到底“重写了哪些东西”?(实话)

Hyvä 重写的是:

  • 前台主题(templates / layout / CSS / JS)
  • 前台交互模式
  • 前台 JS 架构

Hyvä 没有重写的是:

  • Magento 后端
  • Catalog / Price / Promotion 逻辑
  • Checkout(核心流程)
  • API / GraphQL
  • Admin

👉 所以:

  • 后端稳定
  • 迁移成本可控
  • 不是推倒重来

六、为什么 Hyvä 不会“慢慢变回 Luma 那样”?

因为它结构性避免了 JS 膨胀

  • 没有 UI Component 机制
  • 没有 requirejs 依赖地狱
  • 不鼓励 JS 驱动 DOM

👉 除非你自己硬往里塞重 JS,否则不会退化。


七、现实项目里的性能差距(常见)

在真实 Magento 项目中常见结果是:

指标 Luma Hyvä
JS 体积 600KB–1MB+ 50–150KB
FCP 2.5–4s <1.5s
LCP 3–6s <2s
TTI 5–10s <3s
Lighthouse Performance 30–60 80–95

八、给你一句“架构级总结”

Hyvä 快,不是因为“优化得好”,
而是因为它把 Magento 前台最慢的那一整套架构换掉了。


如果你愿意,下一步我可以:

  • 🧩 对比 你当前前台 vs Hyvä 的“真实改动成本”
  • 🧩 告诉你 哪些第三方模块在 Hyvä 下最容易/最难适配
  • 🧩 给你一个 Hyvä 是否适合你这个项目的判断清单

你只要说一句:
👉「帮我评估是否适合 Hyvä」。

https://demo.hyva.io/

eaa5b95ef90ed47f2c0fe7e603db1e7f.png

发表回复