在非代碼的布局方式里,xib和QuickVFL都是非常好用的方式栏渺。本篇文章就是為了比較這兩種布局方式在性能上的差異呛梆。
比較方式
方式就是相對同一個控件,通過重復完全創(chuàng)建&填充控件內容&展開布局磕诊,然后查看它們在期間的性能數(shù)據(jù)填物。
對比的控件
我使用的是攜程的旅行日程里的卡片控件纹腌。截圖如下:
控件的簡單說明為:
標題最多兩行,高度自適應
副標題最多三行滞磺,高度自適應升薯。
文章出處在左邊底下
圖片在右邊。圖片和內容的比例固定击困。我取他是內容的寬度的0.8倍
圖片的高度為其寬度的0.6倍
閱讀數(shù)在圖片底下涎劈。當閱讀數(shù)小于100時,不展示閱讀數(shù)阅茶。
左邊的內容和右邊的圖片蛛枚,誰的高度高就誰來撐起控件的高度
QuickVFL實現(xiàn)的控件(TravelCardVFL)
配置部分
簡書的代碼編輯實在有點弱,我就上截圖吧:
頭文件部分
m文件部分
從代碼上來看脸哀,布局的代碼基本為零蹦浦。
xib實現(xiàn)的控件
xib布局文件內容
布局的時候,已經盡可能使得結構合理撞蜂、簡單盲镶。但花了相當長的時間。要不斷地人肉check約束蝌诡。過程中還重新來了2次徒河。嗯,估計是我不熟吧……
頭文件內容
相比之前送漠,只是添加了一個實例化的類方法
m文件內容
相比上一個m文件,添加的內容只是實例化函數(shù)由蘑。這文件內的布局代碼也基本為0闽寡。
測試運行
運行環(huán)境
ipad mini,iOS版本8.0.2
運行截圖
底下的控件尼酿,就是正確展示的樣子爷狈。用于比較效果。上面的灰色區(qū)域是實時測試的控件的粘貼區(qū)域裳擎。
測試運行的代碼
重點說明:
重復創(chuàng)建1000次
在主線程測試
填充控件的圖片和文字數(shù)據(jù)事先緩沖好了涎永,所以運行時間沒有干擾
控件被創(chuàng)建出來后,直接對frame大小進行賦值鹿响,然后填充羡微、展開,并被添加到super view里惶我。這期間的時間都會被累計起來妈倔。
為了不讓VC的布局影響到結果,viewPlaceHolder已經提前給了一個固定大小绸贡。
其實這里盯蝴,要不要把它加到super view里毅哗,并不影響測試結果,因為主要的布局過程(創(chuàng)建捧挺、填充數(shù)據(jù)后虑绵,layoutIfNeeded)會占據(jù)絕大部分。
最終運行結果
QuickVFL:1000次闽烙,用了10.36秒
XIB:1000次翅睛,用了14.13秒
每次運行會有些許不一樣,但差別不大鸣峭『晁總體上來說,大概QuickVFL會比xib的快20%左右摊溶。在內存的使用上爬骤,基本一致(后來使用一個列表把創(chuàng)建出來的卡片囤起來,發(fā)現(xiàn)內存使用上沒兩者并沒有太大差別)莫换。
結論
使用QuickVFL進行布局霞玄,只要你對VFL熟悉,你會發(fā)現(xiàn)比xib愉快的多拉岁,過程也可控得多坷剧。運行速度上,也是一個大大的PLUS喊暖!
更多比較
其實我非常想拿mansory寫一個同樣的控件惫企,然后進行比較。但看了一下mansory的文檔陵叽,太繁瑣了狞尔。希望哪位兄弟看了這篇文章后,能幫忙寫一個巩掺,然后我們將會得到一個更加全面的比較結果偏序。