iT邦幫忙

0

Node.js屬於後端的技術,前端人員要補充哪些知識?

  • 分享至 

  • xImage

我的工作主要是寫flash和flex,雖然偶而也會碰到一點php,不過都是很淺的。

當然JavaScript也是會寫到的。

現在網路上入門的資源已經不少了,不過我覺得好像有一塊空白的地方,大家都說,寫JavaScript的也可以在Server上寫東西了,不過雖然語法可以用JavaScript來寫,但是做前端的知識,畢竟就是前端的,像flash的話,就是熟怎麼控制movie clip,怎麼控制event、timeline,怎麼把影音的資源整合之類的,和後端的關係最多就是用ajax存取資料這樣。JavaScript其實也差不多,不外乎就是dom存取或是事件控制。但是這些東西,和後端伺服器的所需的知識和技術大不相同。

所以,我第一個疑問是,雖然語言相通,但是前端真的能跨到後端去開發嗎?第二個疑問是,如果可以,有哪些方面的知識是需要補充的?

看更多先前的討論...收起先前的討論...
zanhsieh iT邦新手 4 級 ‧ 2012-04-17 09:56:54 檢舉
個人淺見:

0. 非同步概念 - 收多 Request & 發多 Response 不會按照順序來的
1. 資源共享競爭 - NIO / 事件好是好,實際上有可能有用戶一點資源都碰不到
2. 高負載下不良代碼造成系統崩潰 - #1 也可能造成 #2,用戶端不良代碼觸發事件也會有
3. 版本控制 - 套件包是不是在 Windows & Linux 通用
4. 可伸縮性 - 如,您的代碼能否多開一台機器就有多一台機器的效能,而不造成系統崩潰

長遠說,您找些有修過操作系統的書或者朋友問問。
fillano iT邦超人 1 級 ‧ 2012-04-17 13:08:05 檢舉
不好意思,看不太懂您說的這個:
zanhsieh提到:
1. 資源共享競爭 - NIO / 事件好是好,實際上有可能有用戶一點資源都碰不到

能否說明一下?
不好意思,看不太懂您說的這個:

zanhsieh提到:
長遠說,您找些有修過操作系統的書或者朋友問問。


「操作系統」是什麼?能否說明一下?
我問朋友都沒人修過
krarm iT邦好手 1 級 ‧ 2012-04-17 15:55:48 檢舉
lalabear iT邦新手 2 級 ‧ 2012-04-17 16:07:42 檢舉
叫我嗎?
lalabear iT邦新手 2 級 ‧ 2012-04-17 16:09:16 檢舉
不小心把樓搞歪了,請大家忽略,繼續討論
zanhsieh iT邦新手 4 級 ‧ 2012-04-17 16:17:49 檢舉
@fillano: 那個是敝人在 socket.io 專案裏頭碰到的問題 (也許只有我有這個問題)
@antijava: operating system, 資工資管必修課 (也許我用了對岸的譯名)
fillano iT邦超人 1 級 ‧ 2012-04-17 17:09:03 檢舉
了解。
socket.io...有用到WebSocket?是單純做comet?
了解了,原來是operating system
player iT邦大師 1 級 ‧ 2012-04-17 17:47:52 檢舉
IIS可以拿來跑 Node.js 嗎?
如果可以的話
有相關範例嗎? 該怎麼設定?
fillano iT邦超人 1 級 ‧ 2012-04-17 22:15:59 檢舉
參考這個:
https://github.com/tjanczuk/iisnode

原理:
就像是把IIS當做reverse proxy,把符合規則的url,透過pipe導向node.exe執行

優點:
不用自己寫cluster,IIS會協助做負載的管理

缺點:
IIS這個reverse proxy,速度比較慢...
CaesarChi iT邦新手 3 級 ‧ 2012-04-18 12:52:51 檢舉
這邊有中文介紹,和簡單的環境建制教學,

