㈠ 如何使用node.js web開發
第二步:安裝nodejs 載完雙擊 node-v0.吧.依陸-x吧陸.msi始安裝nodejs默認安裝C:\Program Files\nodejs面 第三步:安裝相關環境 打C:\Program Files\nodejs目錄發現面自帶npm,直接用npm安裝相環境既 進入node.js command prompt 命令窗口 進入nodejs 安裝目錄 C:\Program Files\nodejs 鍵入命令:cd C:\Program Files\nodejs 既 現始安裝相關環境 鍵入命令:npm install express 車等待安裝express........ 鍵入命令:npm install jade 車等待安裝jade........ 鍵入命令:npm install mysql車等待安裝mysql........ ........安裝組件取決於環境搭建需求 默認情況述組件都安裝C:\Program Files\nodejs\node_moles文件夾 nodejs相關組件自查找路徑 第四步:創建工程 現已經express express命令安裝全局才起作用! 所express安裝候要用 npm install express -g 或者直接修改全局路徑: npm config set prefix "C:\Program Files\nodejs" npm config set cache "C:\Program Files\nodejs\cache" (先建cache目錄) 鍵入:express myapp (myapp隨意起工程名稱) 發現 C:\Program Files\nodejs\myapp 目錄 默認情況:自創建 幾文件做解釋相信發經驗同都能眼明 復制node_molesmyapp面 環境搭建完工面做demo測試 myapp新建helloworld.js var http = require("http"); http.createServer(function(request, response) { response.writeHead(貳00, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(吧吧吧吧); console.log("nodejs start listen 吧吧吧吧 port!"); 進入node.js command prompt 命令窗口,進入C:\Program Files\nodejs\myapp目錄 鍵入node helloworld.j
㈡ 為何Web前端開發不拋棄HTML和CSS,用純JavaScript 開發
簡單的web網頁開發,HTML+CSS 學習比較容易,門檻低,HTML的語義可以讓屏幕閱讀器方便的讀取頁面的內容,搜索引擎不需要轉義js直接抓取html裡面的內容。復雜的web開發,web app,RIA。html只是作為結構存在,可以認為它是一套組件庫,相對於情況一,一個頁面的代碼里肯定就沒幾行html,都被寫到了js裡面(當然最終得到的還是滿滿的html)。
當整屏幕的input輸入框的時候,難道就那麼不稀罕html提供給你的表單功能而硬要自己做一個?游戲開發,canvas就直接用js。
㈢ web前端開發是什麼
web前端是指網站的前端開發,相對於後端而言,主要是給用戶呈現網站等界面。
web前端屬於IT行業中熱門的崗位,相比較於其他的IT技術來說,是比較簡單的。前端主要負責實現網站或者APP頁面,涉及的代碼量比後端開發小,但薪資和發展都不差,課程是目前前沿的前端技能叫web全棧工程師。
web全棧工程師5.0課程包括:
①計算機基礎以及PS基礎
②前端開發基礎(HTML5開發、JavaScript基礎到高級、jQuery網頁特效、Bootstrap框架)
③移動開發
④前端高級開發(ECMAScript6、Veu.js框架開發、webpack、前端頁面優化、React框架開發、AngularJS 2.0框架開發等)
⑤小程序開發
⑥全棧開發(MySQL資料庫、Python編程語言、Django框架等)
⑦就業拓展(網站SEO與前端安全技術)
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
㈣ Web前端新手應該知道的JavaScript開發技巧有哪些
今天小編要跟大家分享的文章是關於Web前端新手應該知道的JavaScript開發技巧有哪些?熟悉Web前端的小夥伴都知道,Javascript
的很多擴展的特性是的它變得更加的犀利,同時也給予程序員機會創建更漂亮並且更讓用戶喜歡的網站。
盡管很多的開發人員都樂於頌揚javascript,但是仍舊有人看到它的陰暗面。
使用很多javascript代碼的Web頁面會載入很慢,過多的使用javascript使得網頁醜陋和拖沓。很快如何有效地使用
javascript成為一個非常火熱的話題。
今天小編就為Web前端新手准備了這篇JavaScript開發技巧,希望能夠對你有所幫助,下面我們一起來看一看吧!
1、盡可能的保持代碼簡潔
可能大家都聽到過了N遍這個代碼簡潔問題了。作為一個開發人員你可能在你的代碼開發過程中使用了很多次,但千萬不要在js開發中忘記這點。
§盡量在開發模式中添加註釋和空格,這樣保持代碼的可讀性
§在發布到產品環境前請將空格和注釋都刪除,並且盡量縮寫變數和方法名
§使用第三方工具幫助你實現壓縮javascript。
2、思考後再修改prototypes
添加新的屬性到對象prototype中是導致腳本出錯的常見原因。
yourObject.prototype.anotherFunction='Hello'
yourObject.prototype.anotherMethod=function(){...}
在上面代碼中,所有的變數都會被影響,因為他們都繼承於yourObject。這樣的使用會導致意想不到的行為。所以建議在使用完後刪除類似的修改。
yourObject.prototype.anotherFunction='Hello'
yourObject.prototype.anotherMethod=function(){};
test.anotherMethod();
deleteyourObject.prototype.anotherFunction='Hello'
deleteyourObject.prototype.anotherMethod=function(){};
3、DebugJavascript代碼
即使最好的開發人員都會犯錯。為了最大化的減少類似錯誤,請在你的debugger中運行你的代碼,確認你沒有遇到任何細微的錯誤。
4、避免Eval
你的JS在沒有eval方法的時候也可以很好的工作。eval允許訪問javascript編譯器。如果一個字元串作為參數傳遞到
eval,那麼它的結果可以被執行。
這會很大的降低代碼的性能。盡量避免在產品環境中使用eval。
5、最小化DOM訪問
DOM是最復雜的API,會使得代碼執行過程變慢。有時候Web頁面可能沒有載入或者載入不完整。最好避免DOM。
6、在使用javascript類庫之前先學習javascript
互聯網充斥著很多的javascript類庫,很多程序員都往往使用js類庫而不理解負面影響。強烈建議你在使用第三方類庫之前學習基本的JS
代碼,否則,你就准備著倒霉吧。
7、不要用「SetTimeOut」和「Setinterval」方法來作為「Eval」的備選
setTimeOut("document.getID('value')",3000);
在以上代碼中document.getID(『value』)在setTimeOut方法中被作為字元串來處理。這類似於eval
方法,在每個代碼執行中來執行一個字元串,因此會降低性能,因此,建議在這些方法中傳遞一個方法。
setTimeOut(yourFunction,3000);
8、[]比newArray();更好
一個常犯的錯誤在於使用當需要數組的時候使用一個對象或者該使用對象的時候使用一個數組。但是使用原則很簡單:
「當屬性名稱是小的連續整數,你應該使用數組。否則,使用一個對象」_DouglasCrockford,JavaScript:Good
Parts的作者.
建議:
vara=[ƇA',ƈB'];
避免:
vara=newArray();
a[0]="1A";
a[1]="2B";
9、盡量不要多次使用var
在初始每一個變數的時候,程序員都習慣使用var關鍵字。相反,建議你使用逗號來避免多餘的關鍵字,並且減少代碼體積。如下:
varvariableOne='string1',
variableTwo='string2',
variableThree='string3'
10、不要忽略分號「;」
這往往是大家花費數個小時進行debug的原因之一。
我很確信你肯定也在其它的文章中閱讀過以上相關的內容,但是大家可能往往都忽略了很多基本的規則。你是不是也曾經忽略過分號。是不是也遇到過eval
關鍵字問題導致性能問題?
以上就是小編今天為大家分享的關於Web前端新手應該知道的JavaScript
開發技巧有哪些?的文章,希望本篇文章能夠對剛剛接觸Web前端行業的新手們有所幫助。想要了解更多Web前端知識記得關注北大青鳥Web前端培訓官網!
*聲明:內容與圖片均來源於網路(部分內容有修改),版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
㈤ 讓你的 Node.js Web 應用程序更快的 10 個技巧
由於其事件驅動和非同步特性,Node.js 已經飛速發展。但是,在現代網路中,僅僅快速是不夠的。如果您計劃使用 Node.js 開發您的下一個 Web 應用程序,您必須採取一切可能的步驟來確保您的應用程序比平時更快。本文介紹了 10 個技巧,這些技巧可以極大地加快基於 Node 的 Web 應用程序的速度。所以,讓我們一一看看。
在構建 Web 應用程序時,有時您需要進行多個內部 API 調用來獲取各種數據。例如,考慮一個用戶儀錶板。在渲染儀錶板時,您可以執行以下假設調用:
為了檢索這些詳細信息,您可以為每個函數創建一個單獨的中間件並附加到儀錶板路由。但是這種方法的問題是一個函數必須等待前一個函數完成。另一種選擇是並行執行這些調用。
眾所周知,由於 Node.js 的非同步特性,它在並行運行多個函數方面非常高效。我們應該利用這一點。由於我上面提到的功能不相互依賴,我們可以並行運行它們。這將減少中間件的數量並大大提高速度。
為了使事情並行化,我們可以使用 async.js,這是一個有助於馴服非同步 JavaScript 的 Node 模塊。這是一個片段,展示了如何使用 async.js 並行運行不同的函數:
如果您想了解有關 async.js 的更多信息,請務必查看該項目的GitHub頁面。
按照設計,Node.js 是單線程的。由於這個事實,同步代碼可能會鎖定整個應用程序。例如,大多數文件系統 API 都有其同步對應物。以下代碼段顯示了如何同步和非同步完成文件讀取操作:
但是如果您執行長時間運行和阻塞操作,您的主線程將被阻塞,直到操作完成。這會大大降低您的應用程序的性能。因此,請確保您始終在代碼中使用非同步 API,至少在性能關鍵部分。在選擇第三方模塊時也要小心。即使您採取一切預防措施來避免同步代碼,外部庫也可能會進行同步調用,從而影響您的應用程序的性能。
如果您正在獲取一些不經常更改的數據,您可以將其緩存以提高性能。例如,使用以下代碼片段獲取最新帖子以顯示在視圖上:
如果你發博文不是太頻繁,可以緩存posts數組,間隔後清空緩存。例如,我們可以使用redis模塊來實現這一點。為此,您需要在伺服器上安裝 Redis。然後您可以使用調用的客戶端node_redis來存儲鍵/值對。以下片段顯示了我們如何緩存帖子:
因此,首先我們檢查帖子是否存在於 Redis 緩存中。如果是這樣,我們從緩存中傳遞posts數組。否則,我們從資料庫中檢索內容,然後將其緩存。此外,在一段時間後,我們可以清除 Redis 緩存,以便獲取新內容。
開啟 gzip 壓縮會極大地影響 webapp 的性能。當與 gzip 兼容的瀏覽器請求某些資源時,伺服器可以在將響應發送到瀏覽器之前對其進行壓縮。如果您不使用 gzip 壓縮靜態資源,瀏覽器可能需要更長時間才能獲取它。
在 Express 應用程序中,您可以使用內置的express.static()中間件來提供靜態內容。此外,您可以使用compression中間件來壓縮和提供靜態內容。這是一個顯示如何執行此操作的片段:
隨著 AngularJS、Ember、Meteor 等許多強大的客戶端 MVC/MVVM 框架的出現,創建單頁應用程序變得非常容易。基本上,您只需公開向客戶端發送 JSON 響應的 API,而不是在伺服器端呈現。在客戶端,您可以使用框架來使用 JSON 並在 UI 上顯示。從伺服器發送 JSON 可以節省帶寬,從而提高速度,因為您不會在每個請求中發送布局標記。相反,您只需發送純 JSON,然後在客戶端呈現。
看看我的這個教程,它描述了如何使用 Express 4 公開 RESTful API。我還寫了另一個教程,展示了如何使用 AngularJS 與這些 API 交互。
在典型的 Express Web 應用程序中,會話數據默認存儲在內存中。當您在會話中存儲太多數據時,會增加伺服器的大量開銷。因此,您可以切換到其他類型的存儲來保留會話數據,或者嘗試最小化會話中存儲的數據量。
例如,當用戶登錄到您的應用程序時,您可以只將他們存儲id在會話中,而不是存儲整個對象。隨後,對於每個請求,您都可以從id. 您可能還想使用 MongoDB 或 Redis 來存儲會話數據。
假設您有一個博客應用程序,它在主頁上顯示最新帖子。你可能會寫這樣的東西來使用 Mongoose 獲取數據:
但問題是find()Mongoose 中的函數會獲取對象的所有欄位,並且對象中可能有幾個欄位在Post主頁上不需要。例如,comments是一個這樣的欄位,它包含特定帖子的一組評論。由於我們沒有顯示評論,我們可能會在獲取時將其排除。這肯定會提高速度。我們可以這樣優化上面的查詢:
並非所有瀏覽器都支持對集合進行不同的操作,例如map、rece和。forEach為了克服瀏覽器兼容性問題,我們一直在前端使用一些客戶端庫。但是使用 Node.js,您可以確切地知道 Google 的 V8 JavaScript 引擎支持哪些操作。因此,您可以直接使用這些內置函數在伺服器端操作集合。
Nginx是一個小巧輕便的 Web 伺服器,可用於減少 Node.js 伺服器上的負載。您可以配置 nginx 以提供靜態內容,而不是從 Node 提供靜態文件。您還可以設置 nginx 以使用 gzip 壓縮響應,以便整體響應大小較小。因此,如果您正在運行生產應用程序,您可能希望使用 nginx 來提高速度。
最後,通過將多個 JS 文件壓縮並合並為一個,可以極大地提高您的 Web 應用程序速度。當瀏覽器遇到一個
㈥ Web前端開發知識點之JavaScript的介紹與語法
今天小編要跟大家分享的文章是關於Web前端開發知識點之JavaScript的介紹與語法。正在學習web前端相關知識的小夥伴們來和小編一起看一看吧,希望本篇文章能夠對大家有所幫助。
一、JavaScript介紹
JavaScript是一門客戶端腳本語言,是適應動態網頁製作的需要而誕生的一種編程語言。這門語言可用於HTML和web,更可廣泛用於伺服器、PC、筆記本電腦、平板電腦和智能手機等設備。
在HTML基礎上,使用Javascript可以開發互動式Web網頁,可以增強用戶和HTML頁面的交互過程,可以控制HTML元素讓頁面有一些動態的效果,增強用戶的體驗。
JavaScript使有規律地重復的HTML文段簡化,減少下載時間。
二、JavaScript語法
①與HTML的結合方式
JavaScript與HTML的結合方式有兩種,一種是內部JavaScript,一種是外部JavaScript,定義的方式與CSS類似。
內部JavaScript需要定義一對
外部JavaScript也需要定義一對
注意:JavaScript可以定義在HTML頁面的任何地方,但是定義的位置會影響執行的順序。而且可以在HTML文檔中放入不限數量的腳本。通常的做法是把函數放入
②注釋
JavaScript的注釋與java相同,一種是「//」單行注釋,一種是「/**/」多行注釋。例如
//這是單行注釋
/*
這是多行注釋
這是多行注釋*/
③數據類型
JavaScript的數據類型包括兩大類:原始數據類型和引用數據類型。
原始數據類型包括:
·number數字:包括整數、小數和NaN(notanumber不是數字的數字類型)
·string字元串
·boolean布爾型:包括true和false
·null:一個對象為空的佔位符
·undefined:未定義
引用數據類型就是指對象類型。
④變數
所謂變數就是一小塊存儲數據的內存空間。java語言是強類型語言,在開辟變數存儲空間時就定義了存儲數據的類型,而且只能存儲固定類型的數據;JavaScript是弱類型語言,在開辟變數存儲空間時不定義存儲數據的類型,可以存儲任意類型的數據。
聲明變數用var關鍵字,例如:
vara=3;
我們可以使用typeof運算符獲取變數的類型。
⑤運算符
JavaScript中的運算符與java中的基本一致,大家可以參考這個鏈接復習一下,接下來我再說說JavaScript里比較特殊的運算符。
在說運算符之前先說一個注意事項:在JavaScript中如果運算數不是運算符所要求的的類型,那麼JavaScript引擎會自動將運算數進行類型轉換。
因此在JavaScript中1=="1"的結果是true,那麼我想讓他的結果是false該怎麼辦呢?所以JavaScript引入了新的運算符全等於(===),此時1==="1"的結果就是false了。
⑥流程式控制制語句
JavaScript中流程式控制制語句包括if...else...、switch、while、do...while...、for等,語法規則與java中完全一致,點擊上方關鍵詞可查看java語法規則。
⑦特殊語法(不建議)
JavaScript語句以;結尾,如果一行只有一條語句則;可以省略。
變數定義是使用var關鍵字,也可以不使用。
以上就是小編今天為大家分享的關於Web前端開發知識點之JavaScript的介紹與語法的文章,希望本篇文章能夠對正在從事web前端工作和學習的小夥伴們有所幫助,想要了解更多web前端知識記得關注北大青鳥web培訓官網,最後祝願小夥伴們工作順利,成為一名優秀的web前端工程師。
文章來源:原創凱哥的故事凱哥的故事
㈦ 如何利用React.js開發出強大Web應用
關於React.js,首先需要留意的就是它在默認情況下允許大家保證動態站點能夠始終擁有強大的穩定性,這意味著我們能夠充分運用各類靈活的交互設計效果而不必擔心給站點運行帶來影響。這絕對是一項偉大的壯舉,事實上我們甚至很難在利用React.js進行應用程序開發時造成任何故障。
在利用React.js開發強大Web應用時,另外還有幾項提示必須加以強調——這些提示絕對值得一試而且極具實用性,特別是對於那些剛剛上手這套框架的朋友來說。它們將幫助大家更好地處理未來開發工作中可能面對的各種問題。再有,大家還能夠以遠超想像的速度實現應用開發。
原型設計
如果大家打算利用React.js創建一款應用程序,那麼各位無需完成整套工具設置即可在自己的瀏覽器當中輕松便捷地搞定原型設計。是的,其實際操作過程與我們的表述同樣簡單。舉例來說,如果大家決定利用可選JSX語法自行編寫組件,其編寫方式以及代碼內容看起來幾乎與HTML如出一轍。
作為開發第一步,我們首先需要製作一份簡單的文檔,其中同時包含React.js與JSX轉換工具。以下列代碼作為範例:
<script src="http://fb.me/react-0.13.0.js"></script> <script src="http://fb.me/JSXTransformer-0.13.0.js"></script> </head> <body> <script type="text/jsx"> /** @jsx React.DOM */ </script> </body> </html>
組件結構
React.js當中的應用程序必須通過已經在層級結構當中布置完成的組件加以構成。如果大家希望在開發工作當中輕松使用應用程序的每個組成部分,那麼必須首先拿出時間弄清楚其在層級結構中的具體作用並以此為基礎勾勒應用原型。這意味著,每個組件都負責解決一項特定任務。而在某些復雜組件當中,我們還需要將其拆分成數個簡單組件,從而確保一次只解決一個問題。這也是我們充分發揮React.js強大能力的必要前提。
屬性與狀態
React.js當中的數據主要分為兩種類型:
·屬性:這類數據會在不同組件之間往來傳遞
·狀態:這類數據會始終被保存在某組件當中
組件的屬性(即往來於不同組件間的信息)不可修改與變更,但組件的狀態卻能夠隨時加以調整(即組件內部的信息)。這代表著React.js中的一切都具備與之對應的真實源。
因此,當我們利用React.js創建一款應用程序時,必須要在Web應用開發中做出一項決策——各組件擁有怎樣的數據,這些數據的主來源又是什麼。一旦解決了這個問題,大家就能夠輕松完成應用創建的其它工作。
在這種情況下,我們只需要考量三種數據類型:
網路數據
用戶輸入數據
預測數據
具體來參考以下示意圖:
其中網路數據將由網路及線路組件所獲取。其通常代表著大量數據,而且為了不影響應用的運行速度,大家需要在外部對其加以處理,而後再把結果交付至我們創建的應用。
組件通信機制
在這里,數據被設計為自上而下貫穿整個組件結構,但大家有時候也需要以自下而上的方式逆向交付數據以實現應用程序交互性。在這種情況下,我們就需要利用特定的技術手段實現這種「數據逆流」。下面來看幾種實現此類目標的方式:
·大家可以選擇使用回調屬性的方式,這是最理想也最簡單的解決方案,因為此時組件只需要同其直接上游對象進行數據共享。React.js能夠自動對每個實例者組件方法綁定,因此維護工作不會佔用我們大量精力。下面來看具體示例:
return ; } }); var Child = React.createClass({ render: function() { return Click me; } });
·如果大家希望實現的是其它抵達通知機制,那麼可以利用單一系統實現發布/訂閱。這種方式非常靈活而且同樣易於維護。只需使用PubSubJS這類庫,大家就能夠隨意對某一組件的生命周期方法進行綁定與解綁。
相關代碼示例如下:
var Parent = React.createClass({ handleMyEvent: function(e) {...}, componentWillMount: function() { window.addEventListener("my-event", this.handleMyEvent, false); }, componentWillUnmount: function() { window.removeEventListener("my-event", this.handleMyEvent, false); }, render: function() {...} }); var Grandchild = React.createClass({ handleClick: function(e) { var customEvent = new CustomEvent("my-event", { detail: { ... }, bubbles: true }); React.findDOMNode(this.refs.link).dispatchEvent(customEvent); }, render: function() { return Click me; } });
組件生命周期
組件永遠擁有著與其API緊密關聯的生命周期。在這種情況下,其生命周期包括啟動、更新與卸載三種狀態。而這些功能已經被內置在組件的定義當中。舉例來說:
componentWillMount與componentWillUnmount 方法都被用於添加或者移除事件偵聽機制。當然還有其它多種方法能夠幫助我們實現對組件狀態及屬性的控制。
一旦我們建立起一套瀏覽器內運行環境,接下來就可以將UI方案拆分為多個簡單組件。接下來的任務是弄清應用程序運行需要具備哪些數據,這些數據將處於何種位置且如何與應用進行共享。當這些問題得到解決,大家將能夠獲得可進行試用體驗的已創建應用。
利用React.js,我們能夠非常輕松地開發出強大且穩定的Web應用程序。這主要是因為大家需要使用的全部功能都能夠由該框架自行提供,而且其在初始設計之時就充分考慮到創建高復雜性應用程序的種種需要。
㈧ 如何選擇Node.js Web開發框架
首先,我們必須要弄清楚的是,我們需要的是——
程序 or 框架?
程序是已經成型的應用,你需要的是為它搭建環境、添加配置,然後就可以運行起來;框架則是應用的骨架,你需要為它添加數據模型、業務邏輯,它才能成為應用,開始提供服務。
事實上,對於Web開發來說,程序和框架的區別正越來越模糊,比如幾乎婦孺皆知的Wordpress,它是一個博客程序,但它豐富的插件以及高度的 自定義能夠支持很大程度上的二次開發,在這點上它比起一些PHP框架也並不遜色。我個人認為,如果重心在於提供服務而不是掌握技術,有WordPress 這樣的程序是沒有必要使用框架的。
可惜的是,由於Nodejs還很年輕,目前還沒有WordPress這樣的程序,因此目前在Node.js開發里,如果想做出自己想要的作品,框架是必然的選擇。如果是某些特定類型的應用,可以嘗試一些開源的程序,比如要用Nodejs做博客,有Hexo、Ghost等。
回到頂部
Node.js Web框架有哪些?
Node.js里的Web框架分為API框架和Web應用框架。前者能夠開發出RESTful的API,後者也能開發出RESTful API,但還包括模板、渲染等為前端所准備的功能。
API框架的使用場景是為跨平台應用提供統一的數據模型,而渲染由前端/客戶端自行解決。目前比較知名的API框架有
restify(文檔、Github、NPM)
ActionHero.js(官網、Github、NPM)
LoopBack(官網、Github、NPM)
Frisby(官網、Github、NPM)
Fortune.js(官網、Github、NPM)
Web應用框架顧名思義,就是為了打造Web應用所開發的框架。這里有兩種風格的Web應用框架。
一個是Sinatra風格,另一個是Rails風格。Sinatra和Rails都是Ruby語言的Web框架,後者的影響力更大也更為知名。這里簡單的解釋一下兩種風格是什麼意思。
Sinatra風格是指高度可配置,注重開發的自由度。代表性的Nodejs Web框架有:
Express(官網、Github、NPM)TJ大神開發,Node.js官方推薦
hapi(官網、Github、NPM)
koa.js(官網、Github、NPM)
flaliron(官網、Github、NPM)
total.js(官網、Github、NPM)
locomotive(官網、Github、NPM)
Rails風格則是指不重復自己和約定優於配置,以及嚴格遵循MVC結構開發。代表性的框架有:
Sails.js(官網、Github、NPM)
geddy(官網、Github、NPM)
CompoundJS(官網、Github、NPM) 原railswayjs
這兩種風格無所謂誰優誰劣,全憑使用者的偏好。
而在這兩種Web框架之外,還有更大型的框架,即全棧框架,其中的代表是MEAN。
回到頂部
MEAN?
MEAN指MongoDB+Express+Angular.js+Node.js,這一組合包括運行環境、資料庫、Web框架和前端引擎。被稱為 全棧框架(Full-stack framework)。這其中除了Node.js之外,每一個都是可替換的,目標是創建從前端到後端,全部使用javascript的Web應用。
由於這一框架的完善性,有人將其稱為LAMP的接班人。LAMP即PHP的典型運行環境,Linux+Apache+MySql+PHP,被大量的用於各種虛擬主機上。
MEAN看似龐大,但事實上要構建完整的現代化Web應用,特別是SPA(單頁面應用),這幾個組件都是難以缺少的,並且,其中每一項幾乎都是目前 情況下的最佳選擇,因此用於學習和重頭開始打造新的Web應用是非常合適的。但由於實際業務的獨特性,很可能要替換其中的組件,比如用Mysql來替換 MongoDB,因此,學習其中的原理和架構,打造自己的類MEAN框架也是一種選擇。
作為個人和小團隊來說,全棧框架MEAN基本上足夠了,但目前大多數全棧框架還包含一項特性,那就是實時,擁有實時功能的框架我們又稱為實時框架。
回到頂部
實時框架好嗎?
實時框架(Real-time framework)指包含了webSocket的雙向通信功能,能夠在伺服器和客戶端做到實時通信的框架。
服務端和客戶端自由通信的需求一直都在,但由於HTTP協議本身的局限性,因此催生了Comet等變通的方法,但即使這樣也離實時相距甚遠。而當 Node.js興起後,另一個HTML5技術webSocket也漸漸成熟,人們突然發現,實時通信一下子變得觸手可及,於是webSocket技術在 Node.js中得到大量的應用,其中最為知名的模塊就是socket.io,而各種全棧框架也紛紛加入實時特性來應對更廣闊的開發需求。
目前有代表性的實時框架有:
Meteor(官網、Github、NPM)
MEAN.io(官網、Github、NPM)
Derby(官網、Github、NPM)
SocketStream(官網、Github、NPM)
不過說實話,目前能看到的實時通信的應用場景其實不多,其中大多集中於聊天室、to-do、實時圖表、在線游戲等領域。其他領域使用實時特性不但沒必要,而且是對伺服器資源的浪費。因此目前是否要採用實時框架,要看具體的項目而定。
以上基本就是Node.js Web框架的現狀了,相信看到這里,對於選擇何種框架讀者已經心裡有數了吧。最後再介紹一個容易搞混的概念,和解釋一下我的選擇。
回到頂部
YEOMAN?
第一次見到這個詞,我還以為它和MEAN有什麼聯系。事實上,它們是截然不同的兩個東西。YEOMAN由YO(腳手架)、grunt(構建工具)、bower(包管理器),它代表的是一種工作流,與框架開發的思維方式完全不同。具體的介紹可見這里。
YEOMAN能夠和框架達到類似的目的,都是為構建一個Web應用做好准備,但是要不要採用YEOMAN,則是見仁見智。我個人的看法是,學習 YEOMAN本身就需要不少時間,並且有一定的學習門檻。至少在目前,使用框架開發還是相對經濟的,而如果以後YEOMAN這種模式推廣開來,再來學習也 不遲,更何況有一定的Node.js項目經驗之後再來學習YEOMAN要輕松很多。
事實上,我還是很認可YEOMAN這種Generator+package Manager的模式的,這是因為Node.js本身崇尚微模塊的 概念,即無論是多麼小的功能,都將它們模塊化,甚至大的模塊也要拆分成小的模塊,然後通過搭積木的方式來構建應用。這樣能夠徹底的解耦,對於不容易調試的 Javascript來說,也有助於定位和修復應用中的問題。Generator就是這種理念催生下的產物,通過選擇不同的配置和選項,將積木搭起來。不 過對於這種模式目前大家也還處於實驗當中,不急於進行實際應用。
回到頂部
為什麼我選擇了Hackathon Starter?
在我的個人項目中,使用的是Hackathon Starter,一個Node.js Web應用腳手架。
我使用它的原因是,要求高度可配置,同時又討厭寫一些配置的代碼,因此它對於我來說是很好的選擇。一些全棧框架對我來說,封裝過多,將原生的 Node.js/Express API隱藏掉了,要使用還需要一定的學習成本。而Express這樣的框架又太過簡潔,在實際的項目中使用還需要大量的插件和配置,而這些在 Hackathon Starter中都已經幫我們做好了,同時還有一些示例代碼以供學習,對於新人來說非常友好,可以避免過多的挫折感。
㈨ 如何選擇Node.js Web開發框架
關鍵還是看你的應用場景。是需要一個單體的應用還是微服務化?需要怎樣的認證和授權?資料庫偏好?下面說說我的淺見。
剛開始試玩 Node.js,學習 Express、Koa
如果只是想試試並學習 Node.js 開發後端服務,建議從 Express 開始,因為它夠簡單,而且是很多其他框架的基礎,擴展也容易。如果你對 JavaScript 的 promise 和 async 熟悉,那也可以從 Koa 開始。
開發內容管理站點、簡單的後台管理用 Keystone,不介意使用 mongodb 的用 Meteor
如果你要開發一個不太復雜的內容管理應用,比如一些經常更新內容、圖片的站點,用戶許可權等後台管理等,那麼 KeystoneJS 比較合適,因為它已經內置了很多這些功能。Meteor 當然也適合。
企業應用首選 Egg
Feathers 和 Egg 都適合開發企業應用。有日誌、安全、多進程通信的解決方案,非常便利。Feathers 中文文檔少,使用 Express 和 JWT,偏重實時交互;Egg 由阿里開發,使用 Koa,感覺更適合國內的企業應用開發。
實時 web app 使用 Meteor
如果你要開發一個涉及聊天、物聯網功能的實時應用,那麼 Meteor 和 Feathers 很適合。
構建微服務 REST API 首選 hapi
如果你要開發簡單的幾個微服務後端,那麼 hapi 和 restify 合適。如果是大型的復雜應用,甚至是在現有微服務上構建,那麼 LoopBack 可能是個好選擇,它可以把很多服務 glue 到一起。還可以結合 StrongLoop 的 API 網關一起使用。
靜態網站生成首選 Gatsby,不使用 react 的話用 Hexo。
最後,建議選擇的時候不要太糾結,差不多就行了。因為在項目開始時不可能想得面面俱到,關鍵是大的方向,快點出 MVP。根據多年來的經驗,一個項目要不是很快夭折,要不就是活到被重寫的那一天。用哪一個真的不是太重要,趕緊先選一個干起來吧。