您当前位置: 南顺网络>> 官方资讯>> 建站知识

抛开 Vue、React、JQuery 这类第三方js,我们该怎么写代码?

第三方js的现状

无论是新入行的小白还是有经验的程序员,前端圈里的人一定听过这类第三方js的大名。一方面是因为它们实在太火了:

  • 各种文章对框架进行对比、源码解析以。

  • GitHub 上 star 数量高速增长。

  • 各种针对框架的培训课程层出不穷。

  • ……

另一方面是因为用它们开发非常方便:

  • 利用脚手架工具几行命令就可以快速搭建项目。

  • 减少大量的重复代码,结构更加清晰,可读性强。

  • 有丰富的UI库和插件库。

  • ……

但是一则 GitHub 放弃使用 JQuery 的消息让我开始思考:

第三方js除了带来便利之外还有哪些副作用?抛弃第三方js我们还能写出高效的代码吗?

第三方js的副作用

雪球滚起来

如果现在让你开发一个项目,你会怎么做?假设你熟悉的是React,那么用可以用create-react-app快速搭建一个项目。

  • 很好,react、react-dom、react-router-dom 已经写入了package.json,不过事情还没完。

  • http请求怎么处理呢?引入axios吧。

  • 日期怎么处理?引入 moment 或 day 吧。

  • ……

要知道,这种“拿来主义”是会“上瘾”的,所以第三方依赖就像一个滚动的雪球,随着开发不断增加,后所占体积越来越大。如果用 webpack-bundle-analyzer 工具来分析项目的话,会发现项目代码大部分体积都在node_modules目录中,也就意味着都是第三方js,典型的二八定律(80%的源代码只占了编译后体积的20%)。

类似下面这张图:

于是不得不开始优化,比如治标不治本的code split(代码体积并没有减小,只是拆分了),比如万试万难灵的 tree shaking(你确定shaking之后的代码都只有你真正依赖的代码?),优化效果有限不说,更糟糕的是依赖的捆绑。比如ant-design的模块的日期组件依赖了 moment,那我们在使用它的时候moment就被引入了。而且我即使发现体积更小的 dayjs可以基本取代moment的功能,也不敢引入,因为替换它日期组件会出问题,同时引入又增加了项目体积。

有些第三方js被合称之为“全家桶”,这种叫法让我想起了现在PC端的一些工具软件,本来你只想装一个电脑管家,结果它不断弹窗提示你电脑不安全,建议你安装一个杀毒软件,又提示你软件很久没更新,提示你安装某某软件管家…..本来只想装一个,结果装了全家。


编辑:--ns868