告別框架臃腫:Still.js 用原生 JavaScript 讓老舊系統無痛煥新
開發者Nakassony Bernardo遇到了企業界普遍存在的難題:如何現代化改造遺留Web應用。許多老舊的Web界面沒有使用JavaScript框架,缺乏現代開發者習以為常的功能。
"遷移這些遺留應用非常困難,因為它們確實解決了當時的問題,甚至現在仍能部分滿足需求,"Bernardo說,"你不能簡單地說'我要拋棄舊系統改用新框架',這行不通,因為既要破壞現有系統,又得從頭重建一切。"
更新遺留應用的挑戰
使用TypeScript會進一步復雜化,因為它需要轉譯為JavaScript。
"這時事情就變得特別棘手,尤其是處理遺留系統時,"他表示,"現代化這些應用要求你不能使用新的JavaScript方案,意味著必須堅持純JavaScript。但你又需要引入狀態管理等現代工具提供的功能。"
例如他遇到一個2003年的應用,至今仍在解決組織需求。因此公司希望在保留核心功能的前提下添加新特性。
Bernardo在原生JavaScript中找到了解決方案,并據此創建了開源框架Still.js(「編者注:Still.js也曾是一個基于React的靜態站點生成器名稱,現已歸檔」)。該框架讓他無需重寫代碼就能獲得類似React、Angular或Vue.js的功能。雖然才誕生一年,但已提供類似流行框架的模塊化組件架構。
"它采用輕量級但強大的應用結構方式,在保持可維護性和擴展性的同時避免引入復雜抽象層,"Bernardo在Medium文章中寫道,"使用Still.js既能獲得原生JavaScript的靈活性,又能享受高效有序的開發流程。"
Still.js的應用場景
該框架還有其他用途,比如現代化改造舊的React或Angular應用,同樣無需改動遺留代碼。
雖然React、Angular和Vue.js難以混用,但它們都能與Still.js集成。Bernardo解釋這是因為Still.js直接利用瀏覽器原生能力,避免了混合主流框架時常見的工具沖突。
"React和Angular需要整合底層工具才能協同工作,但Still.js不需要任何工具鏈,它就是原生JavaScript。"他還補充說可以與其他技術棧結合,包括使用Java、經典ASP甚至PHP的應用。
架構與技術細節
根據官方文檔,Still.js采用獨特的"服務(Service)、控制器(Controller)、視圖(View)"架構,因其"處理組件的方式非常直接,沒有打包/構建過程"。
SCV架構示意圖
- 服務層處理數據事務(如HTTP請求)
- 控制器實現視圖行為與DOM操作
- 視圖層負責用戶界面展示
Bernardo向The New Stack透露,該框架基于面向對象原則,提供本地和全局狀態管理。與React的虛擬DOM不同,Still.js避免這類人工抽象層。
"添加過多抽象層終將影響性能,"他說,"我不是說React沒解決性能問題,而是質疑響應式UI更新是否真需要這么復雜?既然不需要,我們就應該避免這類實現。"
其他獨特之處
主流框架通常需要構建/編譯過程(特別是TypeScript轉譯),但Still.js采用運行時渲染:"組件被訪問時才啟動渲染流程"。框架使用正則表達式解析模板,其中80%是原生JavaScript,配合少量HTML特殊指令,由解釋器轉換為瀏覽器可理解的內容。
"Still.js模板中80%是原生JavaScript。"
—— Still.js創始人Nakassony Bernardo
Bernardo強調框架無需預處理,也不依賴WebPack或Vite等打包工具,非常適合"希望直接使用原生Web技術,同時獲得現代框架功能的團隊"。它天然適合企業級復雜應用,原生支持:
- 模塊化開發
- 用戶權限管理
- 組件路由
- 表單驗證
- 微前端架構(如前端嵌入與交互)
在另一篇Medium文章和YouTube教程中,他詳細介紹了如何用Still.js創建React微前端。
供應商組件與創新特性
除了基于組件的UI和HTML模板,Still.js還提供:
- 內置指令系統
- 權限控制流
- 路由間大數據傳輸(相比React需要依賴Redux的方案)
- 獨特的"供應商組件"機制:開發者可擴展非核心功能并共享復用
更創新的是利用JSDoc注釋實現運行時動態特性(非文檔用途),同時支持TypeScript的大部分類型功能(通常可選,特定場景強制)。
Bernardo坦言雖然已能構建復雜系統,但這個年輕框架仍有改進空間,團隊歡迎各方貢獻。"這是個非常成熟但年輕的框架,我們始終保持開放態度。"


























