終於搞清楚了爲何Java桌面程序老是感受慢的緣由!
按照道理服務器和瀏覽器都在用腳本和虛擬機,那些不慢,而Java的桌面程序老是感受響應遲鈍呢?主要有兩個緣由,一是服務器和瀏覽器都是異步的,提交到渲染出來這中間有足夠的時間去處理,並且網絡IO要遠遠慢於本地CPU調用;二是瀏覽器的界面其實不是JavaScript渲染(不少人可能都會覺得HTML是JS繪製的),而是瀏覽器在操做系統層原生支持的,甚至還作了專門的優化。
Java繪製圖形其實是兩層,一層是基於底層繪圖API進行橋接,如swing之類的JavaStyle的UI,每個UI繪製操做都要調用虛擬機API,效率很難提高;第二層使用GUI對象層API橋接(好比WinForm的API,可是不可移植),這種方式減小了不少圖形API的Java調用,性能跟原生程序不相上下。pyQT的實現是基於第二種方式的,所以雖然python效率並不高,可是繪製實時圖形和GUI沒有什麼壓力。Java的OpenGL也是基於第二種方式實現的,所以也能夠流暢地繪製三維圖形(若是運算量大就不行了)。python
所以,提高Java中桌面程序交互性的關鍵是用原生庫進行GUI層面的繪製,這個有不少了,包括WxWindow/GTK/QT,並且效果也很是酷。Sublime/Blender都是用的這種模式,裏面不少程序都是python的,可是界面和圖形繪製操做是C++的,調用原生操做系統的API進行繪製(QT是調用的GUI層,使用不一樣操做系統本身的GUI進行繪製)。瀏覽器
Java桌面程序的開發建議使用Eclipse的框架,開發相容性比較好,插件機制比較完善。可是Eclipse的界面也有上述問題,在虛擬機裏響應太慢,我已經基本放棄了。服務器
最新的UI系統都是用OpenGL直接繪製,性能和移植性都比較好,效果天然不用說了。網絡