Skip to content

关于SDK体积大小对比探究 #228

@meoww-bot

Description

@meoww-bot

爽文看完了,瓜也吃完了,结束后,作为一个非前端开发,来探究一下,发现鹅厂还是有点冤的,难道就没人去下载看看 aws-sdk 到底多大吗? ( 疑似 batchor 是故意搞了个大新闻

先叠个甲,本人非前端开发,也不是鹅厂员工,我也无数次诟病wxqq应用犹如3A大作一般的大小,但是代码技术就是 no bb,show me the code

我的环境

node -v
v16.14.2
npm -v
8.5.0

全包对比

大小对比

  1. aws-sdk
    按照 https://github.com/aws/aws-sdk-js 描述的安装方式,也有100M大小了
npm i aws-sdk
du -sh node_modules/aws-sdk
100M	node_modules/aws-sdk

Update: 我找错位置了, 当前最新版的 aws-sdk 仓库位置是 https://github.com/aws/aws-sdk-js-v3/ , README 的 Getting Started 写的就是子模块的安装方式了,如果是专业的前端开发人员,可能不会像我一样找错位置下载全包。

  1. tencentcloud-sdk-nodejs
npm install tencentcloud-sdk-nodejs
du -sh node_modules/tencentcloud-sdk-nodejs
 66M	node_modules/tencentcloud-sdk-nodejs

这个因为已经做了优化,大小变小了

安装上一个版本

npm install [email protected]
du -sh node_modules/tencentcloud-sdk-nodejs
 80M	node_modules/tencentcloud-sdk-nodejs

大小仍然比 aws-sdk 小

内容对比

  1. aws-sdk
ls node_modules/aws-sdk
CODE_OF_CONDUCT.md LICENSE.txt        README.md          browser.js         clients            dist-tools         global.js          index.js           package.json       scripts
Crashpad           NOTICE.txt         apis               buildspec.yml      dist               global.d.ts        index.d.ts         lib                react-native.js    vendor

内容和 https://www.npmjs.com/package/aws-sdk?activeTab=code 一样,对比 aws-sdk github库,分发是去掉了 CHANGELOG 这些无用文件

  1. tencentcloud-sdk-nodejs

内容,确实包含 CHANGELOG test examples 等对用户无用的文件

ls node_modules/tencentcloud-sdk-nodejs
CHANGELOG.md         README.md            examples             index.js             package.json         products.md          tencentcloud         tsconfig.json
LICENSE              SERVICE_CHANGELOG.md index.d.ts           node_modules         prettier.config.js   src                  test                 typings

子模块对比

而 batchor 的贴图中的 node_modules 是带 @ 的,这是模块化包,而不是传统的 aws-sdk 包。

AWS SDK v3 是模块化的,每个服务都是一个独立的包,命名空间为 @aws-sdk ,所以 #166 说用 按需分包的使用方式 对比 batchor 说的 aws-sdk 并无不妥。

但是 batchor 贴出的代码并没有展示他安装的是 aws-sdk 的哪个子模块。

  1. awk-sdk

我以安装 @aws-sdk/client-s3 测试,页面上显示 Unpacked Size
3.4 MB , 单独 client-s3 大小 4.2M,实际安装 client-s3 有一些依赖,此时因为安装 client-s3 导致的 @aws-sdk 目录总大小9.1M,仍旧和 batchor 贴出的大小不符合

npm i @aws-sdk/client-s3
du -sh node_modules/@aws-sdk/
9.1M	node_modules/@aws-sdk/
du -sh node_modules/@aws-sdk/*
4.2M	node_modules/@aws-sdk/client-s3
460K	node_modules/@aws-sdk/client-sso
392K	node_modules/@aws-sdk/core
 48K	node_modules/@aws-sdk/credential-provider-env
136K	node_modules/@aws-sdk/credential-provider-http
148K	node_modules/@aws-sdk/credential-provider-ini
 68K	node_modules/@aws-sdk/credential-provider-node
 88K	node_modules/@aws-sdk/credential-provider-process
116K	node_modules/@aws-sdk/credential-provider-sso
 76K	node_modules/@aws-sdk/credential-provider-web-identity
136K	node_modules/@aws-sdk/middleware-bucket-endpoint
 36K	node_modules/@aws-sdk/middleware-expect-continue
368K	node_modules/@aws-sdk/middleware-flexible-checksums
 36K	node_modules/@aws-sdk/middleware-host-header
 48K	node_modules/@aws-sdk/middleware-location-constraint
 48K	node_modules/@aws-sdk/middleware-logger
 36K	node_modules/@aws-sdk/middleware-recursion-detection
288K	node_modules/@aws-sdk/middleware-sdk-s3
 36K	node_modules/@aws-sdk/middleware-ssec
104K	node_modules/@aws-sdk/middleware-user-agent
908K	node_modules/@aws-sdk/nested-clients
112K	node_modules/@aws-sdk/region-config-resolver
 64K	node_modules/@aws-sdk/signature-v4-multi-region
152K	node_modules/@aws-sdk/token-providers
500K	node_modules/@aws-sdk/types
 36K	node_modules/@aws-sdk/util-arn-parser
228K	node_modules/@aws-sdk/util-endpoints
 36K	node_modules/@aws-sdk/util-locate-window
 68K	node_modules/@aws-sdk/util-user-agent-browser
 84K	node_modules/@aws-sdk/util-user-agent-node
100K	node_modules/@aws-sdk/xml-builder

尝试安装 @aws-sdk 下所有包,这个大小似乎能和 batchor 发的对上

npm search @aws-sdk --json | jq -r '.[].name' | xargs npm install
du -sh node_modules/@aws-sdk/
 12M	node_modules/@aws-sdk/
  1. tencentcloud-sdk-nodejs

再看下 #166 说的 "比如只安装 CVM 的包:https://www.npmjs.com/package/tencentcloud-sdk-nodejs-cvm" 大小

npm i tencentcloud-sdk-nodejs-cvm
du -sh node_modules/tencentcloud-sdk-nodejs-cvm
832K	node_modules/tencentcloud-sdk-nodejs-cvm

内容

ls node_modules/tencentcloud-sdk-nodejs-cvm
LICENSE            index.d.ts         node_modules       prettier.config.js src                tsconfig.json
README.md          index.js           package.json       products.md        tencentcloud       typings

这不挺正常的吗,也没有 CHANGELOG 或者 test 文件。

注意: 此时 cvm 子模块版本, 4.0.1018 • Public • Published 12 days ago, 并不是更新后去掉了 CHANGELOG 或者 test 文件。

说明,子模式打包是去掉了无用文件,只是总包文件打包的配置没有像子模块打包那样配置。

那些问候父母的是不是应该道个歉呢?

Q: 那用户自己能找到自己需要的子模块吗?

现在的 README.md 已经优化过了,我们来到 release 4.0.1021, commit 595f609 , 搜索 README.md ,发现确实也有提到,详见 README.md?plain=1#L23

但是,咱就是说,这个确实太不显眼了,当然这里现在已经修改了

最后,希望大家能有正确分辨信息的能力,不要听风就是雨。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions