前几天,大学期间的朋友刘畅,跟甄棒说了一件纠结的事:
据说Web前端是高薪行业,可是他该怎么入门?
要使用现代的前端框架,你需要下载开发环境和依赖,编译代码,然后在浏览器上运行。
这个是好是坏?究竟是什么导致了这种不必要的复杂性?是因为我们构建的网站太复杂,还是因为框架本身就很复杂?
从 90 年代以来,Web 开发已经发生了巨大的变化,我们可以做到出非常接近原生应用的体验,而开发流程也变得与以前不一样。
对于 Web 前端开发人员来说,那种只需打开记事本,输入几行代码,在浏览器中运行,然后上传到 FTP 文件夹的日子已经一去不复返。
01.
过去的Web前端开发
我必须先说明这个显而易见的事实:世界已经不像 10 年前那样。唯一不变的是变化。那个时候,我们只有少数的几种浏览器,但是存在很多兼容性问题。
我们现在有更多的浏览器,但更少的兼容性问题。为什么?因为 jQuery。
jQuery 提供了一个标准的通用库来操作 DOM,无需操心它在每个浏览器以及同一浏览器不同版本上是如何运行的——兼容性问题在 2000 年代是开发者的噩梦。
现在的大部分浏览器都提供了标准的方式来操作 DOM,因此近年来对这种通用库的需求大大减少了。
我们不再需要 jQuery,但仍然可以找到一些非常有用的插件依赖了 jQuery。
换句话说,Web 框架可能不是必需的,但仍然很有用。这是大多数 Web 框架的共性,从 React、Angular、Vue 和 Ember,到样式模型(如 Bootstrap)。
02.
为什么人们要使用框架
使用 Web 开发框架有哪些好处,它们有什么独特的地方?
时间就是金钱。客户可能不会关心你使用的是哪个框架,他们只关心结果,而且越快越好。
现成的框架让你从一开始就有一种进度感,而这恰恰是客户所希望的。此外,你开发得越快,赚的钱就越多,因为使用框架节省下来的时间可以用来做更多的项目。
社区的支持。在选择框架时,这是非常重要的一点——当你遇到问题时可以找谁帮忙?
到了某个时候,你需要做一些框架本来不打算做的事情,或者框架不让你使用某些功能,这个时候就要求助社区。
这个时候开发陷入了困境(特别是对于自由开发者来说),因为你现在处在一个虚拟的世界中,如果你是团队中唯一的前端开发人员,也就意味着你是唯一能够找到解决方案的人。
但是,如果你使用的前端框架有强大的社区在支持,那么在世界另一端可能会出现另一个解决过相同问题的人,他们可以帮助到你。
你有没有注意到,当你在阅读自己写的代码时,是不是觉得很容易就看懂?或者至少比看其他人的代码更容易?
因为你有自己的思考方式,有自己的命名和组织代码的方式。从你安装框架的那一刻起,它们就引导你按照某种特定的方式思考和编码。
你不需要花时间和团队一起制定标准,只需要遵循框架提供的标准就可以了,这让团队合作变得更加容易。
如果你要查找某个函数,很容易就能找到它,因为你知道它一定存在于某个文件中。
03.
当框架失效时
几年前,如果有人说,“我不使用框架,我看不到框架能够给我带来真正的好处”,那么肯定会有一伙人带着火把和叉子来到你家门口。
但是今天,越来越多的人在问自己:“为什么我要使用框架?我真的需要它们吗?难道不使用框架就真的很难写好代码?“
如果你是众多从来没有想过不使用框架编程的人当中的一员,那么我不得不告诉你一些残酷的事实。
“一刀切”的解决方案是一个谎言。你能够想象开发一个可以解决所有问题的软件是怎样的一种体验吗?这是 Web 开发框架的主要问题之一。
如果项目有特殊的需求,我们倾向于通过添加库或插件来扩展框架。
没有任何一个框架能够 100% 满足你的需求,没有任何一个框架提供的所有东西对你来说都是有用的。
加载太多用不到的代码会导致更多的延迟。另一个问题是,“一刀切”的思维方式导致代码效率低下。
举个例子,jQuery 中的 $(‘sku-product’).html(’SKU 909090’); 最终需要被翻译为chengdocument.getElementById(‘sku-production’).innerHTML='SKU 909090’;。
当然,像这样一两行的代码差异似乎不算什么,但在 React 中,为了渲染变化的页面元素,
它需要创建整个 DOM 表示,并分析发生变化的部分。而如果从一开始就瞄准想要改变的内容是不是更容易?
你走过的杂草丛里藏着荆棘。你是否曾经遇到过这样的情况,当你尝试在框架中加入一个库时,发现这个版本的库与这个版本的框架不能放在一起使用?
有时候为了让它们能够放在一起使用,需要花费很多的精力,还不如自己写代码把问题解决了。
而且,由于你所使用的框架和库通常建立在其他框架和库之上,而这些框架和库可能存在不可预料的兼容性问题。
所以问题可能会呈指数级增长,变得更加复杂,从而达到无法收拾的地步。
与时俱进也是一个问题。即使你只使用一个前端框架,当一个新的主要版本发布时,也可能会发生很大的变化,以至于你之前费劲写好的代码无法在新版本上运行。
它们可能只是一些烦人的小变化,但你却不得不在大量文件上重写代码。
跟上框架的更新步伐是件相当有挑战性的事情,但同样的,框架完全停止更新或无法跟上技术发展的趋势,也会带来很大的麻烦。
AngularJS 和 Backbone 初始版本都是在 2010 年发布的,今天,Angular 已经成为推出了第 5 个大版本,但却没有人关注 Backbone。
如果你把赌注压在错误的框架身上,可能会让公司陷入一个艰难的境地,最终不得不重新来过。
当你手里握着一把锤子,一切看起来都像钉子。如果你经常使用 Web 框架,可能就会遇到这种情况。
比方说,你想要使用 Framework X 来构建一个类似 YouTube 这样的平台。你决定在这个平台上使用 Flash 播放器,尽管这在现在听起来很荒谬,但这是框架提供的,你就随它去了。
框架本身提供了非常强烈的约束,例如,React 强制你以特定的方式使用 JSX。那么我们有其他选择吗?
有是有,但是很少有人用,虽然说这并不总是一件坏事,但如果你需要运行复杂的动画,可能只需要一个动画框架,而不是整个 React。
原文链接: 取得高薪offer的Web前端框架:是解药还是毒药?
作者:前端之巅