Skip to main content

内存限制

背景: 我们在开启请求拦截时,iOS系统会开启一个专门的进程处理网络请求,但是系统对此进程内存做了限制,具体来说iOS15及以上可以使用50M,iOS15以下只能使用30M,一旦超过该内存限制就会导致进程的中断退出。

1、设置Body大小限制

HTTP请求的在修改时,需要将数据全部收集起来(如果有压缩那么还需要解压缩)才能解码,比如JSON修改,我们要等待Body全部传输完毕才能解压缩,然后再解码成字典或者数组,再进行数据的替换。为了避免进程的内存溢出,我们设置了一个可处理Body的最大值,一旦超过了这个设定值,那么则放弃修改(如果有压缩,解压过程中如果发现超出设定值也会放弃修改)。

2、解压缩缓冲区大小设置

HTTP在传输过程中可以对Body进行压缩已达到提高传输效率的目的,在修改Body时,解压缩需要预设值一个缓冲区,我们这里按照压缩数据的倍数设置。该值设置过小可能会导致数据解压缩不完整,导致解码失败,如果设置过大,可能会导致内存溢出,在作者实际测试过程中,发现有的JSON文件可以达到13倍的压缩率。