node.js和前端js有什麼區別?需要重新學習嗎?

在學慣用js和jquery做前端開發,請問用node.js做開發,可以使用前端js嗎?這二者有什麼區別?


我們部門一幫前端程工程師, 一直以來吵著喊著要學nodejs開發, 認為這是前端的一股趨勢, 但是事到臨頭真要做nodejs項目開發時, 一個個都焉了。 反而是後端工程師們nodejs玩的不亦樂呼。

所以我認為, 前端開發中使用的js和nodejs之間,重點不是js,而是利用js開發的程序的種類的區別。

進行前端開發工作需要掌握技能有html、 css、js以及各種前端框架,把這些技術玩6就可以成為一名合格的前端開發工作者

而進行nodejs開發,需要掌握js、web伺服器原理、關係數據使用, 如果玩想玩的深一點, 那麼還需要掌握網路原理以及一些伺服器方面的知識。

通過對比可以發現, 前端開發和nodejs開發, 兩者間除了js是重合的以外, 其它技能互相之間完全沒有半毛錢關係。 想從前端開發過渡到nodejs開發, 起碼要掌握web伺服器原理和關係資料庫, 跨不過這道砍,也就沒有辦法入門nodejs開發。 這也是我們部門後端工程師可以輕鬆使用nodejs, 前端開發工程師無法入門nodejs的根本原因, 因為後端工程師本身就是web伺服器原理、關係資料庫這兩項技術的行家, 至於js么多少總會一點。 而前端工程師,通常對於web伺服器和關係資料庫完全是陌生的,而掌握這兩項技術可不比掌握js的使用來的輕鬆。

題主可以根據自身情況判斷下,如果本身就掌握web伺服器相關知識和資料庫的使用, 那麼直接查查nodejs文檔、網上看看相關博客就可以開始玩了, 否則,乖乖去啃幾本學習伺服器開發的書籍, 尤其是關係資料庫的, 回頭再來玩nodejs


一個是基於瀏覽器端的 javascript (前端 JS)

一個是基於服務端的 javascript (後端 Node.js)

  1. 語法一樣
  2. 組成不一樣

JavaScript:

  • ECMAScript(語言基礎,如:語法、數據類型結構以及一些內置對象)
  • DOM(一些操作頁面元素的方法)
  • BOM(一些操作瀏覽器的方法)

Node.js:

  • ECMAScript(語言基礎,如:語法、數據類型結構以及一些內置對象)
  • OS(操作系統)
  • file(文件系統)
  • net(網路系統)
  • database(資料庫)


蟹妖。

可以看出題主是個剛剛接觸JS甚至可能是剛剛接觸編程的新手,那麼我就講的通俗一點。

就比如說,你現在基本學會了如何用刀切西瓜,並且能切出點花樣來。那很棒。

你現在想學如何殺雞。

其實仔細想一下,刀的用法本質都一樣,手拿著刀柄,刀刃向下,做出一個切割的動作。

但是殺雞和切西瓜畢竟不一樣,西瓜是不動的,雞是活的;西瓜味道不錯,雞血很腥;西瓜慢慢切就好,殺雞要快准狠……

不是說殺雞比切西瓜難,也不是說切西瓜比殺雞優雅,只是想突出這種差異。

JS只是規範,是一種前人發明出來的通用的工具。和刀一樣。

所以說,你真正要學的不是Node.js,而更可能是後端思維。


JavaScript = ECMAScript + 宿主環境提供的API

不同的宿主瀏覽器提供的API以及對ECMAScript標準的實現程度都是不盡相同的,但是功能上做的是同一件事。

Nodejs提供的API則完全是實現不同的功能。如:IO,HTTP等。


看到答案的同學,請不要亂噴,我只是在結合自己現在的水平來回答我自己的看法而已!

自己也在不停的學習node,現在在為實習學習egg中,由於目前水平比較菜(還沒接觸到分散式,負載均衡等方面知識,準備在學完egg後正式開始學習),所以感覺寫node和寫前端js差別差別不是很大,都是在寫業務或者工具,寫node無非就是多了些文件操作,網路操作,進程操作以及和操作系統相關等API而已(node的c/c++ addon除外,這個在入門階段可以跳過),這些API學起來也很簡單。對於資料庫chrome也提供了web sql和indexeddb,只不過用的比較少而已,對於資料庫設計的思想都是差不多的,即使沒有用過在寫react的時候總設計過state吧,設計思路和資料庫設計理念相通。

