工程開發
liquid-il avatar

liquid-il

一個高效能 Liquid 模板引擎,透過中間語言 (IL) 將模板編譯為最佳化的 Ruby 和機器碼。

簡介

LiquidIL 是一款針對 Shopify Liquid 生態系統開發的高效能模板引擎,專注於執行速度與降低運行負擔。透過 Lexer(詞法分析器)、Parser(語法分析器)、IL(中間語言)、Optimizer(最佳化器)以及 Structured Compiler(結構化編譯器)組成的多階段管道,LiquidIL 成功消除了傳統解譯器的執行迴圈。它不進行動態的抽象語法樹 (AST) 遍歷,而是產生利用 YJIT 的原生 Ruby 程式碼,從而直接執行機器碼,徹底消除了虛擬機分配的瓶頸。這款工具專為在 Ruby 環境中需要高輸送量模板渲染、且對延遲與記憶體分配極為敏感的開發者所設計。

  • 內建多階段最佳化管道,在編譯時執行常數摺疊 (constant folding)、死碼消除 (dead code elimination) 及部分內聯 (partial inlining)。

  • 直接編譯為原生 Ruby,避免了標準過濾器對 method_missing 的依賴,實現直接調用 Ruby 方法。

  • 提供進階快取機制,支援 RubyVM 指令序列 (ISeq) 二進位檔,可實現編譯後模板的快速序列化與還原。

  • 支援多種執行模型,包括一次性渲染、預解析模板重複使用,以及產生獨立的 Ruby 模組。

  • 內建環境感知渲染支援,具備部分模板 (partial templates) 的檔案系統整合與嚴格錯誤處理模式。

  • 可使用 CLI 工具進行模板檢查、視覺化 IL 以及產生 Ruby 程式碼,以便進行效能分析與除錯。

  • 引擎接收字串模板作為輸入,並使用類似 Hash 的物件進行變數範疇管理,保持與標準 Liquid 變數存取模式的相容性。

  • 為了追求極致效能,建議使用 ISeq 二進位快取來儲存編譯後的模板,以跳過生產環境啟動時的解析步驟。

  • 輸出通常為字串或緩衝區,輸入則由原始模板與上下文變數字典組成。

  • 請注意,ISeq 二進位檔與特定的平台及 Ruby 版本綁定,部署環境需與編譯環境匹配以確保最佳相容性。

倉庫統計

Star 數
17
Fork 數
4
Open Issue 數
3
主要語言
Ruby
預設分支
main
同步狀態
閒置
最近同步時間
2026年5月4日 上午01:09
在 GitHub 查看