1. 程式人生 > >Node.js 給前端帶來了什麼

Node.js 給前端帶來了什麼

在軟體開發領域,前端工程師曾經是一個比較糾結的職業。在Web技術真正發展起來之前的相當長一段時間裡,由於技術門檻很低,前端工程師行業一直是魚龍混雜的狀態。其中很多號稱是Web開發者的人實際上並沒有什麼專業的前端技能,有些工作就是被當做簡單的力氣活由美術設計師順便做做而已。當時很多人甚至並不認為有朝一日會有這麼一群人用HTML、CSS和JavaScript這三門技術謀生——他們想,這怎麼可能呢——這些技術看起來都是如此簡單,隨隨便便混在一起用就哦了,把做這些活看成一種正兒八經的職業簡直是笑話。 隨著技術發展,人們對前端工作的看法開始改變了,一些人從美工頁面仔真正轉變為專業的前端工程師。JavaScript,這門很多工程師曾經把它當做玩具而不屑一顧的指令碼語言悄然演變成推動網際網路發展的核心驅動力。伴隨著越來越多的瀏覽器的出現使得用HTML和CSS相容各種瀏覽器變得越來越難,於是能實現相容各種瀏覽器的頁面成為了前端工程師的金字招牌,前端職業開始變得炙手可熱。
  • 兩個獨立的UI層
即使Ajax這種技術風靡全球之後,前端工程師的主要工作曾經也僅侷限於瀏覽器視窗之內。HTML、CSS和JavaScript是前端工程師必須要掌握的三種核心技術,前端同後端的唯一交集僅僅是前端需要確保後端的資料能夠以正確合適的格式輸出到瀏覽器上。在某種意義上來說,Web開發有兩個UI層,一個是在瀏覽器裡面我們最終看到的,另一個在server端,負責生成和拼接頁面。因為傳統前端基本上沒有辦法自主決定server端如何處理資料拼接生成頁面,因為資料如何組織,往往是會受到後端工程師所選擇的技術框架的影響的,而後端不理解前端的一些需求,所以他們選擇的時候也就很少會從前端方便的角度進行考慮。
在上面這張圖的結構裡,瀏覽器裡的UI層是完全歸前端工程師管的。伺服器端的UI層則是前後端都關心的部分,剩下的部分是服務端的底層,諸如資料處理、快取、許可權控制和其他核心模組,這些是歸後端管的。我們還是回過頭來看我們所關心的server端UI層吧,這一層所做的事情通常是拼頁面模板以及處理具體的業務互動邏輯。 所以,傳統的前後端分工是由前端負責瀏覽器,而其他瀏覽器之外的東東統統歸由後端負責。前後端的交集server的UI層也是由後端來主導的。這是目前最主流的一種前後端分工方式。
  • 讓Node.js來改變這一切
Node.js一發布,立刻在前端工程師中引起了軒然大波,前端工程師們幾乎立刻對這一項技術表露出了相當大的熱情和期待。上一次一種技術能被整個前端界如此關注那還是在幾年之前,那時候Ajax這個概念剛剛被提出來。讓JavaScript跑在server端,這個想法簡直太棒了。這下我們不用再去學那些什麼PHP啦、Ruby啦、Java啦、Scala啦或者其他什麼對前端來說奇怪的語言,也可以輕鬆地將我們的領域擴充套件到server端,多麼美好的前景! 我從來不是一個PHP的愛好者,但是我在Yahoo工作的時候,我不得不使用PHP。為了這份工作,我得忍受花費許多額外的時間去修復由於PHP的傻逼特性導致的坑。對於一直使用Java作為服務端語言的我來說,對PHP實在是很難適應。我相信,也一直堅持認為一種靜態型別的語言更加適合用來構建你的業務邏輯的核心部分。因此,雖然我很喜歡JavaScript,但我也不會用它來做所有的事情,比如我絕對不會只用JavaScript來實現一個完整的購物車系統。 對於我來說,Node.js不是一個解決一切問題的銀彈,我不會用它來取代server端所有別的語言模組。事實上,Node.js可以做到其他後端語言所能做到的幾乎所有的事情,但是我不會這麼做。我所認為的比較合適的做法是用Node.js來解決server端UI層的問題,這樣我就可以將這一層從後端的其他部分剝離出來。
現在越來越多的公司傾向於採用面向服務(service-oriented)的架構,由後端提供給前端RESTful的介面,這麼做是為了更好的做前後端的依賴分離。如果所有的關鍵業務邏輯都封裝成REST呼叫,就意味著在上層只需要考慮如何用這些REST介面構建具體的應用。那些後端程式設計師們根本不操心具體資料是如何從一個頁面傳遞到另一個頁面的,他們也不用管使用者資料更新是通過Ajax非同步獲取的還是通過重新整理頁面,當然他們更不關心的是你究竟在用jQuery還是YUI——這與他們根本毫無關係嘛。後端程式設計師真正應該關心的難道不應該是資料如何儲存、如何容錯以及如何保證安全性嗎? 現在我們看看Node.js帶來的好處吧,當後端程式設計師提供了REST服務之後,現在我們前端程式設計師可以使用Node.js來處理server端的UI層啦,我們可以將通過REST呼叫拿到的資料隨心所欲地進行處理,不管是渲染模板還是直接提供給Ajax,現在我們僅僅用JavaScript一種語言就可以輕鬆實現這些。至於後端程式設計師,他們只需要保證資料的正確性,無論他們使用任何一種語言來封裝REST呼叫,都不會對前端造成影響,這樣前後端的職責不就被更好地劃分了嗎?這樣分工之後前端的領域就從瀏覽器小框框裡面擴充套件到了server的UI層,而這一層本來對於後端來說是一件他們做起來不輕鬆的零碎活兒。
  • 不!這太聳人聽聞了!
前端工程師想接手server的UI層是不那麼容易被後端工程師們理解和接受的,因為這部分工作本來屬於後端工程師的職責。尤其是現在還有很多後端工程師認為JavaScript是一種極簡單的“玩具語言”,他們將會想如此重要的服務端工作怎麼能交給這群看起來不太靠譜的人用如此“不嚴肅”的語言來玩?在我的經驗裡,這種觀念上的衝突是前後端工程師們在是否引入Node.js這一問題上的最大分歧。Server端UI層是前後端的中間地帶,而之前通常後端程式設計師們對這個地帶比較有主導權,所以一旦你進入這個本來屬於後端主導的領域,爭議自然是不可避免的。 實際上放棄傳統的角色立場,將server的UI層分給前端,在大型Web架構下是很有意義的。不這麼做的話,有時候前端想要從後端要到正確的資料,還不得不關心後端究竟是用什麼語言實現的。過去的分工中,那些原本屬於核心業務底層考慮的東西會被暴露給server的UI層,而這些問題往往會不小心影響到前端。前端本來不需要關注這些問題,因為前後端所關心的方面根本完全不一樣嘛。如果你理解單一職能、責任分離和模組化,你就會理解我所說的,甚至會覺得以前不把server的UI層分給前端實在是很笨。 只可惜,之前Node.js這樣的東東不存在,所以當時沒有前端合適的技術讓前端工程師們自己搞定server的UI層。於是後端的同學們用PHP的人就順手把UI用PHP的模板實現了,同樣的用Java的後端同學也自然而然地用JSP搞定這個問題。這不是前端的同學不願意去做Server的UI,而是因為在之前,沒有一種我們熟悉的技術讓我們能夠搞定這些事情,但是現在不一樣了,我們有Node.js了。
  • 結論
我很喜歡Node.js,我喜歡由這項技術給前端界帶來的更大的發展潛力。我並不認為整個後端完全用Node.js來實現會是一個很好的方案,儘管Node.js完全可以做到這一切。我認為目前Node.js最大的價值是能讓前端完全把控整個UI層,不論是瀏覽器的還是Server端的,做到這一點,我們工作的效率能得到很大的提升。我們前端更擅長於決定資料以何種方式呈現能帶給使用者更好的體驗,而後端則更加了解如何處理資料。在這種新的分工方式下,後端只需要提供合適的資料操作介面,前端自己就能構建漂亮的、有效率的、可用性高的介面,從而實現使用者所喜歡的各種互動。 使用Node.js來搞定server的UI層也將後端工程師從他們不擅長的領域解放了出來。於是我們得到了一個Web開發的靈丹妙藥:前後端之間只需要通過資料來互動,這種模型使得兩方相互獨立,各自都能夠快速迭代開發,而只要保證資料介面不變,前後端彼此之間就不會造成任何影響。 果斷嘗試一下吧,這個方案也許正適合你的團隊。

