亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

基于NodeJS的前后端分離的思考與實踐(五)多終端適配

2019-11-20 14:05:57
字體:
來源:轉載
供稿:網友

前言

近年來各站點基于 Web 的多終端適配進行得如火如荼,行業間也發展出依賴各種技術的解決方案。有如基于瀏覽器原生 CSS3 Media Query 的響應式設計、基于云端智能重排的「云適配」方案等。本文則主要探討在前后端分離基礎下的多終端適配方案。

關于前后端分離

關于前后端分離的方案,在《基于NodeJS的前后端分離的思考與實踐(一)》中有非常清晰的解釋。我們在服務端接口和瀏覽器之間引入 NodeJS 作為渲染層,因為 NodeJS 層徹底與數據抽離,同時無需關心大量的業務邏輯,所以十分適合在這一層進行多終端的適配工作。

UA 探測

進行多終端適配首先要解決的是 UA 探測問題,對于一個過來的請求,我們需要知道這個設備的類型才能針對對它輸出對應的內容?,F在市面上已經有非常成熟的兼容大量設備的 User Agent 特征庫和探測工具,這里有 Mozilla 整理的一個列表。其中,既有運行在瀏覽器端的,也有運行在服務端代碼層的,甚至有些工具提供了 Nginx/Apache 的模塊,負責解析每個請求的 UA 信息。

實際上我們推薦最后一種方式。基于前后端分離的方案決定了 UA 探測只能運行在服務器端,但如果把探測的代碼和特征庫耦合在業務代碼里并不是一個足夠友好的方案。我們把這個行為再往前挪,掛在 Nginx/Apache 上,它們負責解析每個請求的 UA 信息,再通過如 HTTP Header 的方式傳遞給業務代碼。

這樣做有幾點好處:

我們的代碼里面無需再去關注 UA 如何解析,直接從上層取出解析后的信息即可。如果在同一臺服務器上有多個應用,則能夠共同使用同一個 Nginx 解析后的 UA 信息,節省了不同應用間的解析損耗。

來自天貓分享的基于 Nginx 的 UA 探測方案

淘寶的 Tengine Web 服務器也提供了類似的模塊 ngx_http_user_agent_module。

值得一提的是,選用 UA 探測工具時必須要考慮特征庫的可維護性,因為市面上新增的設備類型越來越多,每個設備都會有獨立的 User Agent,所以該特征庫必須提供良好的更新和維護策略,以適應不斷變化的設備。

建立在 MVC 模式中的幾種適配方案

取得 UA 信息后,我們就要考慮如果根據指定的 UA 進行終端適配了。即使在 NodeJS 層,雖然沒有了大部分的業務邏輯,但我們依然把內部區分為 Model / Controller / View 三個模型。

我們先利用上面的圖,去解析一些已有的多終端適配方案。

建立在 Controller 上的適配方案

這種方案應該是最簡單粗暴的處理方法。通過路由(Router)將相同的 URL 統一傳遞到同一個控制層(Controller)。控制層再通過 UA 信息將數據和模型(Model)邏輯派發到對應的展現(View)進行渲染,渲染層則按預先的約定提供了適配幾個終端的模板。

這種方案的好處是,保持了數據和控制層的統一性,業務邏輯只需處理一次遍可以應用在所有終端上。但這種場景只適合如展示型頁面等低交互型的應用,一旦業務比較復雜,各個終端的 Controller 可能有各自的處理邏輯,如果還是共用一個 Controller ,會導致 Controller 非常的臃腫而且難以維護,這無疑是一個錯誤的選擇。

建立在 Router 上的適配方案

為了解決上面遇到的問題,我們可以在 Router 上就將設備區分,針對不同的終端分發到不同的 Controller 上:

這也是最常見的方案之一,大多表現在針對不同終端使用各自獨立的一套應用。如 PC 淘寶首頁和 WAP 版的淘寶首頁,不同設備訪問 www.taobao.com ,服務器會通過 Router 的控制,重定向到 WAP 版的淘寶首頁或者 PC 版的淘寶首頁,它們各自是完全獨立的兩套應用。

但這種方案無疑帶來了數據和部分邏輯無法共用的問題,各種終端之間無法分享同一份數據和業務邏輯,產生大量重復性工作,效率低下。

