tailwindcss 究竟比 unocss 快多少?

bg

tailwindcss 究竟比 unocss 快多少?

前言

大家好,我是去年一篇測評 《unocss 究竟比 tailwindcss 快多少?》 的作者 icebreaker

一晃到了 2025 年tailwindcss@4 也正式發布了,現在最新版本是 4.1.13

新版本不僅在功能和性能上大升級,甚至定位也發生了變化: 從一個 PostCSS 插件變成了樣式預處理器

與此同時,unocss 也一直在進步,一路也更新到了 66.5.1,新的 preset-wind4 寫法上也對 tailwindcss@4 做了一定的兼容。

但有一點還是不一樣:它還沒辦法像 tailwindcss@4 一樣,把所有配置都直接寫在 css 里。

開始測試

這次測試,我還是沿用了去年的基準用例,不過加了更多場景。

比如,我在里面加入了等量的 @apply 指令,來模擬真實開發時的情況。這樣一來,不管是 tailwindcss 還是 unocss,都得老老實實去解析 CSS AST,算是“加點負重”。

測試環境保持一致,依舊還是我的老伙計 MacBook M1 Pro (2021)(想換新的 M4 Pro了)

200 次,提取并生成 1656 個工具類,取 75% 分位數(避免極端值干擾)。

測試代碼大家也可以自己跑跑 👉 源代碼。

測試報告

測試結果如下:

2025/9/11 10:01:53
1656 utilities | x200 runs (75% build time)none                                         14.42 ms / delta.      0.00 ms
@tailwindcss/vite        v4.1.13            268.90 ms / delta.    254.48 ms (x1.00)
unocss/vite              v66.5.1            362.08 ms / delta.    347.66 ms (x1.37)
@tailwindcss/postcss     v4.1.13            438.63 ms / delta.    424.21 ms (x1.67)
tailwindcss3             v3.4.17            739.27 ms / delta.    724.85 ms (x2.85)
@unocss/postcss          v66.5.1            912.33 ms / delta.    897.91 ms (x3.53)

分析結果

從數據里可以很直觀地看出幾個結論:

  • 最快的是 tailwindcss@vite,平均 268ms
  • 最慢的是 @unocss/postcss,接近 912ms
  • @tailwindcss/vite vs unocss/vite
    • unocss/vite(362ms)對比 tailwindcss@vite(268ms),大概 慢 1.37 倍
  • postcss 模式的開銷真的很大
    • tailwindcss@postcssvite 版本慢將近一倍(438ms)。
    • @unocss/postcss 更是接近 vitetailwindcss@44倍
  • 老的 tailwindcss@3739ms)基本沒法和新版本比,性能差距太明顯。

因為這個結果,所以這篇文章起了這個標題 tailwindcss 究竟比 unocss 快多少?,正好和去年的反過來了。

為什么會這樣?

個人總結了一些原因:

  1. tailwindcss@4 的技術升級

    • 它的 Token 提取器用 Rust 重寫,效率高很多。(可能這點加了大分)
    • 定位從 PostCSS 插件轉為“預處理器”,內部對 AST 解析和構建做了深度優化。
    • Vite 集成模式下,性能直接拉滿。
  2. unocss 的靈活性代價

    • unocss 勝在靈活和可擴展,但靈活帶來額外性能開銷。
    • 特別是 runtime 動態生成規則、插件抽象這些地方,都會拖慢速度。
    • PostCSS 模式下表現更差。
  3. vite 的加成

    • vite 本身 HMR 和插件體系就很快。
    • tailwindcss@vite 能直接吃到 vite 的緩存和優化紅利。

我們應該選用哪個方案?

從生態的角度考慮

從生態上來說,tailwindcss 基本上是“既成事實的標準”

無論是前端社區里大大小小的 UI 組件庫,還是各種腳手架、模版項目,AI 生成的代碼,大多數都優先支持 tailwindcss。

比如:

  • UI 組件庫:像 shadcn/uidaisyUIflowbite 等,幾乎全是基于 tailwindcss 打造。
  • 框架模版Next.jsNuxtRemixAstro 的官方或社區 starter 里,大多數開箱即配好 tailwindcss
  • 文檔和教程tailwindcss 的學習資料、視頻課程、最佳實踐文章,數量遠超 unocss

換句話說,如果你用 tailwindcss,幾乎可以無縫接入整個生態,不用自己花太多心思去適配。

所以,如果你項目需要穩定的生態支持、豐富的組件庫,首選 tailwindcss 基本沒懸念

從自定義和靈活性的角度考慮

但如果你追求的是極致的靈活性,那 unocss 依舊是很強的選項。

