随着业务的不断发展,大型app对于包体会比较敏感,本篇主要针对自己在项目中实际进行优化的方向进行一次记录。
主要方向如下几点:
- .app包体内容整体归类分析
- 图片差异比较和优化(包括解析Assets.car)
- 无用函数
- 无用类
- 无用图片
- 重复资源检测
- linkmap分析(二进制文件)
- armv7架构去除统计
- __Text段迁移
不忘初心,方得始终
随着业务的不断发展,大型app对于包体会比较敏感,本篇主要针对自己在项目中实际进行优化的方向进行一次记录。
主要方向如下几点:
目前项目包体下载大小:
下载大小超过200MB的时候,对于低版本的系统,将无法用流量下载,高版本系统也需要用户自己手动设置。
730测试期间,iOS13以下的包体下载大小:
减小了45M,优化效果较为明显。
Apple 在 iOS13 + 去掉了对可执行文件的 __TEXT 段加密,使得iOS13+的系统比低版本系统下载大小减小了30%-40%。
iOS13以下优化方案:可将可执行文件中一部分段从 __TEXT 段中移动到其他段来绕过加密,提高可执行文件的压缩效率,从而使下载大小减小。
more >>之前有对hybrid交互方式做了一个相关的总结,也有对UIWebView相关做了整理,相关文章如下:
花了点时间,将WKWebView做了一下整理。
WKWebView相比于UIWebView来说,主要有以下几个优点
estimatedProgress
之前有记录过从零收拾一个hybrid框架–选择JS通信方案,在之前公司的项目里也搭建过JS交互的容器,不过是基于WKWebView的。而这篇文章主要是介绍UIWebView相关的,在这里也单独整理一下。
其实UIWebView
用法比较简单(功能基本能满足需求),简单的创建并且调用即可
1 | - (void)loadRequest:(NSURLRequest *)request; |
如果需要监听页面加载的结果,或者需要判断是否允许打开某个URL,那需要设置UIWebView
的delegate
,代理只需要遵循``协议,并且在代理中实现下面的这些可选方法就可以:
1 | __TVOS_PROHIBITED @protocol UIWebViewDelegate <NSObject> |
前面介绍了基本的转场动画的操作,这里专门介绍一下视图控制器的转场。
平常使用app的时候,总是会有屏幕左边缘右滑返回,TabBar点击切换,Present模态弹出视图,这大概是我们在控制器间切换的三种方式,那么,如何在这三种场景下,切换控制器的时候,用我们自己的转场动画呢(也就是不用系统默认的)。
在iOS7之前,我们只能使用系统提供的转场效果,大部分时候够用,但仅仅是够用而已,总归会有各种不如意的小地方,但我们却无力改变;iOS 7 开放了相关 API 允许我们对转场效果进行全面定制,这太棒了,自定义转场动画以及对交互手段的支持带来了无限可能。
先来了解两个概念
非交互式转场:意思就是自动转场,转场的时候不可控制,比如我们push的时候,一下子就过去了,我们没法控制它。
交互式转场:可以操控的一种转场,最常见的是左滑pop的时候,我们可以滑一半,滑一点,这时候pop的行为我们可以通过交互的方式不停操控。
more >>之前介绍了关键帧动画,主要是通过属性动画,在两个值(或者多个值)之间做动画。而转场动画,则是影响到整个图层的变化,转场动画首先展示之前的图层外观,然后通过一个交换过渡到新的外观。
在转场动画中,我们引入了一个新的类,CATransition
,该类同样是CAAnimation
的子类,和别的子类不同,CATransition
有一个type
和subtype
来标识变换效果。
之前我有介绍过Instruments中的Allocations和Leaks,用于针对内存激增以及内存泄漏的问题,那么instruments中的Time Profiler呢?
正如其名,Time Profiler能帮助我们分析代码(方法)的执行时间,找出导致程序变慢的原因,从而我们可以根据需要具体再去优化代码或者其他什么的。
more >>在iOS中,内存泄漏是个很严重的问题,他会造成我们的程序在使用过程中本该释放的内存没有得到应有的释放,从而app占用内存不断变大,甚至出现闪退等严重问题。平常我们都会用 Instrument 的 Leaks或其他一些开源库进行内存泄露的排查,但它们都存在各种问题和不便,我们逐个来看这些工具的使用和存在的问题。
more >>tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true