微信安装包从0.5M暴涨到260M,为什么我们的程序越来越大?
最近,微信安装包从v1.0的0.5M暴涨到V8.0的 260M引起大家热议,为什么我们开发的程序越来越大?本文做一个简单的讨论。(本文主要根据B站科技老男孩《逆向工程微信安装包,11年膨胀575倍到底更新了啥?》编写)。
1.程序安装包变大了
1.1安装包简介
最近,很多人都感觉到,现在的程序安装包没有1-2百兆大小都不好意思叫做安装包。这在以前是不可想象的,早期(其实也没有多早,大约10年前吧),正常一个程序的安装包也就30M左右,那时
你可以照样使用微信,使用百度,使用支付宝。可是现在,1-2百M的安装包比比皆是,而这还只是安装包。

大家都知道android的apk是zip格式的,解压后,就可以看到本体了,微信安装包解压后大小已经达到了617M,包含了12639个文件。
作为对比,微信1.0版只有199个文件。

那么到底是那些东西占用了大量空间呢?
1.2资源文件站了12.8%
微信版资源文件包括的各种图片文件,视频、音频文件,比如微信铃声、各种图标等。
另外,原作者也提到新版微信应该是公司内部不同开发组做的,导致资源管理非常混乱,各顾各的,最后缝在一块,
所以,会有重复的情况,有些资源命名也直接使用的是拼音。

1.3 各种库文件站了50%
lib文件夹存放了各种库文件,这是安装包的大头。
在程序开发里,很多时候都使用了第三方库,而不是从零编起,
以微信为例,我要支持在线解压,那包含一个7-zip库。
我要支持视频播放(mp4,ogg,avi等),那就把ffmpeg库打包进去。
我要支持图片在线编辑,那把pngedit库包含进去
这些第三方库都是打包好的,很难再压缩。微信一共使用了157个库文件。

1.4 程序本体
程序本体也就是程序自己实现的主要功能,新版大小为161M,而 V1.0版本只有0.25M,换句话说,但就聊天而言
微信只要0.25M就能实现核心聊天功能,去掉零头,在161M的程序本体里,160M都可以去掉不要(当然这是有点夸张的说法)。

进一步反编译可以看到在v1.0里使用了1845个string就能实现新版 1498000个string实现的聊天功能。
因此,你可以看想象到微信里面塞了多少内容。

所以,微信中0.1%的功能是聊天,剩下的99.9%都是塞给你的,什么打车、游戏、外卖、视频等等,

2.爱这么爱干的不止微信一家
软件包越来越大的企业不止微信,比如X浏览器使用1M就实现了浏览器的核心功能(充分利用操作系统自带的功能),而UC浏览器就达到了83M。
每个大企业都没有安全感,都把游戏、视频、外卖等往里塞。
刚刚,支付宝又提示有新的更新包,要我升级了。

对比一下美国的 Facebook大小是66.52M,Twitter 安装包109M,谷歌地图99M(百度地图130M),都尽可能控制在100M以内。

