在做测试的时候,有对apk进行的内存泄漏的测试。虽然,每个手机浏览器厂家在软件发布的时候,都已经而且肯定的对自己的软件做了内存泄漏的测试,当然,这是他们的命根,它们还会想继续的对软件占用的内存做各种技术上的优化,以保证他们的软件的内存不会在技术上发生泄漏,导致软件甚至是系统的崩溃。
现在来说说市面上的手机浏览器是如何控制他们的内存的,这些验证包括最流行的浏览器(百度,qq,猎豹,搜狗,UCWEB)
1、对新建标签做控制,就是对标签的数量做一定的限制,保证内存占用在一定的可以接受的范围之内,而且不会因为占用太多的系统内存导致由于系统卡顿而造成的软件卡顿。为什么会对标签数量做限制呢?究其原因,会在第二点分析上给出。
2、因为缓存而占用内存,可能这是对第一点标签数量控制给出的答案吧。因为大家都知道,移动设备的流量在中国来说,是一笔比较昂贵的费用,我们如何花更少的流量,来做更多的事情内,答案就是缓存!是的,国产手机浏览器的宣传中,我们可以看到“快、轻、稳、省”这几个常用的宣传关键字,那么逐个来分析吧:快,要达到这个目的,首先要网速够快,第二是载入的速度要够快,怎么做到呢?首先,在用户浏览之前,提前载入要浏览的内容,在浏览的时候,只要做呈现的动作就可以了,而不用再去请求,这包括整个网站数据的提前载入,回退动作的预先缓存。而无法预期的是网速,当然,在纯软件技术上,这个可以去规避。当然,在载入的过程中,也会因为技术算法的原因,各有不同,不过零点几秒的差距,一般人是不会体验出来的。轻呢?那又说的是啥,轻就是软件能快速响应用户的操作,这个是整个软件体现出来的用户体验,跟软件的整体构建,软件编码和操作逻辑有很大的关系,具体的分析这里不会做出。稳的特点当然是不会崩溃,最后的省,也几乎是和快是一样的东西,那就是缓存。如何能快速缓存,当然,每个程序在运行的时候,为了达到快速缓存的目的,一般都会将数据放置在内存当中,用来提供给下个动作的引用。宗上所述,我们就可以知道,国产浏览器,在缓存上,是做了很多的,也就是说,当你打开一个浏览器进行使用的时候,它会占用你不少内存。这也就是,我们的标签开得越多,就越卡的原因,几乎和在windows上是一个道理。
3、内存释放,内存释放这个动作似乎是android虚拟机统一调配的,国产浏览器在测试时候的表现,都不会去释放内存,当你使用home键跳回到桌面的时候,为什么这样呢?当然是为了我们再次进入的时候,还在退出时候的画面,为了这个快和省的表现,牺牲了很大一部分的内存空间。
改进:
是的,每一个浏览器提供者,它最大限度的考虑了用户的体验,而且也帮用户的钱包做了最好的打算,但是,当用户使用多款这样的软件进行同时操作的时候,我们会遇到什么样的问题呢?那就是把系统的内存耗光,不过,系统还是会在某一个断点去帮我们自动去判断哪个进程是不需要的,而及时释放它的内存。不过,这些软件需求的制定者们,都只考虑了自身的情况,它们假设用户只有一款浏览器,在操作浏览器的时候,只是操作浏览器。不过,在android这个自由的系统里,任何操作都是合法的,因为自由。
那么,对比下ios和chrome,我们又会发现什么,那就是,在ios或者chrome上,你可以任意开多少个标签都是没有关系的,只要你想,因为它们都为其他的软件做了提前的预想,那就是只要不在当前页面进行浏览,就会马上回收内存,保证资源合理利用最大化。chrome上会有这样的表现和承诺,那是android给系统做出的让步,当然,这个让步是在iphone上借鉴而来的技术改进。不过这种机制,又给我们带来了几个问题,如果你的网速不够快,如果你的载入不够快,那么用户体验是不好的,而且,对流量的消耗也是巨大的,在2g网络上,我们就可以完全的体会到这一点。
我想:
看了这么多,也想了这么多,为什么要做标签限制?那是因为内存占用。为什么马上释放内存,而消耗流量呢?那是因为为了保证系统资源的合理,当然,也能省电,不过我们的流量呢?
其实,如果我们合并了这两个想法,那会是一个什么样的结果呢?
那就是标签可以任意开,但是,在增加标签的时候,保留增开标签的缓存,在回退和前进的时候不用再次请求,此时销毁其它的标签缓存。
我想,这也是一种权衡的做法吧,当用户浏览在一个页面浏览一个消息、新闻、小说的时候,快进快退的缓存是必须的,而且,我们不会无休止的增进自己的链接,所以,这个方式可以称为一种折中的表现,当然,这也不会占用太多的内存。是的,当你打开第二个标签的时候,是否希望第一个标签的东西被保留呢?还是只是暂时性或者惯性的打开第二个标签呢?答案多数倾向于第一种,不过这个时候清空你的缓存,怕是会对你的流量再带来一次不小的IO,不过这种极客的思想,可以让系统更加流畅和稳定。这也是一个不小的问题。有感而发,记录下此刻的思想。