主頁 > 後端開發 > 前端之變(終):前端的未來

前端之變(終):前端的未來

2021-11-03 08:15:28 後端開發

若干年前,一位程式員做過一個預測:

Any application that can be written in JavaScript, will eventually be written in JavaScript. (任何可以用 JavaScript 來寫的應用,最終都將用 JavaScript 來寫)

某種程式上來說,它可能是一個事實,JavaScript已經參與到應用級技術方向的各個方面,在后端,移動端,桌面端都存在它的身影,甚至連mongo shell都是支持JS語言的,

但坦率的說,這些也并非一帆風順的事情,

本周,將進入前端之變的最終章,談論我對前端技術發展的一些個人的思考與分析,本周為前端之變的最終篇,前七篇分別是:

  1. 前端之變(一):技術的變與不變
  2. 前端之變(二):不變的前端
  3. 前端之變(三):變革與突破
  4. 前端之變(四):進擊的前端
  5. 前端之變(五):王者歸來
  6. 前端之變(六):引領式變革,從命令式UI到宣告式UI
  7. 前端之變(七):前端的困境

在本篇中,我將試圖就以下問題做出回答:

  • 前端技術是否能成為后端的主流?
  • 前端技術是否能成為移動端的主流?
  • 前端技術是否能成為桌面端的主流?
  • 前端技術未來獨特的優勢是什么?

宣告

所有觀點僅為個人觀點,我希望觀點能引發你的思考,而不是引發對立的情緒或無意義的爭吵,

如果你看了我的觀點,認為它不對,然后自己能思考自己認為正確的觀點是如何,這就表示我這篇文章是非常有價值的,

前端技術在后端

NodeJS的火爆與好評,我在若干年前就有所感受,那時候我還只是個用Java做后端的架構師,

一個最簡單的問題是:NodeJS是否能取代Java成為后端的主流或另一種可選項?

我的意見是:

前端技術幾乎沒有可能在后端成為主流

那個不討人喜愛的Java,從未被撼動

Java這門語言很多人不喜歡,特別是很多優秀的程式員覺得它很一般,這是事實,

所以,其實不只是NodeJS,這些年來,在后端,試圖挑戰Java的多了去,類似動態JVM的語言Scala,Groovy試圖取代Java,它們都提供了Java不具備的很多語言特性,比如Scala,函式式的風格極受好評,優秀的程式員特別喜歡這樣的語言,還有類似Google的GO語言,對Java也造成了一定的挑戰,

但很可惜,包括NodeJS在內的上述這些,皆沒有成功取代Java成為主流,

其實這些語言各有特性與優點,可能Java與它們相比,確實很不出彩,但包括NodeJS在內的眾多語言,始終有兩個特性無法與Java語言相抗衡的,

  1. Java簡單易學,這使得基本Java語言構建一個團隊的成本較低,這是一個很重要的優勢,現在幾乎所有專案,都是團隊活動,國內的互聯網基本還處于依靠堆人的階段,選擇Java是最符合現狀的,
  2. Java的生態過于強大,雖然包括NodeJS,Scala類似的語言有很多獨特的做點,但在生態上完全無法與Java抗衡,現在不是二三十年前,隨便一個專案或產品都涉及到一大堆特性,存盤,分布式,快取,定時任務,集群等,Java在這些方面幾乎有著其它語言難以匹敵的生態,

再回過頭來,說下NodeJS本身的缺陷:

  1. JavaScript不是一個面向物件的語言,做為NodeJS的語言,它在復雜業務前面幾乎沒有優勢可言,也就是在應付復雜的業務及專案上,遠不及Java,而后端就是復雜的所在地,后端就是用來處理復雜業務的,
  2. 它的異步事件回圈機制確實是個極大的優勢,但這也不是非常出彩的點,其實以Java為主的后端生態也有類似的解決方案,比如Spring WebFlux,還有我用的vert.x等,同樣是異步機制,其性能還優于NodeJS,但這些本身也沒成為主流,因為連它們都無法與Java的同步執行緒阻塞的生態抗衡,在考慮生態等各方面因素下,大多數團隊還是會選擇Java傳統模式,

