本文目錄一覽:
- 1、為什麼 Web 前端開發不拋棄 HTML 和 CSS,用純 JavaScript 開發
- 2、讓你的 Node.js Web 應用程序更快的 10 個技巧
- 3、直接用js jsp進行web開發是怎麼實現的
- 4、如何利用React.js開發出強大Web應用
- 5、如何利用AngularJS打造一款簡單Web應用
- 6、用nodejs開發web應用,用哪個框架好?express?還是其他什麼
為什麼 Web 前端開發不拋棄 HTML 和 CSS,用純 JavaScript 開發
首先要確定,即使拋開遊戲不論,一般的Web應用或者網站,完全用JavaScript開發也是可行的。比如ExtJS、webOS的Enyo等。但是主流Web開發很少採用全JS的方案。原因大體有以下幾點:
1. 注重考慮那些無法運行JS的用戶代理。
用
戶使用不支持JS的瀏覽器(比如較老的手機瀏覽器),或者禁用腳本。當然你可以選擇忽略這一小撮用戶,尤其是現在絕大多數網站和應用也是如此選擇的,但是
至少我們應該對堅持考慮無JS情況的開發者予以基本的尊重。此外,如 Mobile
Transcoder或某些手機瀏覽器的「極速模式」是基於伺服器端對網頁的解析和重組,是否能支持JS很夠嗆。
更重要的因素是SEO friendly。如果是全JS生成的網頁,搜索引擎無法索引內容。這一點對於許多網站是性命攸關的。
注意,有人提到screen reader。但絕大多數讀屏軟體是根據DOM來的,因此全部由JS生成DOM也不會有問題。然而這前提是JS所生成的DOM是符合accessibility要求的。
2. 注重HTML/CSS本身的優點。
誠然JS本身也可以通過精心設計的框架和庫來實現分離等所有HTML/CSS模型的優點。但是存在許多不確定因素:
1) 有足夠好的框架和庫嗎?
要
考慮是否能滿足你的業務需求,還可能要考慮性能、可擴展性、之前提到的accessibility、學習曲線、工具鏈,乃至此框架和庫的長久的生存(有人
維護,修bug、加新功能比如對HTML5新API的支持之類的)。關鍵是,理論上說JavaScript具有更高的彈性,但是更大的自由度未必能得到更
好的
2) 框架和庫給出的抽象模型和HTML/CSS模型的阻抗是否匹配?
假如該框架或庫本質上仍然使用HTML/CSS模型,只是改變了語法(比如從markup改為json),那麼其提供的好處在哪裡?僅僅是語法統一?
如
果該框架或庫有自己獨立的抽象層,比如widget/component等,那麼它是建築在HTML/CSS之上的額外抽象層(即最終映射到HTML
/CSS),還是僅僅以HTML/CSS為純粹實現工具?對於前者,實際上最終會回歸HTML/CSS模型。而後者,可以參考的經驗教訓就是 WebForm和JSF。
3) 框架和庫所設定的約束能否在開發中一以貫之的執行?
無
論是理論或者現實,HTML/CSS模型都算不上完美。但是至少是清晰和較容易被一致的執行的。但是單一語言即使提供分層機制,也容易被繞過——尤其是框
架和庫本身不夠好的情況下,可能由於不能滿足需求、有bug等情況而傾向於hack之,更不要說deadline緊迫時。
3. 注重性能。
須
知,最終Web應用、頁面是在瀏覽器中執行,而瀏覽器完全是按照HTML/CSS所設計。拋開Canvas不論,純JS的實現最終還是要生成DOM。從性
能的角度看,純JS生成DOM自然趕不上直接的markup。同樣的道理,就算用CSS預處理器也都會在部署時預先編譯——儘管在運行時可以做出更牛逼的
特性(然而實際上目前我不知道有任何CSS預處理器幹了這樣的事情——因為它們都是按照預編譯的場景設計的),再如HTML/CSS是按照漸進顯示優化的
(頁面不用全下載完就可以看部分),而純JS的架構沒有精心設計是很難做到的(比如json數據全部下載完你才能parse,數據才可用,DOM才能生
成)。
[補充:儘管LESS是可以在運行時執行的,但是從性能的角度出發是不合適的,因為CSS通常必須在頁面rendering之前就全部就位。而運行時產生CSS,
就要求在頁面rending之前至少要先下載執行LESS的腳本,然後解析編譯你的.less源代碼。這個性能開銷至少目前還不容忽視。]
[補
充:性能優化的另一點是基於HTML/CSS的聲明性特點,即只表明high-level的目標,瀏覽器才能獲得更大的優化自由度。比如CSS
transition/animation,與JavaScript通過修改style達到效果比,前者性能表現要好得多。]
4. 注重Web開發的獨特特點。
1) HTML/CSS 都是聲明式的,也就是其本身並不希望是程序員來編程。當然,一個編程語言能幹所有的事情,但是即使考慮編程本身,為什麼在通用編程語言之外還要有SQL、還有以各種語法寫的配置文件?
2) HTML/CSS是基於標準的。這與 WebForm、JSF、Flash/Flex等私有技術或一個語言和平台下的標準有天壤之別。具體就不展開了。
3)
Web開發和一般應用開發有個重大區別是,Web應用、網頁的最終表現和行為,或者說Web的用戶體驗,並不是完全由開發者決定的,而是開發者和用戶共同
決定的。用戶選擇不同的設備、不同的瀏覽器、不同的瀏覽器設置、不同的瀏覽器擴展等,都能影響結果。這是缺點,也是優點。看你如何體會了。這裡具體不展
開。只是一點,純JavaScript開發通常表示你想更多的控制用戶體驗,但這並非簡單的多寫代碼就能做到。
讓你的 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、reduce和。forEach為了克服瀏覽器兼容性問題,我們一直在前端使用一些客戶端庫。但是使用 Node.js,您可以確切地知道 Google 的 V8 JavaScript 引擎支持哪些操作。因此,您可以直接使用這些內置函數在伺服器端操作集合。
Nginx是一個小巧輕便的 Web 伺服器,可用於減少 Node.js 伺服器上的負載。您可以配置 nginx 以提供靜態內容,而不是從 Node 提供靜態文件。您還可以設置 nginx 以使用 gzip 壓縮響應,以便整體響應大小較小。因此,如果您正在運行生產應用程序,您可能希望使用 nginx 來提高速度。
最後,通過將多個 JS 文件壓縮併合並為一個,可以極大地提高您的 Web 應用程序速度。當瀏覽器遇到一個
直接用js jsp進行web開發是怎麼實現的
jsp是服務端編譯執行的。js是頁面瀏覽器解釋執行的,二者執行的時機不同的。
1 JAVA是和C/C++一個等級的強類型編程語言,是純面向對象的,比起JSP和JAVASCRIPT要複雜的多,一般學好JAVA就能很容易轉向其他兩門語言。
2 JSP是JAVA SERVER PAGE的首字母縮寫,顧名思義,是JAVA的服務端頁面,其動態語法部分完全是JAVA規範。JSP是和ASP,PHP一樣的伺服器端語言,主要用來製作網站後台的技術(但現在一般不使用了,2014年起基本都開始使用模板引擎技術如velocity 等)。
3 JAVASCRIPT從其名稱含義是JAVA腳本,是在瀏覽器中運行的腳本語言,由於其大部分語法規範取自於JAVA語法規範,所以取名為JAVASCRIPT(其實和JAVA沒多大關係,是由Netscape公司的Brendan Eich,在網景導航者瀏覽器上首次設計實現而成。因為Netscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript)。JAVASCRIPT是一門基於對象的弱類型腳本編程語言,主要用來製作網頁前台的技術.並且是現在比較熱門的AJAX技術的核心.
總的來說Java是用於後台的編程語言,JSP和JavaScript是用於前台頁面編程
如何利用React.js開發出強大Web應用
。以下列代碼作為範例:
script src=””/script script src=””/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應用程序。這主要是因為大家需要使用的全部功能都能夠由該框架自行提供,而且其在初始設計之時就充分考慮到創建高複雜性應用程序的種種需要。
如何利用AngularJS打造一款簡單Web應用
利用AngularJS打造一款簡單Web應用:
!DOCTYPE html
html lang=”en” ng-app=”myApp”
head
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″
titleAngularJS Firebase Web App/title
link href=”justified-nav.css” rel=”stylesheet”
/head
body
div class=”container”
div class=”jumbotron” style=”padding-bottom:0px;”
h2AngularJS Firebase App!/h2
/div
form class=”form-signin” role=”form”
input type=”email” class=”form-control” placeholder=”Email address” required=”” autofocus=””
input type=”password” class=”form-control” placeholder=”Password” required=””
label class=”checkbox”
a href=”#” Sign Up/
/label
button class=”btn btn-lg btn-primary btn-block” type=”submit”Sign in/button
/form
/div
/body/html
use strict’;
angular.module(‘myApp.home’, [‘ngRoute’])
// Declared route
.config([‘$routeProvider’, function($routeProvider) {
$routeProvider.when(‘/home’, {
templateUrl: ‘home/home.html’,
controller: ‘HomeCtrl’
});
}])
// Home controller
.controller(‘HomeCtrl’, [function() {
}]);
‘use strict’;
angular.module(‘myApp’, [
‘ngRoute’,
‘myApp.home’ // Newly added home module
]).
config([‘$routeProvider’, function($routeProvider) {
// Set defualt view of our app to home
$routeProvider.otherwise({
redirectTo: ‘/home’
});
}]);
script src=”home/home.js”/script
用nodejs開發web應用,用哪個框架好?express?還是其他什麼
剛開始學的時候建議用原生的http,稍微高級點用connect中間件,如果注重效率的話,就用框架級別的express,自己再選個模板jade,ejs什麼的,上手還是比較容易的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304103.html