相關推薦

Node.js 前端帶來什麼

在軟體開發領域,前端工程師曾經是一個比較糾結的職業。在Web技術真正發展起來之前的相當長一段時間裡,由於技術門檻很低,前端工程師行業一直是魚龍混雜的狀態。其中很多號稱是Web開發者的人實際上並沒有什麼專業的前端技能,有些工作就是被當做簡單的力氣活由美術設計師順便做做而已。當時很多人甚至並不認為有朝一日會有這麼

收益 or 挑戰?Serverless 究竟前端帶來什麼

作者 | 黃子毅(紫益) 阿里前端技術專家 導讀:前端開發者是最早享受到 “Serverless” 好處的群體,因為瀏覽器就是一個開箱即用、甚至無需為計算付費的環境!Serverless 把前端開發體驗帶入了後端,利用 FaaS 與 BaaS 打造一套開箱即用的後端開發環境。本文作者將從前端角

FaaS 前端帶來什麼?

一.Serverless 與 FaaS Serverless 是一種雲端計算理念,即無伺服器計算(Serverless Computing): Serverless suggests that the cloud user simply writes the code and leaves all the

《千與千尋》讀者帶來什麽?

改變 fonts 電影 href 什麽事 網上 fontsize log clas 來源:http://www.ido321.com/1010.html 事實上我不太喜歡看動漫一類的電影,無聊之中,在朋友的推薦下就看了第一部動漫電影–《千與千尋》。看完之後,僅僅想

盤點這些年3D打印機技術我們帶來的影響

學生 盤點 取代 個性化 平臺 制造 院校 實現 讓我 3D打印機技術自開創以來,在各領域各行業都得到了廣泛的應用,並且在醫療、教育、制造業、建築等行業都研發出了行業專用打印機,由此可見3D打印技術已經成為各行業科技發展的重要因素。3D打印技術在各行業也展現了出非凡的影響力

你為什麽選擇在英國學習?它我們帶來什麽魅力?

也有 年輕人 全世界 學習 美麗 競爭力 貝爾 想要 數量 中國是世界上人口最多的國家。其龐大的人口基礎使得每年高考和研究生入學考試的數量仍然很高。競爭非常激烈。可以說,成千上萬的部隊渡過一座木橋並不算太多。尤其是高考,對於很多孩子來說,可以說是人生的第一分水嶺,高考的難度

工作我們帶來什麼?快樂?money?等等。。。。。

      每天起床上班時,每天都有一個想法,不想上班,不想上班。。。。。。       其實,當你洗漱好,吃個豐盛的早餐,又是奮鬥的一天。       我一直不想上班,一直打算著,不上班時,睡個三天三夜,

大家帶來最新的簽證時間調整~~

英國現在調整了Tier4學生簽證的計點積分制系統,簽證中規則日子費規範行進,倫敦區域現在為1265英鎊一個月,非倫敦區域的現在為1015英鎊/月。在英國滿一年後再續簽只需要交2個月日子費這個規則在新政策中撤消了。雅思考試精度的行進出國留學言語要求是很高的。英國撤消託福和PTE的認可,把雅思分為日子雅思、學術雅

HTML5我們帶來什麼?

Web的增強與壟斷 WebAPP HTML5新增加了離線儲存,更豐富的表單、JS執行緒、socket、標準擴充套件embed、CSS3... 流媒體與多媒體引擎 Audio、Video、Canvas、webgl等等 搜尋引擎和無障礙領域 移動網際網路 跨平臺 HTML5是唯一一個

【區塊鏈】實體經濟距離發行ICO還有多遠?[續]——STO我們帶來什麼