unocss 的特點是:

  1. 規則引擎化:你可以像寫正則一樣,自定義規則來生成工具類。
  2. 預設體系:除了官方的 @unocss/preset-uno,還能疊加 attributifyiconstypography 等預設,甚至自己寫預設。
  3. 任意屬性模式:不僅僅是類名,甚至可以用類似 text="red-500" 這樣的寫法。

這類靈活性,在 tailwindcss 里要么需要寫 plugin,要么使用內聯樣式。而在 unocss 里就是一條正則規則的事情。

而且 unocss 能夠使用 Attributify 模式

<!-- unocss 支持直接在屬性里寫 -->
<div flex="~ col" text="center gray-700" m="y-4"><p>Hello World</p>
</div>

這種寫法比 tailwindcss 的“長串 class”要簡潔很多,特別適合喜歡 HTML 語義化的人。

不過 unocss 的靈活性,導致 unocss-merge 相對難產, https://www.npmjs.com/package/unocss-merge 這個包沒人用,個位數下載量。

不像 tailwind-merge 已經成為各個 tailwindcss 組件庫的標配了。(Weekly Downloads 將近1千200萬次)

所以結論是:

  • tailwindcss = 生態第一,幾乎是“官方標配”。
  • unocss = 靈活度第一,適合“想自己捏規則”的場景。

結語

今天的數據用一句話總結:

  • tailwindcss 的性能全面超越 unocss

所以,如果你追求開發體驗 + 構建速度,那現在毫無疑問是 tailwindcss@4 + vite 最優解。

最后,也再期待一波 unocss 的大更新,再和 tailwindcss 它們之間相互卷起來,未來給我們開發者帶來更多的驚喜!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921909.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法練習——55.跳躍游戲

1.題目描述給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。示例 1&#xff…

Django 項目6:表單與認證系統

目錄 1、form 表單 2、session 保存狀態 3、Admin 后臺 4、Auth 系統 1、form 表單 &#xff08;1&#xff09;創建 form.py 文件&#xff0c;并完善 from django import forms# 定義一個表單類 class Register(forms.Form):user forms.CharField(max_length30, label用…

tvm/triton/tensorrt比較

1.tvm的主線感覺更新太慢&#xff0c;文檔太落后&#xff0c;在自動駕駛領域不支持Blackwell平臺&#xff0c;跨平臺其實吹牛的更多。我覺得自動駕駛用不起來。2.性能最快的還是tensorrt/tensorrt_llm這條路&#xff0c;純cuda路線面臨大量cuda算子開發&#xff0c;比如vllm ll…

Transform 和BERT、GPT 模型

目錄 Transform的由來 Seq2seq 模型 Transform 的內部結構 語言模型 BERT 介紹 BERT 模型的組成 分詞器 位置編碼 Softmax 殘差結構 BERT 模型總結 Transform的由來 傳統的語?模型&#xff0c;?如RNN&#xff08;循環神經?絡&#xff09;&#xff0c;就像?個“短…

2025高教社國賽數學建模A題參考論文35頁(含代碼和模型)

2025國賽數學建模競賽A題完整參考論文 目錄 摘要 1 問題背景與重述 2 問題分析 2.1 問題一分析 2.2 問題二分析 2.3 問題三分析 2.4 問題四分析 2.5 問題五分析 3 符號說明 4 模型假設 5 模型建立與求解 5.1 問題一 煙幕有效遮蔽時長…

【Linux】常用命令匯總

【Linux】常用命令【一】tar命令【1】可用參數【2】常用案例&#xff08;1&#xff09;創建歸檔&#xff08;打包&#xff09;&#xff08;2&#xff09;查看歸檔內容&#xff1a;??&#xff08;3&#xff09;解包歸檔 (提取)&#xff1a;??【二】日志查看命令【1】基礎命令…

軟考系統架構設計師之軟件系統建模

一、軟件系統建模 系統建模流程包括如下&#xff1a; 二、人機交互設計 黃金三法則&#xff1a; 1、置于用戶控制之下以不強迫用戶進入不必要的或不希望的動作的方式來定義交互方式 提供靈活的交互 允許用戶交互可以被中斷和撤銷 當技能級別增加時可以使交互流水化并允許定制交…

Linux系統學習之注意事項及命令基本格式

哈嘍&#xff0c;你好啊&#xff0c;我是雷工&#xff01;你要是翻過歷史文章的話&#xff0c;肯定特別疑惑&#xff1a;這神經病搞得這個號到底是啥定位&#xff0c;究竟是分享啥類型的&#xff0c;咋亂七八糟的啥都有。真是個雜貨鋪啥都有&#xff0c;咋又開始分享Linux系統了…

0基礎Java學習過程記錄——枚舉、注解