對於寫node和前端js的區別,這個要分情況來回答:

1. 用node寫桌面軟體,比如基於electron或者nw,我感覺就是多了些API,需要注意的地方就是資料庫和多進程模型。

2. 用node寫web,對於入門需要理解cookie,session等http協議相關的知識,然後就是資料庫,多進程,socket編程等知識。我現在水平也就處於這個階段,我覺得接下來就應該去學學關於負載均衡和分散式的知識了吧。

感覺寫前端js和node差別大並不可怕,可怕的是這些看似可怕的東西打消了學習的念頭,而且很多人會在你困惑的時候譏諷和唱衰,或者說多麼多麼難,其實等學習的時候,其實並沒有那麼難,去年在知乎上詢問過《專註前端還是全棧》的問題 ,當時真的比較困惑自己的方向,一大批人不是譏諷就是唱衰,不過當然還有像爝神(小爝)這樣認真回答的,從自身出發表明他對全棧的看法,在我困惑的時候給了我很大的幫助。其實說這麼多隻想表明一點想去學就去學吧,反正學肯定比不學要好。


在瀏覽器客戶端,世界是JavaScript的,JavaScript就是世界,但這個世界太小了,就像一口井……

終於有一天,一個叫瑞恩·達爾的小夥子,讓JavaScript 脫離了瀏覽器的生態,在更廣闊的江湖裡廝殺,感謝Google V8,在伺服器,桌面,移動端領域,「凡是能用JavaScript 實現的應用,終將用JavaScript實現」,十年前的這句話成了今天的阿特伍德定律。

那麼區別在哪?

「本來無一物,一切皆數據」!

如果在瀏覽器,JS的工作大部分是操作UI的話,那麼脫離了瀏覽器,它的大部分工作是處理數據本身,以及數據的各種形態(json,DB,二進位),所以,除了不需要考慮前端各種各樣的瀏覽器兼容問題(如果是直出的話依然要),後者要考慮的問題更多了,因為在另一個世界,作為其他生態的後起之秀、事件驅動和非阻塞式編程的異軍突起,node.js要蠶食的可是PHP/JAVA/Python/Perl/C#等語言早已瓜分好的天下。路還很長,JS還年輕,它要統一的不只是前後兩端,還有整個江湖!


首先 Node.js 和前端用的 JavaScript 是一樣的,有前端基礎了,上手 Node.js 寫點玩具 Web server 或者 REST api 是很容易的。

因為運行環境就是兩回事兒了,理解運行環境的工作原理、熟悉提供的 API 遠比學習一門語言要麻煩。

前端嘛,就是運行在瀏覽器環境里,主要需要理解瀏覽器和HTTP協議,用到 WebSocket 就再多看一個,天天打交道的就是 DOM、XHR 等等一眾瀏覽器提供的 API,當然現在寫原生API的人不多了,大多使用在這個基礎上封裝出來的框架或者庫。

Node.js 就複雜一點,儘管它設計之初是拿來寫高性能服務的,但發展到今天實際用途已經很廣泛了,除了伺服器端開發,桌面、命令行工具用得也挺廣泛的。

Node.js 本身是 JavaScript(v8) + 事件驅動的非同步I/O(libuv) + 基本庫。要說有前端的基礎,特別是 XHR、File 和 Fetch API 的基礎,學習 Node.js 應該是容易的。

但是想要拿 Node.js 解決問題,需要理解問題領域的背景知識、熟悉相關的 API、庫和工具鏈。比如後端可能學習 http(s)協議、Kao/Express之類的框架、REST規範、OAuth、要用 Redis 存 session、MongoDB/MySQL 存數據,上規模的話還要考慮負載均衡、水平擴展、一致性、容災、安全性等一堆麻煩事兒;而桌面(GUI,OS,Media,fs等)、命令行(shell,term等)之類的也會各有一些自己的領域知識。

就我這兒而言,一個能搞定各種前端麻煩事兒的專家,比前後都會一點兒的前棧,價值要高很多。


相同點是語言用的一樣,其餘的沒法比較

node.js 雖然是用JS寫,但是其核心還是後端的,只不過語言從C#,JAVA換成了JS罷了。曾經自學過一陣Node, 也寫過簡單的小程序,趕緊語言本身如果學的好的話,寫node一樣。換句話說,大學JAVA學得好,再學c#,JS都不費事,頂多在學習各個語言比較進階的知識。但是我覺得後端思想是很重要的。

我是前端,但因為業務變動,過去幾個月被轉去寫一段時間 .NET MVC5,寫了一些end point,也寫過簡單的Business layer,什麼VM和Model,瞎搞了Automapper,然後現在寫一寫Web API。感覺這部分和Node比較貼近。從我個人的學習體驗來說,和前端思想完全不同,所以我覺得「重新」這個詞用的不好,是需要學的「更多」。


JavaScript是一門動態腳本語言,可以運行於宿主環境(如,瀏覽器等包含js引擎的環境)。

瀏覽器通過內置一個Js引擎可以解釋執行js代碼,瀏覽器實現js標準規範(ECMAScript),提供API,可以使用JavaScript調用,支持我們操作頁面DOM,調用某些瀏覽器操作等客戶端功能,也可以說JavaScript = ECMAScript + DOM + 宿主環境(BOM),這就是所說的前端js;

而node.Js是一個基於Google V8引擎(js引擎的某一種)構建的JavaScript運行環境,提供API,可以使用JavaScript調用,支持我們讀取本地文件,開啟本地主機埠服務,發送,接受請求等服務端功能,node.JS = JavaScript + node環境(提供node API...);

所以,如果要執行JavaScript代碼,需要一個js引擎,你可以安裝一個瀏覽器(內置js引擎),或nodejs環境(內置js引擎),如果你在js代碼中調用了瀏覽器提供的API,則必須安裝一個瀏覽器,若調用了nodejs API,則必須安裝nodejs環境,然後以各自規定的方式載入、執行JavaScript代碼。

碼字不易,敬請指正。


應該把視野打開一些。

讓我把你的題目翻譯一下:你現在正在學習瀏覽器相關的知識,DOM和BOM、樣式和渲染機制等等;而你現在還對各種網路知識產生了興趣,HTTP協議、架構模式、資料庫、緩存機制等等。

而你在學習這些東西時,將會使用的工具都是JavaScript。

對於前端來說,不能分清楚什麼東西是知識什麼東西是工具的話,是一件很糟糕的事情……嗯,這會導致你不停的學些沒用的東西,非常、不、應該是稍微有點努力,然而這份努力並沒什麼太大的意義……


題主在學習 JS,說明對 JS 語法有一定了解了,在這個前提下解釋 Node.js 和 前端 JS (瀏覽器),以 Chrome 為例。

Node.js 和 瀏覽器都是軟體系統,都能編譯執行 JS 代碼。

比如你寫了一段 JS 代碼

console.log("Hello World");

這段代碼需要被編譯成計算機可以理解的代碼然後再執行,Node.js 和 瀏覽器都能做這個事情,他們都用了谷歌 Chrome V8 作為 JS 的編譯執行引擎。這說明不管你寫的是 Node.js 上運行的 JS 代碼,還是在瀏覽器上運行 JS 代碼,語法是一樣的。

不一樣的是

  1. 目的不一樣。瀏覽器上運行的 JS 代碼,關注的是用戶的交互和頁面的渲染。而 node.js 上的 JS 代碼關注的是伺服器端業務邏輯(描述不太準確),比如說處理從瀏覽器過來的 http 請求。
  2. API 不一樣。比如瀏覽器上你可以調用 document.open() 方法,但是在 Node.js 里卻不行;相反 Node.js 里你可以調用 require() 方法,但是瀏覽器上卻不行。Web APIs VS Node.js v6.10.3 Documentation
  3. 第三方庫不一樣。

回答不全面,但題主可以參考這個思路去解答自己的疑問。


前端的js更多的是對html dom元素的操作,以及一些非同步刷新等等,就像jquery的初衷一樣,更少的代碼,更多的特效。

但編程談到最後,語言只是工具,慢慢來,你會對這句話有感悟的。

