PaintCode调研
1. 背景
PaintCode是一款面向iOS和Mac应用开发者及设计师的矢量图形可视化开发工具。它可以让设计师把设计好的psd文件直接导入该工具,然后生成用Quartz 2D 产生的object-c代码。直接供程序员使用,而省略了图片资源。
1.1主要功能
- 直接生成适用于iOS的Objective-C代码,节省了大量的编程时间。
- 生成的代码支持ARC/MRC,iOS5+/6+/7+.
- 可以控制图片生成的Frame、颜色等变量来动态生成需要所需要的图片。
1.2 相关资料:
官网:http://www.paintcodeapp.com/
http://blog.csdn.net/lujunelong/article/details/18899913
2. 实验数据
2.1实验一:复杂图片
背景:采用一张较为复杂的图片, 400*400。体积为:37k。
只提供了2X的图片(已压缩);支持armv7 armv7s arm64。
|
|
paintCode |
UIImage |
|
安装包大小 |
342k |
379k |
|
占用内存 |
3.4M |
3.8M |
|
real mem: |
12.25M |
13.3M |
|
耗时 |
0.054807(跟踪发现就一个地方耗时) |
0.0087 |
描述:
- 安装包大小在paintCode下有明显减小(即使已经支持了arm64,仍然能减小,且图片还没有支持1x和3x的图片效果明显)
- real men和占用内存paintCode都有明显减小
- 耗时有较大提升。性能差距加大。
2.2 实验二:简单图片
背景:采用一张较为简单的图片, 224*90。体积为:2k。
|
安装包大小 |
paintCode(armv7 armv7s arm64) |
UIImage(armv7 armv7s arm64) |
|
1份代码or图片 |
380k |
381k |
|
3份代码or图片 |
396k |
385k |
|
安装包大小 |
paintCode(armv7) |
UIImage(armv7) |
|
1份代码or图片 |
215k |
217k |
|
3份代码or图片 |
216k |
221k |
描述:
- 如果仅仅是打armv7的包,使用paintCode安装包大小有减小。有收益。
- 针对简单图片做了3份,使用paintCode在同时支持arm64的情况下,体积收益不一定要大于使用图片。
2.3 实验三:耗时测试
背景: 复杂图片就如实验一,简单图片资源参考图片二
|
方式 |
耗时(秒) |
|
简单button的paintCode |
0.006329 |
|
imageWithContentsOfFile |
0.000797 |
|
imageNamed(第一次) |
0.009291 |
|
复杂paintCode |
0.061804 |
描述:
- 复杂的paintCode耗时会较长。
- 简单button的PaintCode耗时数量级在毫秒级
- 一份代码可以支持多个屏幕,针对Iphone6,iphont6+没有体积增加。
- 显示效果较好,矢量拉伸。
- 有效减小内存使用。
- 在复杂大图下,可以有效减少安装包大小。
- 如果针对armv7 arm64进行编译,跟直接使用图片比浪费体积。
- 生成UIImage耗时比使用直接图片时间长。
3. 风险点&优势
3.1 优势
- 一份代码可以支持多个屏幕,针对Iphone6,iphont6+没有体积增加。
- 显示效果较好,矢量拉伸。
- 有效减小内存使用。
- 在复杂大图下,可以有效减少安装包大小。
- 如果针对armv7 arm64进行编译,跟直接使用图片比浪费体积。
- 生成UIImage耗时比使用直接图片时间长。
3.2 劣势
- 如果针对armv7 arm64进行编译,跟直接使用图片比浪费体积。
- 生成UIImage耗时比使用直接图片时间长。
4. 进一步优化
为了解决耗时问题, 给paintCode生成的图片做一个缓存,缓存到磁盘。下次使用直接取缓存。提升效率。
备注:
- 使用文件名+尺寸+特殊参数组成图片名称存储到磁盘中。
- 缓存的图片不要进入icloud。让每个机器分别创建。
- 缓存的图片加入一个过期淘汰机制,注意尽量不要让应用中所有图片在同一时间重建。
- 进入加入Server开关,可以强制客户端缓存清除。
5. 总结
PaintCode可以对内存大小、安装包大小的控制起到一定作用。但它还是有很多的限制因素。
5.1建议使用PaintCode的场景:
- 图片较为复杂、体积较大。
- 要为不同屏幕生成多套图片。
比如:首页启动的Loading图片。新手引导。
PaintCode调研的更多相关文章
- CMS模板应用调研问卷
截止目前,已经有数十家网站与我们合作,进行了MIP化改造,在搜索结果页也能看到"闪电标"的出现.除了改造方面的问题,MIP项目组被问到最多的就是:我用了wordpress,我用了织 ...
- 记lrd的高二上学期第五次调研考试
河北某某中学的调研考试其实是很好玩的经历呢.可惜没有太多机会了. 背景: NOIP2016回来之后没有好好学文化课-.自习能翘就翘了,衡中特产学案自助没有好好写(说来我好像从来没被老师查到过,上课写学 ...
- 《Kafka Stream》调研:一种轻量级流计算模式
原文链接:https://yq.aliyun.com/articles/58382 摘要: 流计算,已经有Storm.Spark,Samza,包括最近新起的Flink,Kafka为什么再自己做一套流计 ...
- OpenStack调研:OpenStack是什么、版本演变、组件关系(Havana)、同类产品及个人感想
一点调研资料,比较浅,只是觉得部分内容比较有用,记在这里: 首先,关于云计算,要理解什么是SAAS.PAAS.IAAS,这里不述:关于虚拟化,需要知道什么是Hypervisor,这里也不述: Open ...
- Beta版本——用户试用与调研报告
1 引言 1.1 系统概述 毕设导师智能分配系统是一个用来简化传统手工匹配繁琐操作的系统.本系统将学生报志愿.系负责人收集整理数据.相关人员进行手工分配.反馈选择结果等繁琐的操作转移到线上.把毕设 ...
- 移动Web开发调研
背景 在移动互联网浪潮下,移动设备普及,对配置需要考虑移动端设备可访问性.Web作为最贴近用户的配置手段,面向从PC端传统页面,向移动端页面的转型. 概念 PC Web: 面向传统PC电脑的浏览器开发 ...
- Web自动化测试工具调研
背景 Web自动化测试越来越被重视, 因为现在Web已经是工程化的状态. 如何通过工具测试, 保证Web开发的质量,提升开发效率,是Web工具的诞生的来由. Web测试分为以下几个方面: 1. 界面测 ...
- Postgresql-xl 调研
Postgresql-xl 调研 来历 这个项目的背后是一家叫做stormDB的公司.整个代买基于postgres-xc.开源版本应该是stormdb的一个分支. In 2010, NTT's Ope ...
- 请各位帮帮忙:Android LBS应用——CityExplorer (v1.0) 调研
Hello哇各位亲!! 请各位帮帮忙:Android LBS应用——CityExplorer(V1.0)调研 嗯,这个事情是这样的,要填一个调查问卷,但是问卷中部分问题是关于这个叫做CityExplo ...
随机推荐
- ionic 安装本地插件极光推送
问题:按照官方文档的步骤 假如把插件保存到了D:\push\jpush,当执行到 cordova plugin add D:\push\jpush 的时候,ionic 不是从本地目录安装,而是从reg ...
- Install Java1.6
声明:一下内容主要来自网络,本来在此基础上根据自己的成功经验做了一些浅陋的(但有价值的)备注说明和修改. (本人也是ubuntu 11.10版本,但是是64位的,因此安装的java也是64位版本.) ...
- bootstrap学习<三>打开模态窗体
可以切换模态框(Modal)插件的隐藏内容: 通过 data 属性:在控制器元素(比如按钮或者链接)上设置属性 data-toggle="modal",同时设置 data-targ ...
- 关于javascript中的===和==
=是赋值符号,==是等于,===是严格等于. 对于等号两边的数值,如果类型不相同会先转换类型再比较,===则不会转换类型. 例如3和“3”在==比较下true,在===下是false, null和un ...
- jquery 调用ajax返回json
ie调用可以,火狐和chrome皆失败,找了半天原因. 被屏蔽了. 火狐和chrome 对同一个域名不同端口的调用也严格限制,不给调用.只能用jsonp. 查看网络的返回状态,错误信息,F12 很重要 ...
- HDU 4768 (二分区间---涨姿势)
题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字. 分析:读完题并没有思路,后来知道是二分区间,枚举是哪 ...
- HDU1016 dfs
刷回溯的时候发现我对DFS思路很不清晰,总是做着做着就乱了,刷个水题找找思路. 题意:经典DFS,找出所有的能让1~n的数形成素数环的序列(相邻相加为素数): #include <iostrea ...
- Qt开发环境中使用报表控件FastReport遇到的一些问题(二)
上一节中谈到的那个问题:传递的变量内容如果是纯英文,报表报错.经笔者反复测试,找到了解决办法:代码中第5行替换为以下 params<<"my_var"<<& ...
- ZeroMQ - 三种模型的python实现
ZeroMQ是一个消息队列网络库,实现网络常用技术封装.在C/S中实现了三种模式,这段时间用python简单实现了一下,感觉python虽然灵活.但是数据处理不如C++自由灵活. 1.Request- ...
- ireport开发报表,Java和JSP端如何集成
Java端: @RequestMapping("/report") public String report() { return "/credit/report/rep ...