jollen.org

Jollen 的 Blog
Jollen's email: jollen # jollen.org
more:  Jollen's Training

Node.js 入門, #8:認識 JSON 與 Web App 的概念

.作者:jollen/
.日期:July 23, 2014 9:26 PM


本文章採用 Markdown 語法撰寫(why?),若無法閱讀內文,請點擊這裡

Web-Oriented Architect

Web 導向架構(WOA, Web-Oriented Architect)著重幾個觀念:

  • Device-Server 設計模式
  • Device 端使用 Browser,以 Browser 做為執行環境(Runtime)
  • Server 端提供 APIs,即 PaaS 概念
  • Device-Server 採用非同步通訊(Asynchronous communication)

事實上,非同步通訊大家都使用過,就是 AJAX;AJAX 的第一個 A 就是 Asynchronous。但是考量 Server 端的負載(Loading),以及百萬連線(Millions requests)等級的處理能力需求,應該儘量少用 AJAX 機制。這就是 Device-Server 與 Client-Server 的差別,大家可能還不太明白。所以,將二者的差別簡單整理如下:

  • Client-Server 做法:在瀏覽器裡(Client)主動向 Server 請求內容,Client 定時(如:每隔5秒鐘)發出請求,持續更新內容。
  • Device-Server 做法:在裝置端(Device)和 Server 建立連線,Server 主動將更新內容推送(Push)給裝置端,更明確地說,裝置裡的瀏覽器,瀏覽器再將新內容刷新。

這樣就很清楚了,傳統的 Client-Server 做法是「Data Pull」,即主動去拉資料;Device-Server 的做法是「Data Push」,即推送資料,由 Server 在必要時才將資料推送給 Device。Data Push 的經典代表作就是 BlackBerry(黑莓機)的郵件服務。

為什麼 AJAX 不好用?因為 Server 要冒著「不知道有多少 Client、不知道同時有多少 Requests」的風險,會增加 Load Balancer 佈署的成本;另外,當然就是即時性的問題(Live Streamming)。要達成 Data Push 的目的,有解決二個技術問題:

  • Device 端要與 Server 建立永續性(Persistent)連線,也就是 Socket Connection
  • Server 推送出去的資料,格式要有統一標準,且輕量化

要解決這二個問題,要使用到二項技術:WebSocket 與 JSON。從以上的說明,可以大略了解 HTML5 的威力在於「Web App」的應用領域,而不只是 Web Page 的製作:

  • 從 Web Page 角度來看,以 Client-Server 為主,這像是傳統 PC 時代的使用案例 從 Web App 角度來看,將 Device-Server 為主

  • Web App 的開發思惟,與 Web Page 有很大的不同。目前 Web App 的 UI 製作,採是強調跨螢幕與裝置的特性,這種設計稱為 Responsive Design。並且,Responsive Design 進向以行動裝置為預設值的做法,也就是「Mobie First」

Web App 技術

從 Web App 的角度看 HTML5,以下是初學者可考慮優先切入學習的技術:

  • PhoneGap:Device API 的標準,使用 JavaScript 呼叫 Device API 的好技術,Nitobi 公司是 PhoneGap 的開發商,這家公司現已被 Adobe Systems 收購

  • WebSocket:HTML5 標準裡的一個技術

  • Node.js:開發專用 Web Service 的技術,採用 JavaScript 語言

Apache Web Server 是通用型的 Web Server,主要提供頁面(Pages)服務。Node.js 則是 Web Service 的技術,用來開發專用的 Web Service APIs。

現在開發專用的 Web Service 非常重要,這是 PaaS 的靈魂。例如,開發股票報價專用 Web Server。過去常聽到的 Web Server,例如:Apache,都是一般用途的 Web Server,用來「host Web pages」。

現在 Client 端的網頁是用 JavaScript,Server 端的開發也可以用 JavaScript,Client/Server 通通都用 JavaScript,這是一個「All in JavaScript」的時代。

重要的資訊交換格式:JSON

傳統 Backend 的做法,會提供 Client 端一份 HTML5 的片斷文件,而不是格式化後的資料(Formatted),這是一個缺點。

如果 Server 回傳的是格式化後的資料,Client 端就可以更有效率地利用這些資料。試想,如果 Google 傳回的搜尋結果是一堆 HTML5,那我們不就還要再去 Parse 這份文件,才能取出真正的結果,然後才能再次利用這些資料(例如:再儲存為 CVS 格式)。

為了解決這個問題,必須要有一個標準,不能大家都用自已的 HTML5 文件,或是自定的格式。軟體工程師設計了一些標準。一開始提出的做法,是制定標準的XML標籤,這樣大家就可以統一文件格式了。但是還有一個問題,就是「資料量太大」。

試想,Server 要回傳二筆資料,這二筆資料都是電話號碼:

  • 0911-111-111
  • 0900-000-000

然後用XML來表示,就變成:

<Telephone>
   <Item>0911-111-111</Item>
   <Item>0900-000-000</Item>
</Telephone>

這種把資料打腫了才回傳的做法,大大浪費網路頻寬。上面只是一個簡單的例子,現實環境,要回傳的資料可能是一個 10MB 的 XML 文件,結果原始資料可能只有 1MB。

要解決這個問題,就要有一個輕量級(Light-weight)的資料交換格式,這項技術就是 JSON。所以,JSON 是 Client/Server 交換資料的一種格式,一種 Light-weight data exchange 技術。

Tags:

純手工打造說明:技術專欄文章為 Jollen 原創,內容皆為人工撰寫,無 AI 生成。轉載請註明出處與作者,並全文引用。轉載時請在文章開頭或結尾明顯處註明「本文出處:https://www.jollen.org,已取得原作者同意並授權使用。」
訂閱電子報:不定期 Jollen's Blog 精選文章隨 Moko365 電子報寄送;請透過 Moko365 電子報訂閱(可隨時取消)。

Copyright(c) 2001–2014 www.jollen.org. All rights reserved.
Last update: 2026-07-22