為了緩解這個問題,有人提出了優化后的方案:依然是在同一套應用里面,各個數據來源抽象成各個 Model,提供給不同終端的 Controller 組合使用:

這個方案解決了前面數據無法共用的問題。在 Controller 上各個終端還是相互獨立,但能共同使用同一批數據源,至少在數據上無需再針對終端類型開發獨立的接口了。

以上兩種基于 Router 的方案,由于 Controller 的獨立,各個終端可以為自己的頁面實現不同的交互邏輯,保證了各終端自身足夠的靈活度,這也是為什么大部分應用采用這種方案的主要原因。

建立在 View 層的適配方案

這是淘寶下單頁面使用的方案,不過區別是下單頁將整體的渲染層放在了瀏覽器端,而不是 NodeJS 層。不過無論是瀏覽器還是 NodeJS,整體設計思路還是一致的:

在這個方案里面,Router、Controller 和 Model 都無需關注設備信息,終端類型的判斷完全交給展現層來處理。圖中主要的模塊是「View Factory」,Model 和 Controller 將數據和渲染邏輯傳遞過來之后,通過 View Factory 根據設備信息和其它狀態(不僅僅是 UA 信息、也可以是網絡環境、用戶地區等等)從一堆預設好的組件(View Component)中抓取特定的組件,再組合成最終的頁面。

這種方案有幾個優勢:

上層無需關注設備信息(UA),多終端的視頻還是交由和最終展現最大關系的 View 層來處理;不僅僅是多終端適配,除了 UA 信息,各個 View Component 還可以根據用戶狀態決定自身輸出何種模版,如低網速下默認隱藏圖片、指定地區輸出活動 Banner。每個 View Component 的不同模版間可以自行決定是否使用同一份數據、業務邏輯,提供十分靈活的實現方式。

但明顯的是,這個方案也是最復雜的,尤其是要考慮一些富交互的應用場景時,Router 和 Controller 也許無法保持這么純粹。特別對于一些整體性比較強的業務,本身無法被拆分成組件,這種方案也許并不適用;而且對于一些簡單的業務,使用這種架構可能不是最佳的選擇。

總結

以上幾種方案,都各自體現在 MVC 模型中的一個或多個部分,在業務上如果一個方案不滿足需求,更可以采取多個方案同時采用的方式?;蚴强梢岳斫鉃椋瑯I務上的復雜度和交互屬性決定了該產品更適合采用哪種多終端適配方案。

對比基于瀏覽器的響應式設計方案,因為絕大部分終端探測和渲染邏輯遷移到了服務端,所以在 NodeJS 層進行適配無疑帶來了更好的性能和用戶體驗;另外,相對于一些所謂的「云適配」方案帶來的轉換質量問題,在基于前后端分離的「定制式」方案中也不會存在。前后端分離的適配方案在這些方面有著天然優勢。