寫在前面 前文 [區塊鏈]實體經濟距離發行ICO還有多遠?得到了眾多企業和觀眾的一致好評,也有幸被中文核心期刊【企業管理】雜誌錄用並刊登了此文。本文以近一年半後的視角再回頭對該文進行拓展研究,用以拋磚引玉。 後ICO時代的沒落 前文在ICO即將火熱之前詳細的介紹了對於企業而言

Node.js非同步程式設計帶來的難點

前言 Node使得非同步程式設計首次出現在業務層面,它藉助非同步I/O模型和V8高效能引擎(事件迴圈機制),突破單執行緒的效能瓶頸,讓JavaScript在後端達到了實用價值。由於這種非同步程式設計的出現,對於node,也會出現一些難點。 難點1 異常處理 說到

從喬布斯的理論淺談區塊鏈技術我們帶來什麼?

史蒂夫•喬布斯(Steve Jobs)曾說過:“生命裡的每一個點都會最終連成線。” 這裡的“點”可以理解為知識、智慧、經驗、直覺、技能、資本等等。區塊鏈技術是一個將技術、科學、哲學、政治、經濟和宗教融為一體的單一深層領域。那麼區塊鏈技術是如何給我們的生活帶來了變革性影響,從而推動歷史的車輪

思考:3Q之戰我們帶來什麼?

      3Q之戰到今天,烽煙將息。這件事情我關注了很長時間,也在微博上跟人討論,參加了一些投票。我發現大部分普通民眾基本都支援360,而一些稍微懂點技術的態度則很奇怪:即BS360,又不支援QQ。      先說說我的標題吧,我為什麼使用“我們的網際網路”這個詞,我要表達一個基本態度就是:網際網路不是一家

Git-總結篇-我們帶來什麼?

前言   最初個人並不認為有必要專門準備一片文章記錄Git的優勢或者如題“給我們帶來了什麼”這樣的主體,但是想到這是Git相關學習和使用的總結,所以決定單獨記錄一篇文章; 本文僅記錄本人使用學習Git中實際接觸過的範圍,並且會持續更新; Sma

node.js前端js有什麼區別

進行前端開發工作需要掌握技能有html、 css、js以及各種前端框架,把這些技術玩6就可以成為一名合格的前端開發工作者 而進行nodejs開發,需要掌握js、web伺服器原理、關係資料使用, 如果

我學習的程式設計,都帶來什麼?

前言 寫這篇文章的主要的原因是什麼呢?主要是想到了自己是怎麼從一個工科專業然後轉行來做到計算機專業,這中間的酸甜苦辣,人間疾苦想分享給大家,以及學習了程式設計之後我的世界觀、價值觀的變化,希望能與大家產生共勉。 我的程式設計之路 作為一個從農村出來

前端之 —— node.js摸爬打滾之路(一)

turn lan name resp function oba ack val 括號 安裝: window下的安裝,node.js直接上官網下載:https://nodejs.org/en/ 選擇LTS,也就是版本號比較低的穩定版,下載下來後運行下載的文件進行安裝; 通

node.js初步解(3)——慕課網(回調,作用域,上下文)

span clas global ava 運行 time log timeout color 1. 1 //回調:回調是異步編程最基本的方法,node.js需要按順序執行異步邏輯的時候,一般采用後續傳遞的方式,將後續邏輯封裝在回調函數中,作為起始函數的參數。 2 //

【火的不行的前端你必須知道】一、淺談node.js

images 事件驅動 webp bsp 打包 前端框架 公司 org 詳細分析 引子: 現在都2017年了,在這個前端盛行的年頭,在不懂一些前端流行的技術就落伍了,恰好公司H5端項目也是讓這個方向去替換。 技術選型:   這裏主要是簡單說一下,後面會分章節詳細分

拿什麽守護你的Node.JS進程: Node出錯崩潰怎麽辦?

rest 單線程 not defined undefine cat forever can show 被吐嘈的NodeJS的異常處理 許多人都有這樣一種映像,NodeJS比較快; 但是因為其是單線程,所以它不穩定,有點不安全,不適合處理復雜業務; 它比較適合對並發要求比較高