最近推出的 Nokolexbor ,一個基於 Ruby 的高效能 HTML5 解析器,雖然相比 Nokogiri 承諾帶來顯著的效能提升,但也在現代網路開發工具中引發了關於效能和安全平衡的重要討論。
安全與效能的權衡
儘管 Nokolexbor 展示了令人印象深刻的效能指標,相比 Nokogiri 在 CSS 選擇器處理方面快達997倍,但開發者社群對其安全維護實踐提出了重大擔憂。核心問題在於 Nokolexbor 使用了2023年4月釋出的內建 libxml 2.11 來支援 XPath,這種依賴管理方式引起了注重安全的開發者的審視,特別是考慮到 libxml 經常出現安全漏洞的歷史。
幾乎每兩個 libxml 版本就會出現一個 CVE,所以我很好奇是否有計劃更新 libxml 版本,因為它沒有使用系統的 libxml(與 Nokogiri 相同)。
與 Nokogiri 的效能對比:
- HTML解析:快5.22倍(487.6比93.5次迭代/秒)
- CSS選擇器:最高快997.87倍(50798.8比50.9次迭代/秒)
- 混合操作:快142.11倍(7437.6比52.3次迭代/秒)
開發活動的擔憂
該專案的維護狀態也成為討論的焦點,社群成員注意到該專案已超過七個月沒有更新。雖然一些開發者認為 HTML5 解析需求在這段時間內沒有顯著變化,但維護過時依賴項的安全隱患仍然是一個緊迫的問題。特別是與 Nokogiri 的方法相比,後者為其 libxml 實現維護著嚴格的安全更新計劃。
支援的平臺:
- Linux :x86_64 架構(glibc 版本 >= 2.17)
- macOS :x86_64 和 arm64 架構
- Windows : ucr64 、 mingw32 和 mingw64
替代方案
社群討論突出了生態系統中的幾個替代方案,包括使用 Cloudflare 的 lol_html 解析器的基於 Rust 的解決方案 Selma,以及同樣利用 Lexbor 功能的 Python 實現 selectolax。這些替代方案表明,在不同程式語言中,高效能 HTML 解析解決方案的生態系統正在不斷發展,每種方案都有自己平衡效能和安全考慮的方式。
這種情況突顯了軟體開發生態系統中的一個更廣泛的挑戰:需要在尖端效能改進和可持續的安全實踐之間取得平衡。隨著開發工具的不斷發展,社群對 Nokolexbor 的反應提醒我們,僅有速度並不足以確保在生產環境中得到廣泛採用。