偶然發現windterm的性能表現,自審思一翻,認為WoTerm也可以實現同等性能表現,於是經過努力,終於把終端性能優化到領先。無論是內存佔用及解析速度,均很接近第一名,雖然還可以再努力一把,但暫時是滿足了,以後賺了錢再進行一波優化,以下是對比數據。
先説一下高解析性能優化主要有兩點:
1.多線程,必須將VT指令的解析從主線程中剝離出來,利用專用線程進行解析。
2.針對特定指令進行優化,由原來逐字處理,改為批量處理。
再説內存優化,這必須用到,內存壓縮算法如LZ4、Snappy、LZO,因為我是為了對標windTerm故採用了與它相同的zstd壓縮算法,這樣比較省時間。
在VT終端中,每個字符都有各類屬性如字體粗斜下劃線、前顏色、背景色、是否關鍵字如email/鏈接等,故需要精心設計數據結構,讓相同屬性的內容聚在一行,核心點讓相同內容儘可能高頻率重複。
以下是優化的效果
為什麼沒有把xshell / secureCRT等SSH或SFTP或FTP的工具軟件進行對比呢?主要是沒有找可用的免費版本。
🖥 測試環境
| 組件 | 配置 |
|---|---|
| WoTerm 主機 | 12 代 i5,48 GB 內存 |
| 測試服務器 | 2 核 8 GB,Fedora,虛擬機 NAT 模式 |
⚙ 測試命令
| 命令 | 説明 |
|---|---|
time seq 10000000 |
生成 1000 萬行記錄 |
urandom_test.sh |
生成 100 MB 隨機數據 |
📦 測試程序版本
| 程序 | 版本 |
|---|---|
| WoTerm | v10.2.1 |
| WindTerm | v2.7.0 |
| PuTTY | v0.83 |
⏱ 測試方法
- 測試日期: 2025 年 4 月 18 日
- 每條對比命令至少執行 10 次
- 去掉 最大/最小值 後取平均成績
命令處理時間
在終端對服務器執行 time seq 10000000,用手機秒錶記錄總耗時。
命令末尾打印的耗時僅反映 SSH 線程收完數據的一刻,並不公平。
因軟件數據鏈路為:
SSH 線程接收 → 主線程分發 → 終端線程處理 → 主線程展示
故以手機秒錶為準。
命令處理時間
urandom_test 吞吐量對比
本項對比 每秒處理記錄數(吞吐量)。
執行吞吐量
urandom_test 執行後內存佔用
下圖已減去啓動後的基線內存,僅顯示命令帶來的 新增內存。
內存佔用
注:以上成績基於上述配置,不同硬件/環境結果可能不同。
官網地址: https://woterm.com
開源地址: https://github.com/aoyiduo/woterm 和 https://gitee.com/aoyiduo/woterm