youngsoft / MyLinearLayout

MyLayout is a powerful iOS UI framework implemented by Objective-C. It integrates the functions with Android Layout,iOS AutoLayout,SizeClass, HTML CSS float and flexbox and bootstrap. So you can use LinearLayout,RelativeLayout,FrameLayout,TableLayout,FlowLayout,FloatLayout,PathLayout,GridLayout,LayoutSizeClass to build your App 自动布局 UIView UITableView UICollectionView RTL
MIT License
4.41k stars 899 forks source link

[推广建议] 性能测试报告 #25

Open JimmieWong opened 8 years ago

JimmieWong commented 8 years ago

已经用在了项目中 并且已经发布到appstore 很好用 感谢; 但是如果作者能给出关于性能方面的测试报告 这样在团队推广的时候更有说服力

youngsoft commented 8 years ago

非常感谢您的支持。我会参考您的建议,尽快出具性能测试报告。。

youngsoft commented 7 years ago

您好!在新版本V1.3.6中已经实现了性能的大幅度提升。下面是MyLayout,frame, AutoLayout, Masonry, UIStackView这5种布局体系下的每个子视图的构建时长和布局时长的对比图: demo

下面表格是新旧版本各布局视图内单个子视图在iPhone6真机设备下的构建和布局时长值(单位是毫秒ms)

create time 1.3.6 1.3.5 提升% layout time 1.3.6 1.3.5 提升%
MyLinearLayout 0.164 0.211 28% 0.049 0.160 226%
MyFrameLayout 0.149 0.212 42% 0.042 0.142 234%
MyRelativeLayout 0.182 0.215 18% 0.068 0.137 101%
MyFlowLayout 0.107 0.146 37% 0.036 0.111 210%
MyFloatLayout 0.148 0.147 -0.48% 0.055 0.117 113%
MyTableLayout*
MyPathLayout*

这里没有提供表格布局和路径布局数据是因为表格布局就是一种线性套线性的线性布局,路径布局则没有进行多少优化。下面的一个表格则是单个视图分别在MyLayout,frame,AutoLayout,Masonry,UIStackView5种布局体系下的构建和布局时长对比值。

create time Frame MyLayout AutoLayout Masonry UIStackView
MyLinearLayout 0.08 0.164 0.219 0.304 0.131
MyFrameLayout 0.05 0.149 0.209 0.273 0.131
MyRelativeLayout 0.079 0.182 0.116 0.359 0.131
MyFlowLayout 0.08 0.107 0.198 0.258 0.131
MyFloatLayout 0.044 0.148 0.203 0.250 0.131
layout time Frame MyLayout AutoLayout Masonry UIStackView
MyLinearLayout 0 0.049 0.269 0.269 0.272
MyFrameLayout 0 0.042 0.243 0.243 0.272
MyRelativeLayout 0 0.068 0.274 0.274 0.272
MyFlowLayout 0 0.036 0.279 0.279 0.272
MyFloatLayout 0 0.055 0.208 0.208 0.272

从上面的表格中我们得出如下结论issue#25

  1. 用frame构建视图用时最少,平均每个视图花费0.068ms。当视图的frame指定后就不再需要布局视图了,所以布局时间几乎是0。
  2. 当用AutoLayout进行布局时每个子视图的平均构建时长约为0.189ms,而Masonry因为是对AutoLayout的封装所以平均构建时长约为0.289ms。在布局时则因为都是使用了AutoLayout所以是相等的,大概花费0.255ms左右。
  3. MyLayout的实现因为是对frame的封装,所以无论是构建时长和布局时长都要优于AutoLayout,但低于原始的frame方法。MyLayout的平均构建时长约0.150ms,比frame构建要多花费2.2倍的时间;而AutoLayout的平均构建时长是MyLayout的1.26倍;Masonry的平均构建时长则是MyLayout的1.9倍。
  4. MyLayout的平均布局时长是0.05ms, 而AutoLayout的布局时长则是MyLayout的5倍。
  5. UIStackView的构建时长要稍微优于MyLayout的线性布局MyLinearLayout.但是布局时长则是MyLinearLayout的5.5倍。
  6. MyLayout中流式布局MyFlowLayout的构建时长和布局时长最小,而相对布局的构建和布局时长最长。
JimmieWong commented 7 years ago

性能用的什么工具测试的 学习下

youngsoft commented 7 years ago

其实很简单,就是我在工程里面的单元测试里面的文件:MyLayoutPerformanceTestCase.m里面对各种布局做了性能测试,然后根据得到的数据做的EXCEL表格。

OYForever commented 6 years ago

能加上SDAutoLayout的性能对比么,这个好像是基于frame的