GacUI 已經讓幾乎所有 Demo 「完全去掉反射」
但是現在情況已經完全不同了!XML轉C++的功能終於覆蓋到了這個倒數第三個Demo了,因此初始化就是一大段C++代碼跑完,窗口就出來了。而且拖動窗口的邊緣讓程序(主要是其他的TabPage)進行「實時」排版的時候,就算是Debug模式也根本看不見任何延遲。Release模式下甚至只要以雙擊BlackSkin.exe,一瞬間就看到了這個窗口。
現在還有一個小問題,就是Release模式的exe高達3.5M,當然這其中一個原因是XML是在寫的有點複雜,內容多程序自然就大了。不過3.5M比起之前地34M已經處於可以忽略的情況了,等以後再繼續優化。BlackSkin.bin這個編譯好的二進位資源文件,因為之前需要包含所有XML編譯出來的位元組碼,竟然有18M那麼大,所以加起來一共有34M。現在不需要位元組碼了,只剩下848KB,其中的843KB是目錄下面的png文件,全部都打包進去了,部署超級方便。
當然BlackSkin.bin也可以不成為一個文件的,你完全可以把它當成exe的資源文件直接鏈接在exe裡面,運行的時候用API讀出來,轉成 vl::stream::MemoryWrapperStream,就可以被載入了。跟載入文件是一樣的。使用DecoderStream + LzwDecoder,你甚至可以直接讀取GacGen.exe根據你的配置創建的壓縮後的BlackSkin.bin。
時隔兩年,GacUI的絲般順滑feature終於也覆蓋這種超複雜的XML了,而且佔用的內存比WPF小一大截,響應也比WPF要更快。果然純粹的native代碼就是迅猛啊。覺得自己真是太牛逼了(逃
當然這個UI咋一看其實也不是很複雜,但是因為我的排版大部分是面向Table的(就像css的grid和flex的組合),所以但凡任何東西都使用Table,這個截圖的幾個TabPage加起來,應該有幾百個Table了。這麼多Table根據屬性互相制約,每次拖動窗口的時候都要不斷地計算,收斂到一個結果才算排版玩,然而哪怕是被VC++調試的Debug模式下,也是一點感覺都沒有,不斷的拖動窗口邊框,排版的計算比屏幕的刷新率還跑得快。Release就更不用說了。
一個好的架構和演算法帶來的好處,就是可以讓使用者胡來,不需要有心理負擔。就像在寫C#程序一樣,Linq亂寫一氣,程序又快又穩定。
值得注意的是,上面的那個日曆是根據Windows的界面語言跑的。如果你在英文模式下打開,那就是英文的。就算你裝了綠綠語,他也會變成綠綠語。富文本框也是支持綠綠語這種從右向左中間插著從左向右,幾十個wchar_t粘成一個字元的這種語言的。
推薦閱讀:
※Keynote排版審美提升計劃(第4期):扁平辦公
※為什麼相同長度的豎線與橫線,看起來豎線比橫線長?
※這樣的一個封面設計還能怎麼改進?
※為什麼 Times New Roman 字體被經常使用?
※電子書出現空白頁時通常會寫上一句 "This page has been left blank intentionally",為什麼需要這樣?