參考來源:
http://blog.lyhdev.com/2012/01/nodejs-iis.html
zanhsieh iT邦新手 4 級 ‧ 2012-04-18 14:36:44 檢舉
@filano: 跨裝置間對接 / 通訊 (e.g. 機頂盒 / 網路電視 / Android 裝置 / iOS 裝置對接)
fillano iT邦超人 1 級 ‧ 2012-04-18 15:36:53 檢舉
這樣...這些裝置是ARM base? MIPS base?這些都調到能跑node.js來對接也不容易讚...

還是說有一台server裝了node.js做中繼,然後透過server來對接?
zanhsieh iT邦新手 4 級 ‧ 2012-04-20 10:13:07 檢舉
@filano: 1. 都有 2. 還是使用 server 做中繼。P2P 曾考慮過 (還有一套相對不是那麼熱門的 lib: sockjs) 很久以前也有人做成功過:

http://www.nonblocking.io/2008/12/multicast-feature-added-to.html

不使用的原因有:
1. P2P要維持 seed server,並常常更新
2. 機頂盒硬體效能不佳
3. 跨平台問題
fillano iT邦超人 1 級 ‧ 2012-04-20 15:15:32 檢舉
了解,感謝你的分享。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
20
CaesarChi
iT邦新手 3 級 ‧ 2012-04-16 13:23:13
最佳解答

首先,Node.JS 是以 Google V8 engine 為核心編譯引擎,所以開發人員所寫的程式都以 JavaScript 為主,JavaScript 對於前端開發人員或者是 web developer 來說或多或少都有一定的熟悉度。

不過在Node.JS 的程式編寫當中,要有一個清楚的概念,就是所編寫的程式邏輯沒有包含DOM, Browser 物件,大多會著墨於事件控制,這也是 Node.JS 採取 JavaScript 的優勢,利用事件控制,讓每個執行流程免於阻塞的狀況,只有當事件觸發時才會被執行,在概念上與其他的線性執行會不大相同。

Node.JS 學習的開始,建議從基本環境建置,還有JavaScript 程式邏輯方面著手,因為 Node.JS 的架構是基於 CommonJS 標準,剛開始接觸的時候需要花些時間將概念釐清,將Web 前端概念抽離,最簡單的方式可以從範例程式碼當中瞭解不同模組(module)的引用(require),模組建立,還有事件呼叫、觸發等。

雖然說 Node.JS 已經沒有了 DOM 或者 Browser 端的物件,不過回到根本,開發者對於 JavaScript 的基本概念還是要建立,例如,Object, array, prototype, function...有了以上的概念之後相信你在 Node.JS 開發道路上會更為順遂。

參考資料,
http://nodejs.org/
http://book.nodejs.tw/bibliography.html
http://www.commonjs.org/

14
fillano
iT邦超人 1 級 ‧ 2012-04-16 14:48:53

對於Javascript這個程式語言,你必須有一個認知:在最初的設計中,他就是一個依賴於host環境的語言。Javascript核心有提供少數核心物件可以讓你使用(Object、Array、Math、Date ...etc.),至於host提供的環境,會透過global提供給使用者,所以在進入Javascript的執行環境中時,已經有一些預先定義好的global變數可以取用。在網頁環境中,這個global就是windows物件,在node.js時他就叫global。在不同環境中使用Javascript來開發,都需要知道host環境有提供什麼東西,這些會透過哪些global變數來取用等等。

不論在哪個Javascript環境中,都可以用這樣的方式來檢查到底host環境提供哪些global變數可供使用:

<pre class="c" name="code">
(function(o){for(var i in o) console.log(i)})(this);
//在一些host環境,例如SpiderMonkey的Shell,需要把console.log換成print,來把訊息輸出。

(這個方法有一個限制,就是global中一些物件可能會被設定成不可列舉的(DontEnum),這樣就沒辦法用這個方式看到,不過閱讀文件應該都可以知道有哪些功能可以使用。)

對於撰寫node.js來說,至少還需要知道的是:require()函數,node.js有許多功能是需要用這個函數來加入到你的使用環境中,這樣global中只要保留最少的物件就可以使用了。