一、枚舉1.基本介紹&#xff08;1&#xff09;枚舉對應英文 enumeration&#xff0c;簡寫為 enum&#xff08;2&#xff09;枚舉是一組常量的集合&#xff08;3&#xff09;可以理解為&#xff1a;枚舉屬于一種特殊的類&#xff0c;里面只包含一組有限的特定的對象2.實現方式&a…

高效計算的源泉:深入淺出馮諾依曼模型與操作系統的管理藝術 —— 構建穩定、高效的應用基石 【底層邏輯/性能優化】

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ??????個人…

性能測試-jmeter9-邏輯控制器、定時器壓力并發

課程&#xff1a;B站大學 記錄軟件測試-性能測試學習歷程、掌握前端性能測試、后端性能測試、服務端性能測試的你才是一個專業的軟件測試工程師 性能測試-jmeter邏輯控制器、定時器妙用IF控制器**IF 控制器的作用**循環控制器循環控制器的作用ForEach控制器ForEach 控制器的作用…

T:線段樹入門(無區間更新)

線段樹.線段樹介紹.線段樹框架.理解線段樹.圖式整個過程.線段樹代碼逐層解析.代碼匯總.leetcode練習.線段樹介紹 線段樹(SegmentTree)\;\;\;\;\;\;\;\;線段樹(SegmentTree)線段樹(SegmentTree) is 用于高效處理區間查詢和單點修改的數據結構&#xff0c;和樹狀數組很像&#xf…

【ISP】Charlite工具實操

實習一周了&#xff0c;參與了客觀拍攝和測試&#xff0c;復習一下nv工具 BLACK LEVEL&#xff08;黑電平&#xff09; eg&#xff1a; $ nv_ob 0 in_dir <input directory> out_name <ob file> nv_ob 0 in_dir D:\study\nvraw\ob1 out_name D:\study\nvraw\my_out…

普藍機器人 AutoTrack-IR-DR200 外設配置全指南

為什么外設配置對機器人研究如此重要&#xff1f;在當今機器人技術飛速發展的時代&#xff0c;高校學生研究團隊正成為創新的重要力量。無論是參加機器人競賽、開展畢業設計&#xff0c;還是進行學術研究&#xff0c;正確配置和使用外設設備都是成功的關鍵。尤其學生組裝一個服…

8、Python性能優化與代碼工程化

學習目標&#xff1a;掌握Python程序性能分析和優化的通用方法&#xff0c;建立工程化開發的規范意識&#xff0c;為后續AI項目開發奠定堅實的編程基礎在數據科學和AI開發中&#xff0c;代碼性能往往決定了項目的可行性。一個處理時間從幾小時縮短到幾分鐘的優化&#xff0c;可…

【算法--鏈表】117.填充每個節點的下一個右側節點指針Ⅱ--通俗講解

通俗算法講解推薦閱讀: 【算法–鏈表】83.刪除排序鏈表中的重復元素–通俗講解 【算法–鏈表】刪除排序鏈表中的重復元素 II–通俗講解 【算法–鏈表】86.分割鏈表–通俗講解 【算法】92.翻轉鏈表Ⅱ–通俗講解 【算法–鏈表】109.有序鏈表轉換二叉搜索樹–通俗講解 【算法–鏈…

分詞器(Tokenizer)總結(89)

分詞器(Tokenizer)總結 分詞器(Tokenizer) 分詞器的詞表(vocabulary)長度通常短于模型嵌入層(embedding layer)的長度。 結束標記(EOS token)應僅用于標記文本結尾,不可用于其他用途。 填充標記(PAD token)通常未預先定義,但你仍可能需要用到它: 對于生成式模型…

19 webUI應用中 Controlnet精講(05)-圖像修復與編輯

前面的篇章已經詳細講解了線條約束、三維關系與空間深度、人體姿態等幾類controlnet的功能與應用&#xff0c;本節內容將對通過controlnet對圖像修復與編輯進行講解。 通過controlnet也可以對圖片進行編輯、重繪及放大等操作&#xff0c;具體包括Recolor、Inpaint、Tile等&…

消息推送的三種常見方式:輪詢、SSE、WebSocket

摘要&#xff1a;本文介紹消息推送的三種常見方式&#xff1a;輪詢&#xff08;定時請求&#xff0c;易增負擔&#xff09;與長輪詢&#xff08;阻塞請求至有數據 / 超時&#xff0c;減少請求&#xff09;、SSE&#xff08;HTTP 單向實時傳輸&#xff0c;純文本、自動重連&…

論文閱讀:ACL 2024 Stealthy Attack on Large Language Model based Recommendation

總目錄 大模型相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2402.14836 https://www.doubao.com/chat/19815566713551106 文章目錄速覽攻擊方法速覽一、攻擊核心目標與前提1. 核心目標2. 攻擊前提二、模型無關的簡單…