node.js就是把js作為編程語言工具的一種,進行了擴展,來實現各種後端操作。所謂後端,更多的關注各種數據結構,運算邏輯,如果非要用前端的方式去理解,學學用js畫canvas吧,畫個綻放的煙花,後端的演算法也就感受一二了。

你所見到的互聯網是靠協議堆起來的,c也好,java也罷,不同的語言遵循著相同的協議。慢慢體會吧,語法都是為人準備的,百家之言各有千秋,幻化零一有何不同。


麵包和饅頭的區別


一般的語法相同,瀏覽器能用的語法基本上node.js也能用。

不同的地方是api,也就是介面不同,不同的介面用來操作不同的對象,就和不同的公司運營不同的業務一樣。

不需要完全重學,只需要再學習一下node的api就好了,想要進階一點就看一下es2015。


個人覺得,雖然都是用的js的語法,但編程的方向卻不太一樣,如果用Node.js來做服務端開發,更多的時候是面相API編程,與請求打交道,而前端js則更多的面相DOM編程,兩者還是有區別的。個人認為,可以使用前端js嗎這種說法不太正確,建議學習一下Node.js。


  • JS 是一種語言規範。
  • 按照 JS 語言規範寫的文本,可以稱為 JS 代碼。
  • JS 代碼需要執行才有效果,有多種不同的 JS 執行環境(又稱 「引擎」),按照現代的技術可以稱之為編譯器和虛擬機的混合體,包括 V8 用於 Chrome 瀏覽器和 Node.js,Chakra 用於 IE,WebKit 用於 Safari。
  • 在瀏覽器里執行的 JS 引擎的上下文(又稱為環境,Context)可以認為是一個網頁,這個網頁會有若干個 JS 代碼文件。
  • 如果把 JS 引擎的上下文從瀏覽器移到操作系統(Windows,Linux,Darin)作為一個獨立的進程,就是 Node.js。
  • 作為系統進程,Node.js 操作的東西就不是瀏覽器上的 DOM 和點擊事件等,而是硬碟、內存、CPU,因此相比於前端開發,Node.js 是一種後端技術,會有很多後端才會用到的 API,比如從硬碟的文件系統里讀文件的 API。
  • Node.js 和前端 JS 通用的東西就是 JS 的語言規範和非同步思想,使用的環境和目標完全不同,可以認為需要「重新」學習。


語法是一樣的。後端要用資料庫和API 。要對後端的同步非同步怎麼運作的了解一些。很爽的是可以用前端語言實現後端功能。


同學,很皮

下面稍微整理兩種工作所需要的部分技能(個人能力不足,請勿噴)

js工程師:

html

css

css3

less

scss

js

jquery

jquery常用插件近20種

bootstrap

html5

requirejs

seajs

ejs

jade

fis3

webpack

npm常用包近5種

vue

vue全家桶近10種插件

vue模板

node工程師:

js工程師全部技能

node

connect

express

npm常用包近20種

mongodb

mongoose

可以在做好前端的前提下慢慢過度到node(建議前端經驗2年以後),當然學什麼都要付出很多努力,加油吧

還有node寫多了,結尾都不習慣加分號了


語法一樣,只是用js寫了很多組件,需要你去掌握。如果題主學過,java,那就好理解了,會java se,但是還要學jsp+servlet才可以做web開發。


我講得再通俗一點,其實Node和JavaScript的關係就像Android和Java。

Android是一門技術,Java是一門語言,你學會了Java之後,要做Android開發,一樣要學如何做界面,如何存儲和查詢數據,如何調用服務端介面等。

類比Node也一樣,Node是一門技術,只不過它用了JavaScript作為它的實現語言而已,你會了JavaScript,只是不需要再花時間去學語言而已。

這裡還需要注意的是,Node是一門服務端的技術,簡單來說一般是寫後台代碼時用的,那麼就會涉及到資料庫操作,I/O操作等。


推薦閱讀:

typescript調用js(node)組件,必須在每一個引用的地方都寫reference嗎?
前後端使用同一種編程語言有什麼優勢和劣勢?
為什麼說nodejs是前端必備技能?
應該使用 const 定義 object 和 array 嗎?
現在前端必須掌握nodejs技術嗎?

TAG:前端開發 | JavaScript | Nodejs |