node.js提供的功能,有許多都是非同步的,你必須提供一個callback函數給他,然後他會在執行完時呼叫並提供執行結果。這個使用方式應該不陌生,在瀏覽器環境中,各種事件都是用這個方式來執行。但是在node.js中,有時候會有複雜而交錯的callback,你可能需要用一些方式來組織他(不一定需要,只要你可以handle...另外,其實在複雜的網頁app,也有可能需要這樣的組織跟流程控制)。

其他就靠自己熟悉了,基本上他還是Javascript。另外V8應該可以完整支援ECMA-262 Edition 5了,所以一些好用的功能在node.js應該都可以使用。(像是:Array.prototype.map())

14
jacksctsai
iT邦新手 5 級 ‧ 2012-04-16 14:48:54

前端跟後端做的事情是互補的。

不同於前端,後端做的事情最基本大多與資料庫存取及訊息處理交換比較有關。
前端的開發以使用者介面為主,後端的程式則是以處理前端的要求為主。

換句話說,前端的程式主要是跟使用者互動,而後端的程式則是面對瀏覽器或應用程式互動。
同一件事情,兩者的處理邏輯不太相同。

例如:使用者登入系統。對前端來說,需要提供表單讓使用者輸入資訊,進行必要的資料檢查後,把資料送到後端進行驗證。最後再把驗證結果及相關訊息呈現在畫面上。
對後端而言,要做的事則是會收到使用者的登入要求(Request),把帳號及密碼資訊與資料庫中的資料進行驗證,再把驗證結果及相關資訊(例如:帳戶被鎖定而無法登入)傳回瀏覽器。

所以從前端要切入後端開發我覺得先有幾個重點:
1、了解 HTTP 基礎架構
HTTP 的基礎架構主要是了解後端處理要求的基本邏輯。
包括像:Request Method、Response Code、Session、Cookie 等了解一下。
這部份我手邊沒有入門參考資料,如果有人有比較簡單的參考資料歡迎補充。

2、資料庫
以往資料庫開發以 MySQL 或 MSSQL 關連式資料庫為主,技術門檻較高。
但 NoSQL 的資料庫日益流行,也有許多大型網站採用,例如:MongoDB。
由於是直接使用 JSON 格式存取資料,對於 JavaScript 開發者而言非常容易上手。

