最近,微信安装包从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,为什么我们的程序越来越大?的更多相关文章

  1. iOS 安装包瘦身(下篇)

    本文来自网易云社区 作者:饶梦云 2.4. 清理无用代码 2.4.1. Dead Code Stripping Activating this setting causes the -dead_str ...

  2. iOS开发——程序员必备&iOS安装包的三种格式 deb、ipa 和 pxl的解释和说明

    iOS安装包的三种格式 deb.ipa 和 pxl的解释和说明 目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl.转自链接:http://fanlb.blogbus.com/logs ...

  3. php实现在线下载程序安装包功能

    在线下载程序安装包可以很方便在服务器端下载各种程序安装包(Discuz!.phpwind.Dedecms.WordPress....等一些常用程序)并存储在服务器,大大减少站长上传程序安装包时间.默认 ...

  4. LNMP一键安装包

    http://www.aliweihu.com/333.html LNMP一键安装包是什么? LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat.Debian/Ub ...

  5. vs 2017打包安装包(印象深刻)

    Visual Studio Install 打包安装项目2017 以下是具体步骤 一.安装环境 1.下载:链接地址 2.安装vs2017的时候需要安装依赖 .NET framework 4.6 .下载 ...

  6. iOS 平台上常见的安装包有三种,deb、ipa 和 pxl

    前言:目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl. 其中 deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式,配合 APT 软件管理系统 ...

  7. 使用VS2015制作安装包( 含相关的下载链接)

    补充: 在看下面的教程过程中,如果在下面的步聚1中没有 " Visual Studio Installer", 则需要通过下面的链接进行安装 Visual Studio Insta ...

  8. 流程自动化RPA,Power Automate Desktop系列 - 创建WPF程序安装包及升级包

    一.背景 之前写过的几个WPF小工具,每次发布都需要给它打安装包和升级包,涉及到一些系列繁琐的手工操作,有了Power Automate Desktop,于是便寻思着能不能做成一个自动化的流来使用. ...

  9. Mac如何找到从AppStore下载的正版Xcode安装包

    前言:本文介绍在Mac下如何找到AppStore下载的安装包路径,以及如何提取出来供以后使用,希望对大家有所帮助(前提:想要提取某个安装包,前提是你正在从AppStore安装这个程序.比如你想提取im ...

随机推荐

  1. JavaScript 数据结构与算法3(链表)

    学习数据结构的 git 代码地址: https://gitee.com/zhangning187/js-data-structure-study 1.链表 本章学习如何实现和使用链表这种动态的数据结构 ...

  2. django小项目,使用paramiko自动备份网络设备配置

    原来公司开发团队人员众多,有专门对接运维需求的开发人员,现在想要实现些功能可(只)以(能)自己写了-_- |   周末在家无事,用django搞个简单的功能练练手 django安装,配置 sudo p ...

  3. 腾讯产品快速尝鲜,蓝鲸智云社区版V6.1灰度测试开启

    这周小鲸悄悄推送了社区版V6.1(二进制部署版本,包含基础套餐.监控日志套餐),没过一天就有用户来问6.1的使用问题了.小鲸大吃一鲸,原来你还是爱我的. ![请添加图片描述](https://img- ...

  4. MySQL中读页缓冲区buffer pool

    Buffer pool 我们都知道我们读取页面是需要将其从磁盘中读到内存中,然后等待CPU对数据进行处理.我们直到从磁盘中读取数据到内存的过程是十分慢的,所以我们读取的页面需要将其缓存起来,所以MyS ...

  5. 论文解读(GraphSMOTE)《GraphSMOTE: Imbalanced Node Classification on Graphs with Graph Neural Networks》

    论文信息 论文标题:GraphSMOTE: Imbalanced Node Classification on Graphs with Graph Neural Networks论文作者:Tianxi ...

  6. Spring-Cloud-Alibaba系列教程(一)Nacos初识

    前言 在2020年即将开启SpringCloudAlibaba的专题,希望2020年共同学习进步. 学习资料 文档 Naco文档 程序猿DD Spring Cloud Aliabab专题 专题博客 视 ...

  7. CabloyJS一站式助力微信、企业微信、钉钉开发 - 企业微信篇

    前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...

  8. NodeJS全栈开发利器:CabloyJS究竟是什么

    CabloyJS CabloyJS是一款顶级NodeJS全栈业务开发框架, 基于KoaJS + EggJS + VueJS + Framework7 文档 官网 && 文档 演示 PC ...

  9. SQL语句修改MySQL用户密码

    SQL语句修改MySQL用户密码 前言 上数据库安全实验课,用命令行和DataGrip试图修改用户密码,一直语法报错.最后用Navicat才修改成功,预览Navicat的SQL语句,发现语句和网上都不 ...

  10. js中通过ajax调用网上接口

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...