最后,為了適應更靈活的強大的適配需求,基于前后端分離的適配方案將會面臨更多挑戰!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级免费视频| 在线日韩日本国产亚洲| 欧美在线影院在线视频| 久久精品最新地址| 91国内产香蕉| 日韩精品亚洲元码| 欧美日韩午夜激情| 久久不射电影网| 欧美日韩国产在线播放| 日韩第一页在线| 国产中文欧美精品| 色综合久综合久久综合久鬼88| 日韩在线欧美在线| 欧美综合在线观看| 97在线观看免费| 亚洲国产成人精品女人久久久| 亚洲人成在线观看| 一区二区欧美亚洲| 色妞一区二区三区| 日日噜噜噜夜夜爽亚洲精品| 精品国产视频在线| 国内精品久久久久久| 日韩欧美精品免费在线| 欧美xxxx14xxxxx性爽| 欧美激情一区二区三区在线视频观看| 一道本无吗dⅴd在线播放一区| 上原亚衣av一区二区三区| 亚洲一区制服诱惑| 亚洲国产天堂久久综合网| 亚洲精品欧美一区二区三区| 欧美日韩精品二区| 欧美成人精品一区二区三区| 91欧美精品午夜性色福利在线| 国产一区二区三区18| 午夜精品免费视频| 国产网站欧美日韩免费精品在线观看| 日韩欧美中文字幕在线播放| 亚洲国产又黄又爽女人高潮的| 亚洲综合第一页| 国产在线日韩在线| 精品欧美一区二区三区| 日韩在线视频导航| 丝袜亚洲欧美日韩综合| 91香蕉国产在线观看| 亚洲欧美国产日韩天堂区| 欧美性xxxxhd| 日韩精品在线看| 久久九九有精品国产23| 亚洲欧美日韩综合| 国产精品日韩专区| 欧美成人精品在线| 日本成人在线视频网址| 亚洲精品小视频在线观看| 国产精品自拍偷拍| 日韩美女激情视频| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲国产成人一区| 日本精品视频在线观看| 亚洲人成在线观| 亚洲人成自拍网站| 色噜噜亚洲精品中文字幕| 久久精品国产91精品亚洲| 亚洲a中文字幕| 亚洲福利在线播放| 亚洲精品美女久久久久| 国产精品丝袜一区二区三区| 亚洲人成在线播放| 久久97精品久久久久久久不卡| 欧美激情aaaa| 91九色精品视频| 欧美日韩国产丝袜美女| 国产成人av在线播放| 2019日本中文字幕| 亚洲激情在线观看视频免费| 欧美资源在线观看| 久久夜色精品亚洲噜噜国产mv| 亚洲精品中文字| 韩曰欧美视频免费观看| 亚洲色图激情小说| 成人夜晚看av| 亚洲欧美在线免费| 久久久久北条麻妃免费看| 亚洲欧美成人一区二区在线电影| 亚洲精品色婷婷福利天堂| 欧美日韩成人在线观看| 亚洲人成网在线播放| 丝袜情趣国产精品| 欧美激情亚洲国产| 国产91成人在在线播放| 欧美成人sm免费视频| zzijzzij亚洲日本成熟少妇| 成人网在线免费观看| 在线播放国产一区中文字幕剧情欧美| 日本国产欧美一区二区三区| 日韩精品中文字幕在线播放| 亚洲精品小视频在线观看| 色偷偷av亚洲男人的天堂| 亚洲影影院av| 国产欧美在线播放| 亚洲品质视频自拍网| 国产欧美中文字幕| 国产成人精品日本亚洲专区61| 久久夜色精品国产亚洲aⅴ| 国产欧美日韩中文字幕| 亚洲欧美国产日韩中文字幕| 国产精品亚洲第一区| 欧美性视频精品| 国产日韩av高清| 91久久久久久| 国产精品∨欧美精品v日韩精品| 国产区精品在线观看| 日韩最新在线视频| 久久久99久久精品女同性| 亚洲精品一区久久久久久| 亚洲精品www久久久| 久久久久久久影院| 亚洲区一区二区| 中文欧美在线视频| 少妇精69xxtheporn| 欧美大荫蒂xxx| 4444欧美成人kkkk| 欧美视频在线看| 97国产成人精品视频| 尤物九九久久国产精品的特点| 97国产真实伦对白精彩视频8| 国产精品自产拍在线观看| 热久久99这里有精品| 26uuu亚洲国产精品| 91成人天堂久久成人| 亚洲欧美激情一区| 亚洲精品视频在线观看视频| 隔壁老王国产在线精品| 国产一区二区三区免费视频| 亚洲国产日韩欧美在线99| 狠狠色狠狠色综合日日小说| 亚洲精品国产精品国自产在线| 色小说视频一区| 国产精品成人播放| 久久久久国产精品一区| 91精品国产综合久久香蕉最新版| 精品国产91乱高清在线观看| 成人av在线网址| 亚洲女在线观看| 日韩免费观看av| 永久555www成人免费| 亚洲一区美女视频在线观看免费| 91精品久久久久久久| 17婷婷久久www| 国产一区二区丝袜高跟鞋图片| 欧美亚洲国产视频| 92福利视频午夜1000合集在线观看| 国产盗摄xxxx视频xxx69| 亚洲缚视频在线观看| 国产精品av网站| 亚洲黄页视频免费观看| 久久国产精品免费视频| 久久天天躁日日躁| 国产在线观看精品| 亚洲xxxx做受欧美| 国产成人精品视| 久久国产精品久久精品| 俺去了亚洲欧美日韩| 这里只有精品久久| 中文字幕日韩免费视频|