3、Web Framework
後端的處理可以直接套用現有的架構,會加速開發的速度。
建議可以從 Express.js (http://expressjs.com) 開始接觸,網路上相關的資訊比較多。
這部份另外還包含 Template 技術,比較流行的像是 EJS 或 Jade,主要用來產生動態網頁,算是基本功能。

最後補充一點,由於後端的環境不像前端是以瀏覽器為主,環境相對單純,但其功能也受到一些限制。後端的環境,基本上是可以讓你完全自由發揮的,網路上有數千個套件可以運用。初學者可以先選一些基本的來熟悉,等到覺得跟他比較熟之後,再去試試不同的套件。

2
aliceyeh
iT邦新手 2 級 ‧ 2012-04-17 09:29:39

不曉得 Node.js 可以幹麻, JavaScript的穩定性沒有後端程式來的高,
JSP, ASP, PHP 或其他 Client 都可以輕易達到相同功能, 酷炫功能不一定實用!

看更多先前的回應...收起先前的回應...
fillano iT邦超人 1 級 ‧ 2012-04-17 13:04:02 檢舉

請舉例說明Javascript的穩定性問題。
另外,node.js是後端開發的環境,跟酷炫好像沒關係?

itblog iT邦新手 1 級 ‧ 2012-04-17 14:49:03 檢舉

酷炫應該是指它是新技術吧...不過每個技術應該都有新生的時候,像Rails剛出來的時候大家也說很酷很炫但像是玩具,經過這些年來,Rails也已經證明了自己的價值,而且一直站在Web技術和實戰的前端。

不過Node.js是在JavaScript的event looping特性上,建立出none blocking的特性,這讓它可以處理大量的request,也讓它有特殊的應用情境。所以說它和JSP, ASP, PHP都一樣,也不盡然對。這是我對Node.js的一點粗淺認識,提出來讓大家參考。

CaesarChi iT邦新手 3 級 ‧ 2012-04-17 15:21:44 檢舉

JavaScript的穩定性沒有後端程式來的高?
Node.JS 是在寫後端語言,並不是寫前端,不會有跨瀏覽器問題,穩定度和完整性是已經被調整過,目前運作起來已經是個很棒的服務端產品。

JSP, ASP, PHP... 當然都可以達到相同功能,不過 Node.JS 擁有 non-blocking 的特性,可以提高 concurrency,同時Node.JS 也提供許多基本的底層 API ,讓開發者可以做 web 以外的事情,以上所提的這些都不是酷炫功能,都是屬於實用主義。

程式語言特性不同,用A 比較B 本來就有公平性問題,每一種現存的語言對於開發者都是美好的事物,只有體驗過得人才能瞭解其中的奧妙,每種語言也都有自己的酷炫功能點,只差在使用情境上的問題,有機會歡迎來 Node.JS 聚會參與討論。

fillano iT邦超人 1 級 ‧ 2012-04-18 15:51:08 檢舉

我想穩定性的問題跟Javascript沒有直接關係...如果要說跟「酷炫」有關,可能比較適合XD

畢竟node.js還沒到1.0版,雖然有一些功力深厚的開發者參與,又有google(V8)跟微軟的奧援(IOCP支援/開發者/azure整合),但是介面與功能還隨著版本而有變化。我想這是他比較不穩的地方。

zanhsieh iT邦新手 4 級 ‧ 2012-04-20 10:22:30 檢舉

我想,「減少訓練成本」應該列入「企業為什麼會採用 node.js」的原因之一。像我公司,開發人員 99% 都會 JavaScript,但要求他們懂甚麼 PHP ASP.net JSP Python Ruby Erlang 是得投入學習成本的。

關於穩定性的問題,其實我剛開始寫的時候也會常常當掉,後來發現其實是自己 code 沒寫好的關係。
寫一陣子後就不會了,所以應該算是剛開始不習慣。

如果擔心,就加個 forever 之類的工具。
但是我自己實際上當掉的情形還是沒有很常見。

aliceyeh iT邦新手 2 級 ‧ 2012-04-26 12:22:35 檢舉

JS 寫了十幾年了, 功力雖然比不上 fillano 大, 不過該 catch Exception 一個也沒少, 不過還是對JS有點無奈 (不過JS還比VB要來的嚴謹), 仍然無法100%相信JS回傳的結果, 除了程式寫錯的狀況, 非常非常罕見的狀況下會發生出搥的狀況 (應該是瀏覽器發瘋了), 我只是發表我的看法, 就像 Ruby 很多人吹捧, 我還是看不出來價值在那, 搞死自己而已. Too much JavaScript not a good thing!

CaesarChi iT邦新手 3 級 ‧ 2012-04-26 13:48:36 檢舉

同意 aliceyeh 的看法,

不過,前端歸前端,後端規後端,Node.js 怎麼看都是一門後端語言,有一個穩定的JIT, V8 後面幫忙撐著,Node.js 發展到現在錯誤發生率越來越低,效能越來越好,容錯性也提高許多,距離一個可發展的語言,其實是個選擇。

但是前端 JavaScript 又是另外一回事...

fillano iT邦超人 1 級 ‧ 2012-04-26 14:23:52 檢舉

Javascript真的是好上手但是很難精通的東西,我也花了幾年看spec寫測試驗證程式來搞懂他,然後問題才慢慢變少。就如同Crockford在the good part上提到:「JavaScript is Lisp in C's clothing」...他是一個具備相當豐富functional programming特性的語言,弄清楚這些東西,才真正了解這個語言。這些東西,不管在client size或是在server side都一樣重要的。

有一些會被認為「奇怪」的特性,其實在規格裡面也都制定的很清楚,只是如果用其他語言的「直覺」來想像的話,可能就會有錯誤的觀念。

我要發表回答

立即登入回答