根據Ruby核心開發者Aaron Patterson於技術部落格發布的說明,Ruby 3.5已導入物件配置效能最佳化,並於實測較前一版本提升達6.5倍。此效能改進將有助Ruby應用於高流量Web服務、API與後端系統等場景。

物件配置是Ruby執行環境中頻繁且基礎的作業之一,無論是新建資料模型、執行運算邏輯,或框架底層運作,都需大量使用。Aaron Patterson指出,這次效能提升的關鍵在於Class#new方法的實作機制調整。Class#new原為Ruby類別實體建立的進入點,其典型流程為先分配記憶體產生物件,再傳遞所有建置參數進行初始化。過去因Ruby與C語言堆疊之間的呼叫慣例轉換、參數複製,以及內聯(Inline)快取機制的限制,使得效能受影響。

Ruby 3.5此次針對Class#new機制進行內聯最佳化。新版本於YARV虛擬機層新增opt_new指令,讓編譯器在遇到new呼叫時,直接於呼叫端展開Class#new的實作內容,而非僅作為方法呼叫。如此可省略原有Class#new產生的堆疊框架,並減少重複參數複製。

而且此設計也有助提升內聯快取的命中率,使每個new呼叫都能直接快取初始化對應的類別。經由這系列底層最佳化,物件配置過程更加精簡,執行效能同步提升。

實測顯示,Ruby 3.5在不同初始化參數設定均有效能提升。以位置參數為例,在未啟用JIT編譯器時,Ruby 3.5物件配置速度約為Ruby 3.4.2的1.8倍,當啟用YJIT則提升至2.3倍。採用關鍵字參數進行初始化時,隨著參數數量增加,效能提升更為明顯,在建置方法接受三個關鍵字參數並啟用YJIT時,Ruby 3.5的物件配置速度較前一版本提升超過6.5倍,對於大量產生物件的應用情境,特別是在現代Web服務或API設計中,效能提升幅度明顯。

整體而言,Ruby 3.5針對物件配置所做的底層架構調整,不僅帶來即時效能改善,也讓Ruby在伺服器端程式語言領域更具競爭力。隨YJIT與語言本體效能提升,Ruby 3.5有助開發團隊因應大規模應用與即時運算等挑戰。

熱門新聞

Advertisement