Miox哲學思想引出的一些思考

前言:

當我第一次接觸AngularJs 1.x的時候,被其聲明式渲染,路由系統,單頁面,豐富的指令深深吸引。當我發現nodejs正在服務端發揮著耀眼的光芒的時候,又在感嘆js的強大。這些年,伴隨著Vue,React,Angular的崛起,原先刀耕火種的前端已經逐步退出舞臺。更多的帶給我們的是一系列工具、腳手架。但是這些東西本不應該是天生就有的,而是標著著前端浪潮的一些進步:

SPA應用的一些感觸

現在作為開發者的我們,可能已經習慣每天產出的一些新的框架,每天迭代的一個新的工具,慢慢的就會變得麻木和懶惰。其實有的時候我們更需要的是對問題的一種思考和解決。下面簡單記錄一些我目前遇到的一些問題的解決方案,在此做一些分享吧:

1. 前端SPA路由思想和 Miox 路由的思想

為什么要使用路由?
傳統web開發是每一個請求地址都會請求服務器來進行處理,但是用戶有些操作則無需請求服務器,直接頁面端修改下邏輯就能達到目的,這種最好使用路由,也許會有疑問:直接使用js處理下不就行了。使用js直接處理這些是可以的,事實上以前我們也這么做,但是這樣做不便于用戶收藏當前頁,因為使用js時并不更新url,但是使用路由時,url也是隨著改變的,用戶瀏覽到一個網頁時可以直接復制或收藏當前頁的url給別人,這種方式對于搜索引擎和用戶來說都是友好的。

  1. 服務端路由:對于服務器來說,當接收到客戶端發來的HTTP請求,會根據請求的URL,來找到相應的映射函數,然后執行該函數,并將函數的返回值發送給客戶端。對于最簡單的靜態資源服務器,可以認為,所有URL的映射函數就是一個文件讀取操作。對于動態資源,映射函數可能是一個數據庫讀取操作,也可能是進行一些數據的處理,等等。以Express為例:
app.get('/users', (req, res) => {
  db.queryAllUsers()
    .then(data => res.send(data))
})
  1. 客戶端路由對于客戶端(通常為瀏覽器)來說,路由的映射函數通常是進行一些DOM的顯示和隱藏操作。這樣,當訪問不同的路徑的時候,會顯示不同的頁面組件。客戶端路由最常見的有以下兩種實現方案:基于Hash或者基于History API

Miox這個東西是一種思想的產物,是一種服務端路由客戶端化。我們現在其實已經習慣了vue-router或者react-router早期這樣的靜態路由(react-router后續已經支持了動態路由)
現在主流的框架,除去Angular,就只有Vue與React了。它們各自有各自的路由模塊。總的來說,他們的路由模式,都是遵循自己的設計原則來設計的,都是采用組件化路由的思想,達到分發路由的目的,Vue與React路由都是組件,數據上可以通過頂層(父)組件傳遞數據下來,頁面之間數據可以互通。而Miox 是基于服務端MPA的思想:頁面之間數據不互通,需要通過Store等中間產物來達到互通,理論上是完全隔離的。
有的時候我們在做nodejs中間層的時候,我們更希望我們的思想是統一的,也就是PAGE = TEMPLATE + DATA
其實在用vue-router的時候,我們還會碰到另一些問題:
它是一套靜態路由,不具備動態選擇組件的能力,需要通過各種HOOK手段來達到選擇組件,比如說<component />組件等。但是在官方的文檔上我們可以看到動態路由匹配,其實這是動態URI的概念,而非真正的動態路由概念。

const router = new VueRouter({
  routes: [
    // 動態路徑參數 以冒號開頭
    { path: '/user/:id', component: User }
  ]
})

在實際的場景中,/user/:id變化的任意路徑都只會對應到User組件,而非不同的組件來渲染。所以這個概念不是很正確。如果基于后端對路由概念到理解,那么我們應該是通過這樣到模式來反映出動態路由的概念。

router.get('/user/:id', ctx => {
  if (global.opened) {
    return ctx.render(webviewA);
  }
  ctx.render(webviewB);
})

Miox是一種基于服務端路由思想的框架,做的東西比較哲學化,但是使用起來確實可以提高開發者的效率,我覺得也是思想上的一種轉變,而這種轉變能帶來什么,還是需要開發者自己去衡量,正所謂不談應用場景選框架是耍流氓。這里只是拋磚引玉,更多介紹可以參考Miox文檔

2. 提高Mock開發效率

傳統開發中,后端定義好接口規范,前端根據規范進行mock數據,所以我們可能會去一遍遍重復著接口文檔的編寫,類似于這樣的動作:

httpRequest.get('/user/login', options)

隨著時間的推移,接口越來越多,或者接口地址的變動,我們需要有一個地方可以專門去維護這樣的地址,我們不希望這些東西需要我們手動一個個敲下來,最好能根據服務端的接口規范自動生成!
其次可能還會存在另一些問題,如果所有mock的數據存在本地的話,很難協同開發和維護。如果所有mock數據放在git服務,經常會碰到彼此需要交叉修改的mock數據的情況,容易早場代碼沖突和不規范,況且mock數據并不屬于業務性代碼,提交到遠程mock似乎并不是那么友好,隨著項目體量的增加或者迭代,這種mock方式越發難以維護。所以我們需要一個mock服務器,可能代替存儲我們的mock數據最好了!
當然mock服務能做的不僅僅只有這些,有興趣的可以參考:easy-mock

綜合問題的一些思考

前端業務開發完之后,并不是什么事情都沒有了,恰巧,開發完業務需求,只是最初的一步。因為我們的頁面需要更快更優雅的展示在用戶面前,我們還需要更多的東西。

  1. 為了讓頁面能夠展示的安全可靠,我們需要不斷地測試、預發... 我們需要不斷地區分這些環境,生成不同接口環境的代碼包...
  2. 為了團隊協作的規范流程,以及最終發布的代碼質量,我們需要不斷地gitflow 和 codeReview gitflow
  3. 為了讓頁面更加流暢和迅速的展示,我們需要不斷地優化加載資源和頁面交互餓了么的 PWA 升級實踐
  4. 為了讓用戶無感知發布,我們又需要一系列發布規范,有興趣的可以參考這里:大公司里怎樣開發和部署前端代碼

這里我基于上述做了一個簡單的demo:
Miox + easyMock + 前端部署簡化

關于

作者:monkeywang
Miox官方地址:Miox
Miox 文檔地址: Miox文檔
歡迎關注微信公眾號:前端知識鋪

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,692評論 25 708
  • 臺風來臨之前 風眼中間卻顯得很平靜 街道上沒有一絲風 沒有一群人 他們蝸居在家中 渾然不知危險將臨 還有些如同被麻...
    Nicole未然閱讀 412評論 0 1
  • 曾以為愛一個人很簡單,兩個人就是一個世界, 什么都可以不用管,喜歡就好。 簡單到以為左手牽著右手一起從一條街走過另...
    這個littlegirl閱讀 237評論 0 0
  • 1. 個人征信現狀 跟信用發達國家如美國相比,中國的個人征信體系缺乏,征信服務也不完善。個人每年有三次在央行征信...
    一心小茶館閱讀 651評論 12 16
  • 說我不像女生也好,說我顯得太過強勢也罷,我只是,僅僅只是想依靠自己的力量,堅強獨立的活著啊 我不像其他女生那樣柔弱...
    寫給自己的情書閱讀 379評論 0 0