NodeJS作為Web架構中間層的使用

截至2016年12月,中國網民規模已達7.31億。傳統的網站系統是否能夠支撐得起如此龐大的且不斷增長的用戶訪問并且為用戶提供體驗友好的頁面?

一、傳統的前后端:

二、傳統的前后端分離問題:

性能問題:

1、渲染、數據都在客戶端做,影響性能;

2、需要等待資源到齊才能進行,會有短暫白屏與閃動,尤其是網頁由js生成的體驗更差;

3、在低速網絡情況下體驗更差;

重用問題:

1、模版無法重用,造成維護上的麻煩與不一致;

2、邏輯無法重用,前端的校驗后端仍須在做一次;

跨終端問題:

1、業務太靠前,導致不同端重復實現;

2、邏輯太靠前,造成維護上的不易;

即使使用CDN可以提高網站的響應速度,但是面對以上問題,尤其是用戶關心的頁面體驗問題,傳統的網站架構應對起來依然是捉襟見肘。這里提供一種使用NodeJS作為中間件的解決方案。

?

三、重新定義的前后端:

在服務器和瀏覽器之間增加了一個中間層

1、Node.js

Node.js是一個Javascript運行環境。Node.js 使用事件驅動, 非阻塞I/O 模型而得以輕量和高效,非常適合在分布式設備上運行數據密集型的實時應用。Node.js是單進程、單線程運行機制,通過事件輪詢(event loop)來實現并發操作,而且性能很好。

使用NodeJS作為Web中間層的優勢:

a、跨系統、跨終端均可重用頁面數據校驗、邏輯代碼,無需因為新系統、終端的接入而重寫校驗;

b、只在中間件中做一次數據校驗,避免了前端做數據校驗的同時后端也要做校驗的重復,在有效保證數據的有效性的同時降低了團隊整體的工作量;

c、處理數據邏輯,解放了前端既要做頁面渲染又要寫復雜的邏輯,使得頁面開發人員專注于頁面渲染,不僅使得分工更為明確,項目協作效率更高,更重要的是快速響應頁面使得頁面加載更快,用戶體驗更好,避免了瀏覽器長時間顯示空白頁面的不友好體驗;

更多可能:

1)適用于高并發、短事務性數據請求處理的應用場景;

以下是nodejs處理請求提供web service服務與java對比:

Nodejs的高性能以及顯著的io優勢為架構提供了高可伸縮性。

2)技術框架:Sails 提供了建立任何規模的 web 應用所需要的所有功能,特別適合對數據實時更新有較高要求的應用場景;Meteor框架是 Node.js 上非常出色的全棧框架,可以用它構建純Javascript 的實時 Web 和 手機應用;Mean 作為一款全棧的開發框架,幾乎代表了 Mongo DB,Express,Angular和?

Node.js 的組合,幾乎涵蓋了應用開發的所有方面,其開箱即用的工具極大簡化并加快了應用的開發,同時可用于任意大小和復雜度的應用開發。

案例見:天貓、淘寶等(中間層);網易pomelo(服務端)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249168.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Springboot項目修改html后不需要重啟---springboot項目的熱部署

一、spring-boot-devtools 在pom中直接引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency> 設置以下兩項&#xff08…

Hibernate中session的get方法和load方法的區別

一.發送SQL時機&#xff1a; load方法采用延遲加載&#xff08;lazy懶加載&#xff09;&#xff0c;執行到這行代碼的時候&#xff0c;不會發送SQL語句&#xff0c;當真正使用這個對象的數據&#xff08;對象的數據不包括主鍵&#xff09;的時候才發送SQL語句&#xff1b; get…

Node.js Web 開發框架大全《中間件篇》

這篇文章與大家分享優秀的 Node.js 中間件模塊。Node 是一個服務器端 JavaScript 解釋器&#xff0c;它將改變服務器應該如何工作的概念。它的目標是幫助程序員構建高度可伸縮的應用程序&#xff0c;編寫能夠處理數萬條同時連接到一個&#xff08;只有一個&#xff09;物理機的…

windows server 2012 流媒體服務器搭建(直播與點播)

IIS Live Smooth Streaming&#xff08;實時平滑流式處理&#xff09;是微軟下一代流媒體解決方案。該技術是在IIS web中集成媒體傳輸平臺IIS media services&#xff0c;實現利用標準 HTTP Web 技術以及高級 Silverlight 功能&#xff0c;確保在互聯上傳輸質量最佳、播放流暢音…

團隊項目第一篇——NABCD

團隊名稱&#xff1a;筑夢之舟 團隊項目名稱&#xff1a;跑跑 N&#xff08;Need&#xff09;需求&#xff1a; 有許多人在跑步時想了解自己的移動軌跡和跑步距離很不便利&#xff0c;無法了解跑步的日程&#xff0c;我們的軟件就是為了更加方便熱愛跑步的人能夠參加到跑步之中…

Vue warn Failed to mount component: template or render function not defined

問題如圖&#xff0c;造成這類的問題一般有這么幾個原因。 代碼的拼寫問題&#xff0c;當然這是最低級的錯誤vue定義的問題&#xff0c;這里我說明兩點 在組件內部定義組件時&#xff0c;template 對應的必須是html字符串引用外部組件時&#xff0c;vue文件必須以template標簽…

Python實現線性回歸2,梯度下降算法

接上篇 4.梯度下降算法 《斯坦福大學公開課 &#xff1a;機器學習課程》吳恩達講解第二課時&#xff0c;是直接從梯度下降開始講解&#xff0c;最后采用向量和矩陣的方式推導了解析解&#xff0c;國內很多培訓視頻是先講解析解后講梯度下降&#xff0c;個人認為梯度下降算法更為…

