在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

前端同構(gòu)MVC實踐分析

大小:0.25 MB 人氣: 2017-09-30 需要積分:1

  1、同構(gòu)的概念和意義

  1.1、isomorphic 是什么?

  isomorphic,讀作[?a?s?’m?:f?k],意思是:同形的,同構(gòu)的。

  維基百科對它的描述是:同構(gòu)是在數(shù)學(xué)對象之間定義的一類映射,它能揭示出在這些對象的屬性或者操作之間存在的關(guān)系。若兩個數(shù)學(xué)結(jié)構(gòu)之間存在同構(gòu)映射,那么這兩個結(jié)構(gòu)叫做是同構(gòu)的。一般來說,如果忽略掉同構(gòu)的對象的屬性或操作的具體定義,單從結(jié)構(gòu)上講,同構(gòu)的對象是完全等價的。

  同構(gòu),也被化用在物理、化學(xué)以及計算機(jī)等其他領(lǐng)域。

  1.2、isomorphic java

  isomorphic java(同構(gòu) js),是指一份 js 代碼,既然可以跑在瀏覽器端,也可以跑在服務(wù)端。

  

  圖 1

  同構(gòu) js 的發(fā)展歷史,比 progressive web app 還要早很多。2009 年, node.js 問世,給予我們前后端統(tǒng)一語言的想象;更進(jìn)一步的,前后端公用一套代碼,也不是不可能。

  有一個網(wǎng)站 isomorphic.net,專門收集跟同構(gòu) js 相關(guān)的文章和項目。從里面的文章列表來看,早在 2011 年的時候,業(yè)界已經(jīng)開始探討同構(gòu) js,并認(rèn)為這將是未來的趨勢。

  可惜的是,同構(gòu) js 其實并沒有得到真正意義上的發(fā)展。因為,在 2011 年,node.js 和 ECMA 都不夠成熟,我們并沒有很好的基礎(chǔ)設(shè)施,去滿足同構(gòu)的目標(biāo)。

  現(xiàn)在是 2017 年,情況已經(jīng)有所不同。ECMA 2015 標(biāo)準(zhǔn)定案,提供了一個標(biāo)準(zhǔn)的模塊規(guī)范,前后端通用。盡管目前 node.js 和瀏覽器都沒有實現(xiàn) ES2015 模塊標(biāo)準(zhǔn),但是我們有 Babel 和 Webpack 等工具,可以提前享用新的語言特性帶來的便利。

  2、同構(gòu)的種類和層次

  2.1、同構(gòu)的種類

  同構(gòu) js 有兩個種類:「內(nèi)容同構(gòu)」和「形式同構(gòu)」。

  其中,「內(nèi)容同構(gòu)」指服務(wù)端和瀏覽器端執(zhí)行的代碼完全等價。比如:

  functionadd(a, b){returna + b}

  不管在服務(wù)端還是瀏覽器端,add 函數(shù)都是一樣的。

  而「形式同構(gòu)」則不同,從原教旨主義的角度上看,它不是同構(gòu)。因為,在瀏覽器端有一部分代碼永遠(yuǎn)不會執(zhí)行,而在服務(wù)端另一部分代碼永遠(yuǎn)不會執(zhí)行。比如:

  functiondoSomething(){ if(isServer) { // dosomething inserver-side } elseif(isClient) { //dosomething inclient-side }}

  在 npm 里,有很多 package 標(biāo)榜自己是同構(gòu)的,用的方式就是「形式同構(gòu)」。如果不作特殊處理,「形式同構(gòu)」可能會增加瀏覽器端加載的 js 代碼的體積。比如 React,它的 140+kb 的體積,是把只在服務(wù)端運(yùn)行的代碼也包含了進(jìn)去。

  2.2、同構(gòu)的層次

  同構(gòu)不是一個布爾值,true 或者 false;同構(gòu)是一個光譜形態(tài),可以在很小范圍里上實現(xiàn)同構(gòu),也可以在很大范圍里實現(xiàn)同構(gòu)。

  -function 層次:零碎的代碼片斷或者函數(shù),支持同構(gòu)。比如瀏覽器端和服務(wù)端都實現(xiàn)了 setTimeout 函數(shù),比如 lodash/underscore 的工具函數(shù)都是同構(gòu)的。

  -feature 層次:在這個層次里的同構(gòu)代碼,通常會承擔(dān)一定的業(yè)務(wù)職能。比如 React 和 Vue 都借助 virtual-dom 實現(xiàn)了同構(gòu),它們是服務(wù)于 View 層的渲染;比如 Redux 和 Vuex 也是同構(gòu)的,它們負(fù)責(zé) Model 層的數(shù)據(jù)處理。

  -framework 層次:在框架層面實現(xiàn)同構(gòu),它可能包含了所有層次的同構(gòu),需要精心處理支持同構(gòu)和不支持同構(gòu)的兩個部分,如何妥善地整合在一起。

  我們今天所討論的 isomorphic-mvc(簡稱 IMVC),是在 framework 層次上實現(xiàn)同構(gòu)。

  3、同構(gòu)的價值和作用

  3.1、同構(gòu)的價值

  同構(gòu) js,不僅僅有抽象上的美感,它還有很多實用價值。

  SEO 友好:View 層在瀏覽器端和服務(wù)端都可以運(yùn)行,意味著可以在服務(wù)端吐出 html,支持搜索引擎的抓取。

  加快訪問體驗:服務(wù)端渲染可以加快瀏覽器端的首次訪問的渲染速度,而瀏覽器端渲染,可以加快用戶交互時的反饋速度。

  代碼的可維護(hù)性:同構(gòu)可以減少語言切換的成本,減小代碼的重復(fù)率,增加代碼的可維護(hù)性。

  不使用同構(gòu)方案,也可以用別的辦法實現(xiàn)前兩個的目標(biāo),但是別的辦法卻難以同時滿足三個目標(biāo)。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      主站蜘蛛池模板: 天天干天天插天天操 | 天天看天天干天天操 | 久久天天躁夜夜躁狠狠85台湾 | 干干操 | 久久精品国产福利 | 天堂bt资源新版在线 | 男女无遮挡一进一出性视频 | 在线观看视频你懂的 | 久久精品久久久久 | 奇米狠狠干| 免费一级毛片清高播放 | 国产福利影视 | 欧美色视频网 | 国产女同在线观看 | 国产伦精品一区二区三区四区 | 久操免费在线 | 欧美αv日韩αv另类综合 | 免费一级网站 | 一级做a爰片久久毛片美女图片 | 日日操操干干 | 成人亚洲电影 | 手机看片午夜 | 激情六月天婷婷 | 国产福利不卡一区二区三区 | 性欧美在线 | 91极品女神嫩模在线播放 | 午夜在线观看免费观看大全 | 永久免费观看午夜视频在线 | 天天做天天爱天天综合网2021 | 男人天堂久久 | 在线观看视频你懂得 | 天天干天天舔 | 直接在线观看的三级网址 | 日木69xxxhd| 色88888久久久久久影院 | 中文字幕精品一区二区三区视频 | 午夜色a大片在线观看免费 午夜色大片在线观看 | 免费在线播放视频 | 中国一级特黄真人毛片免费看 | 亚洲欧美在线观看 | 种子搜索在线 |