如今,虽然硬件急速发展,手机2核或4核,内存128或者256都已经算是最低配置了,
但是如果每个软件越来越大,再大的硬件配置也不够软件使用。
微信安装包从0.5M暴涨到260M,为什么我们的程序越来越大?的更多相关文章
- iOS 安装包瘦身(下篇)
本文来自网易云社区 作者:饶梦云 2.4. 清理无用代码 2.4.1. Dead Code Stripping Activating this setting causes the -dead_str ...
- iOS开发——程序员必备&iOS安装包的三种格式 deb、ipa 和 pxl的解释和说明
iOS安装包的三种格式 deb.ipa 和 pxl的解释和说明 目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl.转自链接:http://fanlb.blogbus.com/logs ...
- php实现在线下载程序安装包功能
在线下载程序安装包可以很方便在服务器端下载各种程序安装包(Discuz!.phpwind.Dedecms.WordPress....等一些常用程序)并存储在服务器,大大减少站长上传程序安装包时间.默认 ...
- LNMP一键安装包
http://www.aliweihu.com/333.html LNMP一键安装包是什么? LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat.Debian/Ub ...
- vs 2017打包安装包(印象深刻)
Visual Studio Install 打包安装项目2017 以下是具体步骤 一.安装环境 1.下载:链接地址 2.安装vs2017的时候需要安装依赖 .NET framework 4.6 .下载 ...
- iOS 平台上常见的安装包有三种,deb、ipa 和 pxl
前言:目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl. 其中 deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件管理系统 ...
- 使用VS2015制作安装包( 含相关的下载链接)
补充: 在看下面的教程过程中,如果在下面的步聚1中没有 " Visual Studio Installer", 则需要通过下面的链接进行安装 Visual Studio Insta ...
- 流程自动化RPA,Power Automate Desktop系列 - 创建WPF程序安装包及升级包
一.背景 之前写过的几个WPF小工具,每次发布都需要给它打安装包和升级包,涉及到一些系列繁琐的手工操作,有了Power Automate Desktop,于是便寻思着能不能做成一个自动化的流来使用. ...
- Mac如何找到从AppStore下载的正版Xcode安装包
前言:本文介绍在Mac下如何找到AppStore下载的安装包路径,以及如何提取出来供以后使用,希望对大家有所帮助(前提:想要提取某个安装包,前提是你正在从AppStore安装这个程序.比如你想提取im ...
随机推荐
- p2p-tunnel 打洞内网穿透系列(二)TCP转发访问内网共享文件夹
系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...
- 数据管理技术发展,数据库应用发展史,数据库分类,MySQL
计算机数据管理技术发展 1. 自由管理阶段 用户以文件形式将数据组织起来,并附属在各自的应用程序下. 1.数据不保存 当时计算机主要用于科学计算,一般不需要将数据长期保存,只是计算某一课 ...
- 零基础学Java第四节(字符串相关类)
本篇文章是<零基础学Java>专栏的第四篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! String 本文章首发于公众号[编程攻略] 在Java中,我们经 ...
- WSL2-CentOS7固定IP
WSL2-CentOS7固定IP WSL2 采用 Hyper-V 的 Internal Virtual Switch,这个虚拟交换机本身是可以设置静态 IP 地址的,但是 WSL2 却自作聪明,在每次 ...
- 48. Rotate Image - LeetCode
Question 48. Rotate Image Solution 把这个二维数组(矩阵)看成一个一个环,循环每个环,循环每条边,每个边上的点进行旋转 public void rotate(int[ ...
- 绿色城市智慧运营:Web 3D 垃圾分类 GIS 系统
前言 感谢所有为上海疫情奉献的人,祈求上海疫情早日清零,中国加油,上海加油! <上海市生活垃圾管理条例>施行至今已有两年多,上海市民践行绿色低碳理念.主动参与生活垃圾分类的习惯基本养成,分 ...
- 面试官:Dubbo是什么,他有什么特性?
哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 书接上回,今天还是过周末,虽然 ...
- 【SpringSecurity系列1】基于SpringSecurity实现前后端分离无状态Rest API的权限控制
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...
- SpringCloud微服务实战——搭建企业级开发框架(四十二):集成分布式任务调度平台XXL-JOB,实现定时任务功能
定时任务几乎是每个业务系统必不可少的功能,计算到期时间.过期时间等,定时触发某项任务操作.在使用单体应用时,基本使用Spring提供的注解即可实现定时任务,而在使用微服务集群时,这种方式就要考虑添 ...
- Caller 服务调用 - Dapr
前言 上一篇我们讲了使用HttpClient的方式调用,那么如果我们现在需要更换为通过dapr实现服务调用,我们需要做哪些事情呢? Caller.Dapr 入门 如果我们的项目原本使用的是Caller ...