Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美成人在线免费,欧美亚洲黄色,找老女人泻火对白自拍

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          狼叔:Node全棧為前端帶來更多可能

          狼叔:Node全棧為前端帶來更多可能

          擊關注 InfoQ,置頂公眾號

          接收程序員的技術早餐

          嘉賓|桑世龍

          編輯|覃云

          2009 年,Node.js 橫空出世,在幾年時間里,Node.js 憑借其高性能、易部署等特點迅速在前端領域脫穎而出,成為大火的明星。但一個技術再好,也是有生命周期的,許多開發者開始質疑,Node.js 是不是在走下坡路了?Node.js 是不是越來越不吃香了?

          為此,InfoQ 采訪了阿里巴巴前端技術專家、Node 技術傳道者桑世龍(狼叔),為大家解答關于 Node 的問題,以及開發者在日新月異的技術迭代環境中應該如何建立起自己的“大局觀”。以下是采訪的全部內容。

          友情提示:在即將到來的 2018 年 GMTC 大會上,狼叔將擔任 Node 專場的出品人,喜歡狼叔和對 Node 有興趣的讀者千萬別錯過。

          Node 為解決后端并發而生,但卻無心插柳,成為大前端的基石。伴隨大前端的發展,Node 也發展得越來越好,越來越重要,其應用場景從腳手架、輔助前端開發(比如 SSR、PWA 等)的快速開發實踐,到 API 中間層、代理層,到專業的后端開發都有非常成熟的經驗。另外,前端越來越復雜,后端服務化,今日的前端要面臨更多的挑戰,Node 全棧給大家更多可能,狼叔對此堅定不移。

          1 2017 年,Node 的日子好過嗎?

          狼叔主要從以下四個方面介紹了 2017 年 Node 發生的變化:

          • a)Node 8 進入 LTS 時代

          • b)企業級 Web 開發

          • c)不可不見的 Api 中間層

          • d)新領域(深度學習、區塊鏈等)

          a)Node 8 進入 LTS 時代

          2017 年,Node.js 最大的變化是進入 Node 8 時代,它是一個穩定的長期支持版本(LTS),除了性能提升外,還有以下幾個要點。

          • Async/Await 支持。其實在 Node.js v7.6 就可以通過 flag 支持了,在 node8 里直接落地。通過 Async 函數可以更好的進行異步流程控制,遠離 Callback Hell。在 Async 函數里,你可以通過 await 調用 Promise,以及通過 co 包裹的 generator,可以說,向前是完美的 Async 函數,向后也完美兼容各種遺留代碼,稱為異步終極解決方案不為過。

          • ES6 模塊支持。通過 vue/react、webpack、babel 和 typescript 等火爆發展,es6 模塊得到了廣泛普及和應用,在 Node.js v8.5 可以通過 --experimental-modules 來開啟這個體驗版特性。當然,你想在 Node.js 更早版本里使用 ES6 模塊,可以采用 @std/esm 模塊。

          • HTTP2 支持。在 Node.js v8.8 就開始默認啟用了,http2 對服務器端推送,多通道復用等特性,能夠更好地為瀏覽器便利,是性能優化的利器。

          Node v9.9 對 ES2018 支持是 75%,在 Node v10 里支持是 100%,還是非常值得期待的,更多信息參見 http://node.green/#ES2018。

          b)企業級 Web 開發

          基礎框架除了應用最廣泛的主流 Web 框架 Koa 外,Fastify 也是一直勁敵,作者 Matteo Collina 是 Node.js 核心開發,Stream 掌門,性能優化專家。Fastify 基于 Schema 優化,對性能提升極其明顯。狼叔認為這是企業級 Web 開發,他在這里給我們介紹了 3 個知名框架。

          b1)Egg.js

          阿里開源的企業級 Node.js 框架 Egg 發布 2.0,基于 Koa 2.x,異步解決方案直接基于 Async Function。框架層優化不含 Node 8 帶來的提升外,帶來 30% 左右的性能提升。

          Egg 采用的是 『微內核 + 插件 + 上層框架』 模式,對于定制,生態,快速開發有明顯提升,另外值得關注的是穩定性和安全上,也是極為出色的。

          b2)Nest

          Nest 是基于 TypeScript 和 Express 的企業級 Web 框架。

          很多人開玩笑說,Nest 是最像 Java 開發方式的,確實,Nest 采用 TypeScript 作為底層語言,TypeScript 是 ES6 超集,對類型支持,面向對象,Decorator(類似于 Java 里注解 Annotation)等支持。在寫法上,保持 Java 開發者的習慣,能夠吸引更多人快速上手。

          TypeScript 支持幾乎是目前所有 Node Web 框架都要做的頭等大事,在 2017 年 Nest 算首個知名項目,值得一提。

          b3)ThinkJS

          ThinkJS 是一款擁抱未來的 Node.js Web 框架,致力于集成項目最佳實踐,規范項目讓企業級團隊開發變得更加簡單,更加高效。秉承簡潔易用的設計原則,在保持出色的性能和至簡的代碼同時,注重開發體驗和易用性,為 WEB 應用開發提供強有力的支持。

          ThinkJS 是國產老牌 Web 框架,在 2017 年 10 月發布 v3 版本,基于 Koa 內核,在性能和開發體驗上有更好的提升。

          整體來看,Node.js 在企業 Web 開發領域日漸成熟,無論微服務,還是 Api 中間層都得到了非常好的落地。2017 年,唯一遺憾的是 Node.js 在 servless 上表現的不太好,相關框架實踐偏少。

          c)不可不見的 Api 中間層

          前端越來越復雜,后端服務化,今日的前端要面臨更多的挑戰。一個典型的場景就是在服務化架構里,前端面臨的最頭痛的問題是異構 API,前后端聯調的時候,多個后端互相推諉,要么拖慢上線進度,要么讓前端性能變得極其慢。進度慢找前端,性能差也找前端,但這個鍋真的該前端來背么?

          Node.js 的 Api 中間層應用很好地解決了這個問題。后端不想改的時候,實在不行就前端自己做,更靈活,更能應變。

          • 透傳接口,對于內網或者非安全接口,可以采用中間層透傳。

          • 聚合接口,對異構 API 處理非常方便,如果能夠梳理 model,應變更容易。

          • Mock 接口,通過 Mock 接口,提供前端開發效率,對流程優化效果極其明顯,比如去哪兒開發的 yapi 就是專門解決這個問題的。

          除此之外,前端如果想做一些技術驅動的事兒,SSR(服務器端渲染)和 PWA(漸進式 Web 應用)也是非常不錯的選擇。

          d)新領域(深度學習、區塊鏈等)

          • 深度學習,https://github.com/PAIR-code/deeplearnjs

          • 神經網絡,https://github.com/BrainJS/brain.js

          • 區塊鏈,http://truffleframework.com/

          狼叔說他這部分接觸得不多,不過從這些開源項目可以看到有很多開發者熱衷于使用 Node.js 做開發創新,這是非常值得高興的。

          2 如何將 Node 的價值發揮到極致?

          狼叔說過,“不是 Node 不行,而是你不會用”,他認為很多人對 Node.js 有很多誤解,從 2009 年誕生到現在,Node.js 的改變進化是非常明顯的,甚至說是有了質的變化。

          • 比如 Callback hell,現在可以通過 Async 函數解決。

          • 比如作為過渡技術棧的 thunk 函數和 generator,慢慢的消失在歷史舞臺。

          • 比如 node 是單進程非常脆弱,但是你真的部署對了么?

          • 比如數據庫事務問題,這是 node 的鍋么?你用 mongodb 玩不好,也要賴到 node 身上么?

          一般,后端開發指的是 Web應用開發中和視圖渲染無關的部分,但現在架構升級,Node承擔了前后端分離重任之后,有了更多玩法。從帶視圖的傳統Web 應用面向 Api 接口應用,到通過RPC調用封裝對數據庫的操作,到提供前端Api代理和網關,服務組裝等,統稱為后端開發,不再是以往只有和數據庫打交道的部分才算后端,這樣,就可以讓前端工程師對開發過程可控,更好的進行調優和性能優化。

          對 Node.js 來說,一直沒有在后端取得其合理的占有率。原因很簡單:

          • 1)利益分配,已有實現大多是 Java 或者其他語言,基本是沒法撼動的,重寫的成本是巨大的,另外,如果用 Node 寫了,那么那些寫 Java 的人怎么辦?搶人飯碗,這是要拼命的。

          • 2)Node 相對年輕,大家對 Node 的理解不夠,回調和異步流程控制略麻煩,很多架構師都不愿意花時間去學習。盡管在 Web 應用部分處理起來非常簡單高效,但在遇到問題時并不容易排查定位,對開發者水平要求略高。

          • 3)開發者技能單一,很多是從前端轉過來的,對數據庫,架構方面知識欠缺,對系統設計也知之不多,這是很危險的,有種麻桿打狼兩頭害怕的感覺。

          • 4)Node 在科普、培訓、布道等方面做的并不好,國外使用的非常多,國內卻很少人知道,不如某些語言做得好。

          縱覽 2017 年 Node.js 的發展路程,作為一個親歷者,他覺得 Node 在 4 個方面表現得極為突出:

          • 前端實踐,腳手架,工程化,快速開發;

          • API Proxy 中間層實踐,頁面即服務概念;

          • 面向企業開發的 Web 框架;

          • Node 最新技術與性能調優。

          狼叔希望更多的 Node.js 開發者能夠參與其中,本次 GMTC 大會也會圍繞這寫主題進行 topic 篩選,希望能夠為國內 Node.js 的繁榮做出一點貢獻。

          3 如何選擇適合自己的 Node 框架?

          開發者在面對如此多的 Node 框架時,總會眼花繚亂,不知道是該從眾還是應當選擇自己擅長的框架,對此,狼叔是這么說的。

          Web 應用大致分 2 種,帶視圖的 傳統 Web 應用面向 Api 接口應用,而 Node.js Web 應用開發框架的演進時間線大致如下:

          • 2010 年 TJ Holowaychuk 寫的 Express。

          • 2011 年 Derby.js 開始開發,8 月 5 日,WalmartLabs 的一位成員 Eran Hammer 提交了 Hapi 的第一次 git 記錄。Hapi 原本是 Postmile 的一部分,并且最開始是基于 Express 構建的。后來它發展成自己自己的框架。

          • 2012 年 1 月 21 日,專注于 Rest api 的 Restify 發布 1.0 版本,同構的 Meteor 開始投入開發,最像 Rails 的 Sails 也開始了開發。

          • 2013 年 TJ Holowaychuk 開始玩 es6 generator,編寫 co這個 Generator 執行器,并開始了 Koa 項目。2013 年下半年李成銀開始 ThinkJS,參考 ThinkPHP。

          • 2014 年 4 月 9 日,Express 發布 4.0,進入 4.x 時代持續到今天,MEAN.js 開始隨著 MEAN 架構的提出開始開發,意圖大一統,另外 Total.js 開始起步,最像 PHP 里 Laravel 或 Python 里的 Django 或 ASP.NET MVC 的框架,代表著 Node.js 的成熟,開始從其他語言里的成熟框架借鑒。

          • 2015 年 8 月 22 日,下一代 Web 框架 Koa 發布 1.0,可以在 Node.js v0.12 下面,通過co和 generator 實現同步邏輯,那時候co還是基于thunkfy的,在 2015 年 10 月 30 日,ThinkJS 發布了首個基于 Es2015+ 特性開發的 v2.0 版本。

          • 2016 年 09 月,螞蟻金服的 Eggjs,在 JSConf China 2016 上亮相并宣布開源。

          • 2017 年 2 月,下一代 Web 框架 Koa 發布 v2.0 正式版。

          • 2017 年 10 月,ThinkJS v3 發布,基于 Koa 內核。

          • 2017 年 12 月,阿里巴巴開源 Egg.js v1,采用的是 『微內核 + 插件 + 上層框架』 模式。

          • 2018 年 3 月,阿里巴巴開源 Egg.js v2,全面支持 async 函數,性能提升 30% 以上。

          我們根據框架的特性進行分類:

          對于框架選型

          • 業務場景、特點,不必為了什么而什么,避免本末倒置;

          • 自身團隊能力、喜好,有時候技術選型決定團隊氛圍的,需要平衡激進與穩定;

          • 出現問題的時候,有人能夠做到源碼級定制。Node.js 已經有 8 年歷史,但模塊完善程度良莠不齊,如果不慎踩到一個坑里,需要團隊在無外力的情況能夠搞定,否則會影響進度。

          個人學習求新,企業架構求穩,無非喜好與場景而已。

          Node.js 本來就為了做后端而設計的,這里我們再看看利益問題。Node.js 向后端延伸,必然會觸動后端開發的利益。那么 Proxy 層的事兒,前后端矛盾的交界處,后端不想變,前端又求變,那么長此以往,Api 接口會變得越來越惡心。后端是愿意把 Api 的事兒叫前端的,對后端來說,只要你不動我的數據庫和服務就可以。

          但是 Node.js 能不能做這部分呢?答案是能的,這個是和 Java、PHP 類似的,一般是和數據庫連接到一起,處理帶有業務邏輯的。目前國內大部分都是以 Java、PHP 等為主,所以要想吃到這部分并不容易。

          • 小公司,創業公司,新孵化的項目更傾向于 Node.js ,簡單,快速,高效;

          • 微服務架構下的某些服務,使用 Node.js 開發,是比較合理的。

          國內這部分一直沒有做的很好,所以 Node.js 在大公司還沒有很好的被應用,安全問題、生態問題、歷史遺留問題等,還有很多人對 Node.js 的誤解。

          • 單線程很脆弱,這是事實,但單線程不等于不能多核并發,而且你還有集群呢!

          • 運維,其實很簡單,比其他語言之簡單,日志采集、監控也非常簡單。

          • 模塊穩定性,對于 MongoDBMySQLRedis等還是相當不錯,但其他的數據庫支持可能沒那么好。

          • 安全問題是個偽命題,所有框架面臨的都是一樣的。

          這些對于提供 Api 服務來說已經足夠了。

          對于企業 Web 開發來說,更重視穩定性和安全性,通過約定開發方式,提供高效開發效率。目前 Egg、Thinkjs、Nest 這方面是先行者,想必開發者對它們都已經非常熟悉了,可以放心使用。

          4 “向前看” or “向錢看”?

          生活無非是迷茫的和目標清晰的。迷茫的人想找到目標是非常曲折的一個過程,所以最簡單的辦法就是“向錢看”,市場作為檢驗技術流行程度的一個標準。沒有目標,那就多學點能賺錢的技能。

          很多人度過了迷茫期,這時候就需要“向前看”,知道自己想要什么,只能自己該做什么,有自驅能力,這時候更多的是看清趨勢,在變化中總能做對事情,除了做好的分內之事外,無論業務還是技術發展都需要對發展走勢做出正確的判斷。

          對于 Node.js 開發者來說,

          1)“向錢看”:學會,能用,如果學會 Node.js 不能在收入或者潛在收入有提升,那也沒啥意思。

          Node.js 編寫的包管理器 npm 已成為開源包管理了領域最好的生態,直接到 2017 年 10 月份,有模塊超過 47 萬,每周下載量超過 32 億次,每個月有超過 700 萬開發者使用 npm。現在早已經超過 60 萬個模塊了。在此,狼叔舉了一個例子,他說曾有開發者向他討教調整狀態的辦法,而狼叔的建議是,讓他每天看 10 個 npm 模塊。

          狼叔認為,對于學習 Node.js 迷茫的人來說,這是最好的方式,當你不知道如何做的時候,就要向前(錢)看,你要知道積累哪些技能對以后有好處。對于學習 Node.js 必經之路,一定是要掌握很多模塊用法,并從中汲取技巧、思路、設計思想的。與其不知道學什么,為什么不每天積累幾個技巧呢?

          2)“向前看”:用好,創造更多價值。各家公司都有 KPI,怎么能夠通過 Node 快速達成自己的 KPI 是非常重要的。

          • a)遇到各種問題,解決不了,能不能用 node?

          • b)技術驅動,能不能在 node 層做一些創新?

          • c)提高開發效率,能否讓團隊用好 node,梳理出工程化最佳時間。

          • d) 在遇到性能瓶頸的時候,node 能否解決這些問題。

          對此,狼叔給出了他的招人標準:

          • 基本的 Node.js 幾個特性,比如事件驅動、非阻塞 I/O、Stream 等;

          • 異步流程控制相關,Promise 是必問的;

          • 掌握 1 種以上 Web 框架,比如 Express、Koa、Thinkjs、Restfy、Hapi 等,會問遇到過哪些問題、以及前端優化等常識;

          • 數據庫相關,尤其是 SQL、緩存、Mongodb 等;

          • 對于常見 Node.js 模塊、工具的使用,觀察一個人是否愛學習、折騰;

          • 是否熟悉 linux,是否獨立部署過服務器,加分項;

          • js 語法和 es6、es7,延伸 CoffeeScript、TypeScript 等,看看你是否關注新技術,加分項;

          • 對前端是否了解,加分項;

          • 是否參與過或寫過開源項目、技術博客,加分項。

          “向前看”不是簡單在一個領域內鉆研,而是能夠在精通一門之后,擴展廣度,提高自身的解決問題能力。當然,如果能夠在架構層面去思考問題,那就更完美了,對未來職業發展有無限好處。

          5 “專注” or “技多不壓身”?

          狼叔對自己的定位是專注于 Node.js 技術,如果沒法做更多 Node.js 相關的內容,不如就離開,但這是不是意味著與“技多不壓身”的觀點相悖呢?對此,狼叔是這么解釋的。

          《Node.js in action》一書里說,Node.js 所針對的應用程序有一個專門的簡稱:DIRT。它表示數據密集型實時(data-intensive real-time)程序。因為 Node.js 自身在 I/O 上非常輕量,它善于將數據從一個管道混排或代理到另一個管道上,這能在處理大量請求時持有很多開放的連接,并且只占用一小部分內存。它的設計目標是保證響應能力,跟瀏覽器一樣。

          這話不假,但在今天來看,DIRT 還是范圍小了。其實 DIRT 本質上說的 I/O 處理的都算,但隨著大前端的發展,Node.js 已經不再只是 I/O 處理相關,而是更加的“Node”!

          Node.js 使用場景主要分為 4 大類:

          • 1)跨平臺:覆蓋你能想到的面向用戶的所有平臺,傳統的 PC Web 端,以及 PC 客戶端 nw.js/electron、移動端cordova、HTML5、react-nativeweex,硬件http://ruff.io等。

          • 2)Web 應用開發:網站、Api、RPC 服務等。

          • 3)前端:三大框架 React \ Vue\Angular輔助開發,以及工程化演進過程(使用Gulp/Webpack 構建 Web 開發工具)。

          • 4)工具:npm上各種工具模塊,包括各種前端預編譯、構建工具Grunt/Gulp、腳手架,命令行工具,各種奇技淫巧。

          可以說目前大家能夠看到的、用到的軟件都有 Node.js 身影,當下最流行的軟件寫法也大都是基于 Node.js 的,比如 PC 客戶端 luin/medis 采用 electron打包,寫法采用 React + Redux。他一直實踐的【Node 全棧】,也正是基于這種趨勢而形成的。在未來,Node.js 的應用場景會更加的廣泛,更多參見 sindresorhus/awesome-nodejs。

          狼叔親歷了從 node 0.10 到 iojs,從 node4 到目前的 node9,也寫了很多文章,參加很多技術大會,做過很多次演講,有機會和業內更多高手交流的機會。當然他也從 qunar 到阿里經歷了各種 node 應用場景,對于 node 的前景他是非常篤定的。正如上文所說,善于使用 node 有無數好處,如快速出成績、性能調優、優化團隊結構、人員招聘等諸多利好,讓他堅定地守護 Node.js。

          Node.js 目前的應用場景和招聘市場都是極大的,很多公司都使用 Node.js,阿里、騰訊、百度和去哪兒等,還有青島的海爾集團這樣的傳統名企,video++、石墨文檔這樣的創業互聯網公司,Node 產生的商業價值是無法估量的。

          狼叔的定位是 Node 全棧,以大前端為主,Node 輔助,把所有和用戶直接相關的開發囊括。他認為這是趨勢,他也在自身的經歷中體驗到了好處。而大前端目前沒有形成固定模式,還在混亂發展,所以前景是非常看好的。

          但他認為“篤定 Node”和“技多不壓身”的觀點不沖突,一個前端領域已經足夠復雜,如果是大前端涵蓋得更廣,可謂進可攻退可守。在這種背景下,Node 其實是增加自身附加值的。個人經歷優先,無法覆蓋更多,這樣的定位也算是另外一種專注吧。

          6 大局觀:多思考、多折騰、多更新

          “年輕時死磕,年長點讓小弟死磕,現在抓個專家一起吃飯,沒有什么是一頓飯解決不了的,不行就二頓”,這句話雖然是調侃,但也是實話,每個階段做好每個階段該做的事兒就好。有一句名言說的特別好,“高筑墻,廣積糧,緩稱王”。

          • 年輕死磕是為了長本事,少抱怨,多思考,未來更美好。30 歲以前都可以這樣做。

          • 帶團隊后,要懂得任務下放,讓更多人幫你,別帶人越多越累。

          • 30 歲之后是打牌階段,技能積累足夠用,這時要注重社交,打組合拳才能玩的更好。

          大部分人都會認為 30 歲后事情,壓力會明顯大得多,比如家庭,孩子,房子,車子,票子,甚至是管理,權利,欲望等。對此,狼叔印象最深的是身體不如從前和記憶力明顯下降。

          擁有一個好的大局觀,沒有捷徑,就是多折騰。以前看事情是點,現在看的是趨勢,能夠做到心中有數,自然胸有成竹的感覺。技術發展這么快,作為一個一把年紀的人,每天也需要適當的投入一點精力關注開源,需要不斷的更新自己,才不會讓自己的大局觀過時。

          PWA 技術在阿里體系內是如何實踐及應用、騰訊基于 Cocos 改造 Hybrid 形式產品、騰訊頂級人工智能實驗室的 AI 終端產品實踐、微服務平臺下基于 GraphQL 構建 BFF 的實踐與思考、Vue 服務端渲染在快手直播中的應用...... 更多最新最熱的大前端技術議題即將來襲。

          GMTC2018 上,來自 Google、Facebook、BAT 等 60+ 國內外一線前端大牛,將與你面對面探討大前端領域最新技術趨勢和實踐。掃描下方二維碼或點擊“閱讀原文”解鎖更多大會詳情!

          使是Node的核心貢獻者都開始說,這項技術,雖然很新,并且是被大肆炒作,但是已經開始準備走向頂峰。

          ——沃爾瑪移動通訊工程的副總裁加爾布雷思

          很多前端的小伙伴聯系我說為什么你們飛雀教育的前端可以做整個產品實訓,這不是扯淡么?產品需要前端和后端兩塊,沒有后端只學HTML5前端怎么可以自己做出來產品呢?

          主要是因為它:node.js

          飛雀的課程安排中node.js占了很大比例,講的就是全棧式開發。

          Node就是有這個奇妙的作用,它可以讓很多會前端的同學干到后端,自己搭起一個完整的項目,在前端與后端之間,搭起一座橋梁。讓后端的同學感受到原來前端也是很有趣的。

          有很多人說node太新了,還不夠成熟,是存在很多弊端的。然而電子商務巨頭沃爾瑪當初就是換成Node.js開發,從10臺服務器減少到1臺,震驚了業內。沃爾瑪通過Node,能為客戶端的移動用戶提供非常復雜的服務和功能。它通過識別設備類型和瀏覽器,向購物者提供自定義內容,為移動購物者節約大量的時間。沃爾瑪重新設計了基于Node的移動應用程序后,所有的前后端都在執行一樣的代碼。

          加爾布雷思(沃爾瑪移動通訊工程的副總裁)說,他的團隊希望創造“一個網站,非常豐富并且具有動態感......能夠運行在不是很強大的設備上。”正好node就是有這個魅力能滿足他所有需求。

          我曾經問過一個在沃爾瑪工作的朋友為什么當初沒選擇Facebook,卻選擇了沃爾瑪,他回答,如果可以在沃爾瑪選擇用node開發,我為什么要去Facebook用php開發呢?

          除了外國企業沃爾瑪、paypal、LinkedIn等等,幾乎國內所有的大型公司也都會使用node.js開發,最突出的就是阿里巴巴

          除了node.js本身的就業前景廣之外,飛雀HTML5課程選擇用node.js做全棧式人才培養還因為node.js技術本身的特性。

          首先,數據說明一切。

          第二. Node.js是基于JavaScript的語法,JavaScript不僅可以開發前端,也可以開發后端,實現全棧更容易。

          第三. 由于JavaScript屬于腳本語言,也比較容易學習。

          第四. Node.js效率更高,重事件驅動和異步并發。

          從node.js近幾年在國內外的發展和本身的技術特性可以看出,node.js不是曇花一現,而是未來發展趨勢。

          復合型人才才是社會真正想要的。

          uby on Rails 的衰落是毋庸置疑的,而且今年以來的衰落速度比以往更快。


          先看 Google Trends,雖然不太科學、但至少能說明一點問題。無論是 Ruby 還是 Ruby on Rails,多年來在 Google Trends 都處于一路走低的狀態。



          如上圖所示,二者先是急劇上漲、然后是一路橫盤。但從 2016 年開始明顯下跌后,它們的命運就基本已經注定了。不知道為什么 2020 年這里又有一次斷崖式下降,這可能只是 Google 數據出了問題。但不管怎么說,狀態不好是肯定的。


          十年前,極受追捧


          Ruby 是一種用于面向對象編程的解釋性腳本語言,核心優勢就是允許開發者快速構建并啟動應用程序。Ruby 語言本身采用大量英語單詞,所以上手難度更低。但由于可擴展性不佳,Ruby 應用程序的運行速度往往不及其他語言。


          這門編程語言由 Yukihiro Matsumoto 于 1993 年開始創建,于 1995 年正式發布。雖然和 Java 基本上可以算是同時期(Java 誕生于 1993 年,正式發布于 1995 年),但在 2004 年 David Heinemeier Hansson 發布 Ruby on Rails 之前,Ruby 一直非常小眾。


          Ruby on Rails (也簡稱為 Rails)是一個使用 Ruby 編程語言的開源 Web 應用程序框架,曾一度大受歡迎,Rails 的出現極大的推動了 Ruby 語言的發展。在 2004 年之后,Rails 社區貢獻出了廣泛的插件(Gems)、書籍(光 2006 年就有 10 本關于 Rails 的書籍問世)、培訓、一個主要會議(RubyConf)等等。隨著 Rails 風頭正勁,甚至連最保守的公司都開始考慮采用 Ruby。


          《From Java to Ruby》一書的作者 Bruce Tate,曾是一位 Java 程序員,在當時也變成了一名 Ruby 狂熱分子,他曾在 2007 年提出一個“木馬計(Trojan Horse)”的方法,讓一些領路人在保守的公司里為 Ruby 樹立威望:


          • 先找到一個不那么令人興奮的技術問題。
          • 私底下使用 Ruby 解決此問題,盡可能在管理層發現不了的情況下工作。
          • 創建一個草根階級聯盟,通過培養文化的方式培養 Ruby 布道者。


          “實現一個試點項目,用這個策略來暗度陳倉,在眼皮底下把 Ruby 整合進系統。剩下的工作讓 Ruby 完成就可以了。不過,為了建立你的試點項目,你首先需要創建一個案例,讓 Ruby 看起來足夠吸引眼球,從而讓大家甘心冒這個風險。接著,你得在你的試點策略里面添筋加骨。鑒于人們對采用一門新語言與生俱來的抵抗力,你要選擇一個不給疑慮留任何余地的方法。最終,你得愿意為成功建立制度根基。”


          從 2000 年開始,到該時代中期,Ruby 受歡迎程度在 TIOBE 指數評級中逐漸達到頂峰,人們認為 Ruby 還有它的旗艦級 Rails 框架,可以大大提高生產力。不少現在的大型網站,比如 Twitter 和 Groupon 在當時都是這門框架的使用者之一。


          只不過,人們也逐漸發現它存在一些致命缺陷。Groupon 工程師 Sean McCullough 在 2013 年的一個技術會議上講道,“要在 Groupon.com 整個網頁上更改一種顏色,估計需要三個月的時間。這導致我們無法以需要的速度進行迭代。”


          Groupon 工程師不得不研究 Ruby on Rails 的一系列替代方案,最終選擇了流行的 Node.js,并花了一年時間進行遷移。Groupon 還表示,更換之后頁面加載速度得到了顯著提升,高達 50%。從 2008 年引進,到 2013 年替換掉,Groupon 在這個坑里掙扎了 5 年。而在同一時期,備受擴展性問題困擾后,Twitter 也放棄了 Ruby on Rails。


          現在,Ruby 確實不咋行了


          接下來,讓我們一起從課程、實踐、社區情況來看看當年盛極一時的網紅編程語言發展現狀。


          現在,很多朋友可能注意到,專門的 Ruby 播客或者新聞網站已經越來越少。除了一個每周通訊網站(?https://rubyweekly.com/?)還能保持高質量,其他的真就沒什么了。


          這就突出了 Ruby 語言正陷入惡性循環:因為缺乏好的信息和教程,新手開發者就不愿選擇它;而因為沒有足夠的新人,市場對信息和教程的需求也隨之減少。


          因為在勞動力市場上不被看好,編碼訓練機構 Coding Dojo 決定從 2017 年開始將 Ruby 課程從全美六大學區內盡數撤下,同時增加 Java 的全棧開發課程。Coding Dojo 課程負責人 Speros Misirlakis 曾表示,“我們一直在關注各地市場、把握技術需求,并發現 Java 的人氣位居榜首。相比之下,Ruby on Rails 在招聘熱度、市場需求和開發者關注度等方面都遠遠落后。”


          到現在,以 Udemy 為例,截至 2022 年 3 月,上面只有 109 種關于 Ruby(on Rails)的課程。但 Python、Java 和 JavaScript 等語言的課程量都超過 10000 種。目前質量最高的 Rails 課程之一最后公開更新是在 2020 年。當然,go-rails 等其他服務也在提供相關課程,但 Ruby 衰落的趨勢已經非常明顯。


          十年前,Ruby 背后還有高度活躍的社區,比如 GitHub、熱門 repo。現在情況也發生了變化,支持并使用 Ruby 的開發者越來越少,曾被經常提起的 gems 服務,現在基本屬于無人問津。再舉個典型的例子,Rails 的 Azure 支持。


          對微軟 Azure 的支持狀態可謂一團糟。相關一部分成果無人維護,過去幾年來也毫無動靜。大量問題被提出之后就長期擱置。例如,Azure 官方庫中有 22 個問題仍在開放,其中的依賴性問題大多源自 Nokogiri 庫版本過老。我知道這例子有點極端,但它確實能反映出生存狀態的一個側面。


          最近十年來,現代 SaaS 方案中的 API 幾乎都不提供官方 Ruby 客戶端或 SDK。


          形成鮮明對比的是,Java、JavaScript、Python 甚至是 Rust 可都在支持之列。


          Slack 沒有官方的 Ruby 客戶端或者 SDK(其他語言都有),Dropbox 也一樣。之前提到過,Azure 倒是有,但基本沒有維護。在所有 HubSpot API 實施意見中,Ruby 版本的人氣(根據 stars 和 forks 判斷)和更新頻率都是最低的。像 Monday、Teamleader 或者 Notion 這樣的現代項目管理方案都沒提到過 Ruby。這里要澄清一下,我舉的都是不支持 Ruby 的 SaaS 項目。支持 Ruby 的也不少,從 AWS 到 Square,都提供一流且維護良好的 gems 供用戶選擇。


          雖然沒對 Ruby gems、repo、待解決問題等量化指標做過數據分析,但單是瀏覽一下基本情況就已經看得出相當負面的趨勢。而且從部分 SaaS 服務上看,Ruby 確實不太受待見。


          2010 年時 Ruby 的 SDK 和 API 客戶端都是最亮眼的,之所以出色,是因為當時的 API 與 SaaS 開發團隊往往會自己動手編寫 Ruby 版本,所以客戶端質量自然不在一個層面上。但近年來情況大變,而相應的社區版本要么維護不善、要么壓根沒有。


          關注大型 SaaS 或者軟件公司,我們會發現運行在 Ruby(on Rails)上的成果基本都有點年頭了。


          特別是在 2020 年之后,已經很難找到任何立足 Rails 構建的成功 SaaS 產品。GitHub 誕生在 2008 年,Shopify 是 2006 年,Twitter 是 2006 年,Groupon 是 2008 年,Zendesk 是 2007 年,Airbnb 是 2008 年,Fiverr 則是 2010 年。我能想到的誕生于 2010 年之后、而且運行在 Ruby 或 Rails 上的成功廠商就只有 Stripe(2011 年)和 Gitlab(2014 年)。在比較流行的 Ruby 開源項目方面,我能想到的也只有 Discourse 和 Mastodon。但這里確實也有幸存者偏差的因素:成功的企業需要經歷漫長的磨練才會顯露,所以不管用不用 Rails,成功的 SaaS 都得用時間證明自己。


          2010 年那會 Rails 的成功催生出使用模型視圖控制器(MVC)架構建立快速應用開發(RAD)框架的市場需求。可以肯定地說,Rails 這類框架確實擁有比較明確的市場定位,但還不至于火到那個程度。這些架構的解決能力和適用范圍都比較差,所以無論使用哪種語言,Rails 本身的流行度下降甚至在根源上來自 MVC 和 RAD 方法的逐漸衰落。


          2021 年 StackOverflow 的調查結果也支持了這樣的判斷:Ruby 與 Rails 在各項評比中基本都處于象限底端。Ruby 得到的“贊”和“踩”基本相當。很遺憾,StackOverflow 并不提供可供訪問的趨勢指標,倒是有一款基于標簽活動的獨立工具。經過查閱,發現 Ruby 這幾十年來持續下滑、而且身處底部象限。TIOBE 指數也給出了類似的結論,Ruby 穩定保持著每況愈下的生存狀態,逐漸落后于其他語言。


          請謹慎選擇學習


          雖然徹底消亡并不容易,就像 Pascal、COBOL 乃至 Perl 當下也仍然存在一樣。Ruby 的情況要好一些,這艘船還遠遠沒沉、只是速度越來越慢。


          不過人氣并不能直接決定語言的質量。畢竟如果用人氣來衡量,那 IE 6 將是人類歷史上最好的網絡瀏覽器。Ruby 仍然保持著 2005 年時的出色開發體驗,而且體驗只會越來越好。Rails 也仍是實現原型設計演示的好方法,能幫助大家在幾天之內更穩妥地構建起最小可行性產品。


          那我們是不是不該在職業規劃中學習 Ruby 或者 Rails?話可不能這么說。市場對于 Rails 和 Ruby 開發者的需求仍然相當旺盛,或者說市場對任何語言的開發者都需求旺盛。自 2008 年以來出現的一切 SaaS,在未來幾十年中都需要新的開發者加入進來。


          但我們也要考慮到,在 Ruby 陷入萎縮的同時,Node.js 開始快速流行。在過去的十年里,開發領域的創新成果可謂百花齊放。HTML5、Node.js、Angular 和 React 已經在前端和后端遍地開花。JavaScript 與 Python 在市場需求穩定性上也越來越具有優勢。Python 是過去十年中增長速度最快的主流編程語言,目前已經擴展到 Web 開發、數據科學、科學編程等多個領域。Stack Overflow 的調查也顯示出,JavaScript 已經成為全球應用最廣泛的語言。


          另一方面,很多技術都會有自然的生命周期。開發者們的關注和精力就那么多,流向了其他地方、自然也就不再流向這里。


          所以這里還是想提醒大家,如果 Ruby 繼續保持過去十年來的衰落趨勢,那各位一定要認真考慮學習這門語言的風險——也許 Ruby 終有一天也會像 COBOL 或者 Perl 那樣成為時代的眼淚。


          參考鏈接:


          https://berk.es/2022/03/08/the-waning-of-ruby-and-rails/


          https://www.infoq.cn/article/From-Java-to-Ruby--Strategies


          https://www.datacenterknowledge.com/archives/2013/12/06/need-speed-groupon-migrated-node-js


          https://siliconangle.com/2013/11/11/how-groupon-web-traffic-moves-from-legacy-ruby-on-rails-to-node-js/


          主站蜘蛛池模板: 波多野结衣中文一区| 国产在线一区二区视频| 精品国产精品久久一区免费式| 无码人妻aⅴ一区二区三区有奶水| 一区二区免费在线观看| 亚洲国产精品综合一区在线 | 国产综合精品一区二区| 无码一区二区三区老色鬼| 一区二区三区免费视频播放器 | 无码精品人妻一区二区三区人妻斩| 国产乱码精品一区二区三区| 色狠狠AV一区二区三区| 国产综合一区二区在线观看| 国产成人精品一区二三区| 日本激情一区二区三区| 熟女精品视频一区二区三区| 97久久精品午夜一区二区| 一区二区三区在线免费观看视频| 国产福利无码一区在线| 亚洲国产系列一区二区三区 | 国产成人无码精品一区不卡| 国产日本一区二区三区| 国产精品揄拍一区二区| 波多野结衣一区二区| 人妻体体内射精一区二区| 亚洲成AV人片一区二区| 日本免费一区二区久久人人澡| 国模吧无码一区二区三区| 国产精品亚洲高清一区二区 | 久久国产午夜一区二区福利 | 动漫精品第一区二区三区| 午夜爽爽性刺激一区二区视频| 伊人久久大香线蕉AV一区二区| 99久久精品午夜一区二区| 一区二区三区在线观看| 亚洲综合av一区二区三区不卡| 久久精品免费一区二区喷潮| 国产成人午夜精品一区二区三区| 国模一区二区三区| 国产一区二区精品在线观看| 日韩一区二区三区视频|