因此,我認為一個顯而易見的結論就是:

JavaScript語言下的NodeJS在后端無法成為主流,但它會成為另一個小眾的選擇方案

前端技術在移動端

移動端的技術呈現五花八門的發展趨勢,我曾經專門寫過一篇解讀文章,有興趣的可以閱讀下:

企業移動化資訊建設的一些思考(二)移動開發技術發展

但總體說來,前端技術在移動端的趨勢是:

以前端技術為核心的開發方式在移動端越來越成為主流方式

前端技術參與到移動端的方式主要有以下幾種:

  1. 網頁的方式
  2. App開發,以React Native為主
  3. Hibird的模式,以Cordova為代表
  4. 小程式,依賴于微信,支付寶等的生態

事實上,上述幾個方向的開發,越來越被前端技術占據,在它們的沖擊下,原生移動開發將越來越少,

雖然,React Native有式微之勢,它在對抗原生開發前并未取得優勢,而且還面臨類似Flutter的挑戰,但如果我們把目光放到整個前端就會發現,App開發本身就存在式微的趨勢,而以H5,小程式在慢慢成為業務在前端的主要實作方式,

這是因為:開發與推廣一個原生App的成本越來越高,越來越難,

原生App總體呈現數量下降的趨勢,并且可能未來會更明顯,

image-20210710095047367

從中國互聯網路發展狀況統計報告2020報告上可以知道,國內App數量在2018年達到頂峰,隨后越發呈現下降的趨勢,明顯受到小程式等的生態的影響,

所以,移動端的開發人員,面臨非常嚴峻的形勢,雖然它不可能會消亡,但后面原生越來越會往平臺或H5的承載體方向發展,這是一個已經存在的趨勢,

前端技術在桌面端

以NW.js和Electron為代表的前端技術的出現,意味著前端技術現在也出現在的桌面端中了,

它會成為桌面開發的主流嗎?

它不會成為桌面開發的主流,但它意味著一個極具性價比的可選方案出現,會越來越多的出現使用這種方案的桌面應用

Snipaste_2021-07-10_10-03-23

我在2020年開發的PCX,幾乎支持所有作業系統,甚至是國產ARM Linux系統等,

以NW.js和Electron前端技術為代表的桌面解決方案,是個非常具有性價比的方案,它具有一些獨特的優勢:

  • 它開發出來的東西是跨平臺的,意味著開發一次,支持Window,Linux以及Mac系統
  • 它減少了開發桌面端對開發人員的要求,與尋找原生Win或Mac程式員相比,前端人員顯然更好找,

當然,它在軟體體積,對記憶體占用,還有以Web為主的UI畢竟不適合一些專業的場景,比如游戲等,再加上在作業系統上,Windows才是主流,Mac與Linux始終是少數,跨平臺的考慮并不是剛需,意味著它不太可能成為主流,

類似的東西其實越來越多,只是大多數人沒有感知而已,國內我就隨便說幾個:

  • 阿里云盤是基于Electron的解決方案
  • 飛書使用了Electron技術

阿里云盤幾乎是完全使用的Electron

在這里插入圖片描述

飛書中也有Electron的存在

image-20210710101446478

前端獨特的優勢

好吧,接下來說我對前端未來最有可能發展的一個趨勢,就是前端技術具備其它技術所不具備的幾個特性,這決定它在某些方面將具有獨特的優勢,是其它技術不可比擬的,

前端是直面用戶的第一媒介

與后端不同,前端的東西基本是直面用戶的,比如網頁,小程式或桌面應用等,用戶使用這些東西時,基本就是使用前端技術編碼出來的東西,

而后端則更多的是支撐,不管后端的技識訓框架多么優秀或性能多么好,用戶并不直接使用它們,也基本感知不到,它是背后起到支撐的作用,

前端程式員最接近全堆疊程式員

想像下吧,我們拋開團隊來說,哪一端的程式員最有可能獨立做出一個完整的產品?

當然是前端程式員了,他們可以使用NodeJS撰寫后端服務,再撰寫H5網頁,或使用小程式,React Native撰寫一個移動端的產物,

想下這種場景,是不是只有前端程式員最具這種可能性?