在centos和redhat上安裝docker

前置條件 64-bit 系統kernel 3.101.檢查內核版本&#xff0c;返回的值大于3.10即可。$ uname -r 2.使用 sudo 或 root 權限的用戶登入終端。 3.卸載舊版本(如果安裝過舊版本的話) $ yum remove docker \docker-common \docker-selinux \docker-engine 4.安裝需要的軟件包 #yum-…

mac 下用 brew 安裝mongodb

mac 下安裝mongoDB一般倆種方法. (1)下載源碼,解壓,編譯,配置,啟動 比較艱難的一種模式. (2)brew install mongodb ,然后就可以悠閑的品一口茶,順便瞄一眼網易新聞,這是一種傻瓜模式. 但傻瓜模式也有人為干預的時候,粗略說一下使用brew 安裝mongodb 1 zhangzhimoke:~/code$…

比較python類的兩個instance(對象) 是否相等

http://www.yihaomen.com/article/python/281.htm 比較python類的兩個instance(對象) 是否相等 作者:輕舞肥羊 日期:2012-10-25 字體大小: 小 中 大對于同一個Class,可以創建不同的實例(instance), 如何比較這兩個 instance 是否相等呢&#xff1f;我們知道&#xff0c;對于計算…

Mybaits插入記錄返回主鍵值

某些情況進行insert時不知道主鍵值&#xff08;主鍵為自增&#xff09;&#xff0c;例如系統新增用戶時&#xff0c;有用戶序號&#xff08;主鍵 自增&#xff09;&#xff0c;用戶名&#xff0c;密碼。插入時只需插入用戶名和密碼&#xff0c;之后取得mysql自增的序號。 如下為…

Mac 解決brew一直卡在Updating Homebrew

運行命令brew install node&#xff0c;結果界面一直卡在Updating Homebrew...上&#xff0c;有兩種解決辦法 方法一&#xff1a;直接關閉brew每次執行命令時的自動更新&#xff08;推薦&#xff09; vim ~/.bash_profile# 新增一行 export HOMEBREW_NO_AUTO_UPDATEtrue方法二…

CAS單點登錄原理簡單介紹

1. SSO簡介 1.1 單點登錄定義 單點登錄(Single sign on)&#xff0c;英文名稱縮寫SSO&#xff0c;SSO的意思就是在多系統的環境中&#xff0c;登錄單方系統&#xff0c;就可以在不用再次登錄的情況下訪問相關受信任的系統。也就是說只要登錄一次單體系統就可以。計劃在項目中加…

前端跨域通信的幾種方式

前言 前端通信類的問題&#xff0c;主要包括以下內容&#xff1a; 1、什么是同源策略及限制 同源策略是一個概念&#xff0c;就一句話。有什么限制&#xff0c;就三句話。能說出來即可。 2、前后端如何通信 如果你不準備&#xff0c;估計也就只能說出ajax。 3、如何創建Aja…

T4((Text Template Transformation Toolkit))模版引擎之基礎入門 C#中文本模板(.tt)的應用...

1 關于C#中文本模板(.tt)的簡單應用https://blog.csdn.net/zunguitiancheng/article/details/78011145 任何一個傻瓜都能寫出計算機能理解的程序&#xff0c;而優秀的程序員卻能寫出別人能讀得懂的程序。—— Martin Fowler 2 T4模版引擎之生成數據庫實體類 http://www.cnblogs…

LeetCode412Fizz Buzz

寫一個程序&#xff0c;輸出從 1 到 n 數字的字符串表示。 1. 如果 n 是3的倍數&#xff0c;輸出“Fizz”&#xff1b; 2. 如果 n 是5的倍數&#xff0c;輸出“Buzz”&#xff1b; 3.如果 n 同時是3和5的倍數&#xff0c;輸出 “FizzBuzz”。 示例&#xff1a; n 15, 返回: [ …

vue+node實現中間層同步調用接口

為了應對業務的復雜性&#xff0c;提高前端的渲染能力&#xff0c;故在項目中引入nodejs做中間層&#xff0c;前端承接vue&#xff0c;后端對接Java。 至于為什么這么搞&#xff0c;網上有好多文章都在討論&#xff0c;可以說仁者見仁智者見智&#xff0c;這里我們不在深究。 …

ES6學習筆記(二十二)ArrayBuffer

ArrayBuffer ArrayBuffer對象、TypedArray視圖和DataView視圖是 JavaScript 操作二進制數據的一個接口。它們都是以數組的語法處理二進制數據&#xff0c;所以統稱為二進制數組。 二進制數組由三類對象組成。 &#xff08;1&#xff09;ArrayBuffer對象&#xff1a; 代表內存之…

如何正確地使用Java的@deprecated標注

沒有什么事情比看到一個沒有任何說明的deprecated標注更讓人憤怒的事情了。這種做法只能讓人困惑&#xff0c;我到底還要不要用這個已經‘廢棄’的方法&#xff1f;如果開發者不希望某個方法再被人用的話&#xff0c;就要好好地為deprecated標注寫說明。這篇文章就討論了正確地…

實現div里的img圖片水平垂直居中

body結構 <body><div><img src"1.jpg" alt"haha"></div> </body>方法一&#xff1a; 將display設置成table-cell&#xff0c;然后水平居中設置text-align為center&#xff0c;垂直居中設置vertical-align為middle。 <…