本周继续就前端之变阐述自己的思考。
前面我讲了前端的一些变化,但是事实上,过去数年,前端不仅是在自己的技术方向发生了巨大的变化,它试图向所有技术方向发起进攻,取代其主流技术。那这一切又是怎么回事,现状如何?
本篇为前端之变系列的第四篇:进击的前端,本系列其它文章:
- 前端之变(一):技术的变与不变
- 前端之变(二): "不变"的前端
- 前端之变(三):变革与突破
全方位的进攻
如果我们再回顾过去几年技术的发展历程,我们会发现,前端的变化绝不仅仅体现在前端这一个方向本身,以JavaScript为核心语言的前端不仅在网页编程方面生了变革与突破,更有意思的是它向其它方向去突破与发展,试图去占领本不属于自己的领域
后端开发--NodeJS
在我印象中,我还在做架构师,使用Java做后端开发时候,NodeJS那段时间非常流行。
当时我并不太清楚这个技术的相关细节,只是简单的知道可以使用JavaScript语言从事后端开发,也就是现在Java所做的事。甚至有一段时间,整个业界对NodeJS非常推崇。
有可能是因为它的事件循环机制远比传统线程阻塞的Java高效,也有可能是因为它不需要后端Java程序员,只需要前端工程师?还是也有可能是其它我并不知道的原因,反正那一段时间大家对它非常认可,包括一些主流的互联网公司。
有一种它真的能取代Java的感觉。
移动端开发--React Native
不仅是在后端,前端还把它的触角伸向了移动开发。
在我们技术这个领域,始终存在一种对抗与冲突,就是原生开发与跨平台开发。只要在有多个原生开发的地方,就一定有试图跨平台的开发的技术出现。
而这个现象在移动端特别突出。因为我们当前仍然处于移动优先的现状中,大家对移动技术的各种尝试永远不会停止。
在移动端跨平台开发技术领域中,前端再一次发起了进攻,Facebook基于它的React,整了一个React Navite技术,用JavaScript React的理念构建一个解决移动端开发的跨平台开发。
这一次,JavaScript向移动开发发起了进攻。
桌面开发 -- NW.js与Electron
如我前面所讲,只要在有原生开发的地方,就会有跨平台开发的技术出现。
同样的现象也出现在桌面开发。
过去,由于Window一家独大,桌面开发也只需要考虑它,因此也没有太多跨平台的需要。
但是随着iOS的兴起,连带Mac OS系统的在一些专业行业的兴起与流行,比如编程与设计,Linux桌面也一同缓慢发展。在这种背景下,再加上JavaScript本身发展的能力,使它具备了发展出一种跨平台的桌面开发技术。
因此,跨平台桌面开发技术--NW.js与Electron就出现了。
这一次,前端技术向桌面开发发起了进攻的号角。
突破与挫折
如果我们把眼光扩大到整个技术,我们会发现,没有任何一个技术可以与前端的这种全方位的进攻相比较,也没有第二个技术能做到这个地步。
很显然,所有这一切,都是突破性的,我们不得不承认它带来了全新的技术方案,虽然前端在各个方向的发展现状各有不同,甚至是一些方向遇到了挫折,但它这种突破仍然是值得敬畏的,并且上述所有方向的前端提供的解决方案直到现在仍然是可行的。
NodeJS -- 无法取代Java
Java仍然是那个长盛不衰的语言,NodeJS没能取代它。
在后端领域,使用Java仍然是主流的选择,NodeJS在这个领域只能算是提供了一个小众的解决方案,确实有一些使用NodeJS来做后端的项目或产品存在,但与Java相比,不可相比。如果是大规模复杂架构的需求,Java几乎成了唯一选择,NodeJS完全不可取。
React Native -- 处境艰难
虽然我没有真正使用过React Native,但基于我过去实实在在的做过iOS与Android原生开发,也用过React,同时React Native的官方文档我也看过许多遍,我对它的理念与技术实现还是有一定了解的。
React Navite试图让前端人员做移动端开发,但它存在两个致命的缺点:
- 它与Java这种跨平台解决方案不同,它并无一个JVM中间层去屏蔽各个不同的操作系统,提供统一的API或体验,而是翻译成不同的操作系统的原生实现。这种方式带来了非常多的细节问题。使用React Native,你很难忽略原生的存在。而前端人员与移动端原生技术存在明显错位与无力。
- 它在性能上与真正的原生始终存在差距,就像一道无法越过的鸿沟。当App需要考虑体验与性能时,React Native的这个缺点就会被放大很多倍。
几乎每隔一段时间,就有哪个公司放弃RN,回归原生的新闻,而近些年出现的Flutter技术,采用了与React Native完全不同的策略,它提供了一个『中间层』,如同JVM一样,试图完全屏蔽原生的存在。
React Native的现状用一句话来形容就是:前行艰难,后有追兵
NW.js 与 Electron -- 性价比高的解决方案
NW.js与Electron相对而言,处境就好很多了。
与NodeJS不同,它没有面临Java一样的主流竞争者,在桌面跨平台开发方面,从性价比来考虑,没有比它更好的选择了。
同样,与React Native不同,使用它们,你几乎不用考虑原生系统的存在。它构建于Chromium之上。
除非你对性能有较高的要求,大多数程序使用它们已经足够解决了。它们是性价比最高的解决方案了。
你可能没有意识到,现在很多流行的软件都是基于这种方案而构建
- 前端人员开发工具: Visual studio code -- 如同神一般的存在,它代表着基于此种方案能做到的最好的程度了。
- 早期钉钉客户端,也是基于这种方案来构建
- 微信小程序的IDE
- 迅雷X
还有很多,那些你下载下来发现有几十M到上百M的,又跨平台的,基本你就可以往这方面考虑,它很有可能是基于这种方案做的。
image-20210605101612084
我在20年做的PCX,就是基于Electron的解决方案,我甚至为它编译了一些国产Linux系统的版本,特别是龙芯CPU上的一个版本,令我印象深刻。这说明它跨平台的能力非常强大。
当然 ,这种方案下,能不能做的好,就要看水准与实力了。很多基于这种方案把产品完全做了一个带壳的网页应用,这种就是比较low的表现了。这种我也实实在在的遇到挺多。
Web网页应用与原生应用在思维上存在一个本质区别:
Web数据几乎都是全量加载,每次进入都是从零开始加载数据,而原生应用几乎都是增量加载,每次进入都是增量刷新。应用需要将必要的数据尽量缓存在本地
这是一个标准,通过这个标准你就可以知道你底是做成了一个带壳的网页应用还是一个类原生应用。
这一切是如何发生的
前端的发展是令人惊叹,不仅是前端本身,事实上在所有领域,现在都有前端的身影,它们向所有技术方向发起了进攻。
最开始的前端还只是后端开发的一个附属,后端开发时的页面需要前端人员来实现,事实上,那个时候很多还是后端程序员兼职做的。对比今日之前端,不可同日可语。
前端技术已经变成我们行业不可忽略甚至是值得非常重视的存在了。
所以,我们就不得不发出灵魂式的问题:
究竟是谁,让前端发生了这样的改变?
下一篇继续:前端之变(五):王者的归来