這會產生一個什么樣的后果 ?

擁有這兩個優勢的前端,就會形成其它技術形容不了的兩個重要趨勢:

前端技術的產物更具有直接使用價值,而非支撐的東西

事實上,這不是趨勢,已經成為一個事實了,

很多程式員,包括后端程式員,使用的一些有名的產品,都是前端技術的杰作,但可能大家都沒意識到:

比如:

  • 最有名的博客系統hexo,是前端技術
  • GitBook,允許你快速的撰寫一本電子書
  • docusaurus,Facebook出的一個讓程式員快速生成自己產品網站的開源產品,我的 https://myddd.org 就是基于它而構建的,使用它,基本你不用關心網站如何設計與構建,
  • Gatsby是一個基于React ,用于搭建靜態站點的開源框架,我的 https://taoofcoding.tech 就是基于它而構建的,

可以預料的是,在前端技術的支撐下,類似的杰出的東西只會越來越多,也就是前端會產生越來越多具有直接使用的價值品,而不是和后端一樣,更多的是一些支撐框架,

前端技術將是個人英雄輩出的最可能方向

如我上面所述,如果不依賴團隊,當一個程式員有了一個idea,想獨立去實作這個想法,構建一個產品,那誰最有可能獨立做到這個事情?

當然是前端程式員了,他們有能力使用自己的技術幾乎去構建每一個方向的產品,無論是后端服務,還是網頁,或移動端App,他們幾乎都能依靠自己的技術實作,而不是去組建一個團隊,

想像下,當后端程式員為如何構建網頁與移動App而發愁時,移動端程式員為如何構建一個后端服務與網頁而無從下手時,只有前端程式員是不用為這些事發愁的,對吧,

因此,他們將大有可為,

前端與Serveless及FaaS

現在,我們正在進入云服務時代,與過往的一些基礎設施由自我管理不同,云廠商提供了各式各樣的云基礎設施,再往后我們會進入Serveless的時代,也就是無服務,

無服務并不是真的沒有服務,而是服務由云服務商提供,對于你來說,你只需要關注業務就好,而與Serveless相伴而來的則是FaaS,也就是函式即服務,

而無論是Serveless或是FaaS,NodeJS以及JS等前端技術是最合適的技術,特別是NodeJS的冷啟動時間在毫秒級,遠優于JVM秒級的水準,而對于Serveless來說,按需啟動與停止這個點對于冷啟動時間有非常高的要求,

在這一點上,雖然有一些爭論認為JVM也適合Serveless技術,但從啟動時間上來說,無疑是NodeJS更甚一籌,

我與前端

2015年,我從一個后端架構師,因為一些機緣巧合的原因去從事Android與iOS開發后,2020年,我在技術上再次發生轉變,在幾乎對前端還停留在JQuery那個理解的前提下,獨立主導與開發了PCX這樣一個基于Electron跨平臺桌面應用,它再一次沖擊了我的技術之路,使得我徹底轉變為一個全堆疊程式員,

同樣,前端技術的轉變也令我驚奇,于是我開始構思與準備寫下我對前端技術變化的一些思考與分析,這便是前端之變這個系列的來源,

我明白了一個道理:

新的技術是永恒不斷更新變化的,但本質上,它并沒有太多改變,只是形式變化了,

這些年,從Java,再歷經Object-C,TypeScript,再到Kotlin,Swift這些語言,它使我仿佛進入了一個新的世界,

我希望對所有程式員做出這樣一個建議:

永遠不要只使用一種編碼語言,永遠不要把自己局限在某個語言或方向上,不要定位自己是只能從事某一個方向開發的人,你可以專注與精通某一個方向,但你永遠要去嘗試做那些你覺得你不會的方向

這會讓你對技術的理解有徹底的轉變,開始理解與明白技術真正是什么,

這也是我在2021年開始做微言碼道(https://taoofcoding.tech)的原因所在,如同它的口號一樣:用我們微小的力量傳播編碼之道,

本系列終!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345729.html

標籤:java

上一篇:Java畢業設計-民宿管理系統

下一篇:SpringBoot學習路線總結,跟著路線走,不迷路(附思維導圖)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more