Google Developer Day – Gears

Gears

這次很多人去了 Google Developer Day,但是真正明白 Gears 價值的人卻不多,這點從 Gears 這場演講的聽眾人數就看的出來。Gears 可以說是 Google 將服務範圍,從網路上跨入桌上型應用相當重要的一步棋,為什麼這樣說呢?其實 Gears 並沒有將 Google 的服務真的搬到瀏覽器之外,但是很重要的是:它模糊了桌上型應用程式跟網路服務的界線。即使在沒有連上網路的情況下,還是可以讓使用者繼續使用 Google 的服務。雖然這些服務還是用瀏覽器來開啟,但是在斷線的情況下還可以使用,就表示 Google 要開始跟桌上型服務搶飯碗了。

這場的主講人,陳叡立 (Ray) 是 Google 的軟體工程師,畢業於台大資工所,曾任職於 IBM Silicon Valley Lab,參與 UDB XML Extender 的開發工作。在加入 Google 前,他在知名的 IC 設計公司負責 DTV Middleware 與 SoC 的開發工作,近期的興趣則集中在行動運算上。

 對於一般人來說 Gears 也許聽來很陌生,但是這項技術所要解決的問題,你一定不會陌生。如果你有在使用一些網路服務,像是把資料存在網路硬碟上,或是你擁有一個自己的網路相簿。想想看,當你每一次要去一個網站使用它的服務時,都必須要連上網路,這樣不是很不方便嗎?也許有些人看到這會有點疑惑,說,那網站本來就在網路上,當然要連上網路才能使用,哪有什麼問題?

下面這個例子,也許可以讓你感覺更清楚到底問題在哪裡:想像一下,你正在上傳前幾天出去玩的照片,或是正在部落格(blog) 打一篇很重要的文章。當文章寫好你正要上傳時,網路突然斷線了,或是xx大站掛了,這時候你的文章很可能就整篇消失了!(就好像以前用 Word 打報告,還沒存檔遇到電腦當機一樣) 你的心血可能就此全部付之一炬,而照片很可能也要從頭開始上傳。

有句話(類似莫非定律)很適合用來說明這個問題:1% of downtime can hurt at the wrong time。也就是說,就算只有 1% 的機會網站會出問題,當這 1%發生的時候,後果也可能會是很嚴重的。所以”以往”很重要的議題就是所提供的網路應用服務,必須要有很高的可靠性 (Reliability) 與穩定性 (Stability)。

但是如果有了 Gears,你就不需要擔心了。因為就算網路斷線,你剛寫好的文章也還會留在你的電腦上,只要之後再連上網,你的文章就可以繼續上傳到網路上!而你的照片,如果之前上傳到一半,也能夠從還沒傳完的部分開始上傳,而不用從頭開始。所以基本上,Gears 的發明,是為了讓使用者在網路環境不良或斷線的情況下,也可以順暢的瀏覽網頁或是使用網路服務。

這樣的技術,在 Google 所提供的某些服務已經有在使用了。如果你有用過 Google Reader 或是 Google Docs ,那你應該對於這些服務的離線瀏覽功能不陌生。而所謂的離線瀏覽,指的就是在沒有網路連線的情況下,還是可以使用 Google Reader 來閱讀 rss ,或是用 Google Docs 來編輯 Word, Excel, 或是 Powerpoint。

所以 Gears 這項技術,就是試著要整合你的電腦 (Client) 與網路服務 (Server),做到 Seamless Transition (無接縫式的轉換),也就是讓你感受不到 on-line 跟 off-line 的差別。目前 Gears 是 Open Source 軟體,如果你連上的網站要使用 Gears 的話,需要你同意下載之後才能使用。不過要下載的檔案其實非常小,從這點可以看出它設計的非常巧妙。而目前已經有一些網站開始採用,像是 Remember the Milk。

至於實際的做法與架構,是在你個人的電腦上建立一份 Local 資料庫並起動一個 Local 伺服器,然後由一個 Sync Engine 負責從網路下載或是上傳資料。所以當使用者在瀏覽一個網頁時,會先經過 Local 伺服器,然後在 Local 資料庫裡查詢資料。如果沒有查到,才會透過網路下載資料。這樣一來,就算網路斷線,還是可以由 Local 伺服器來提供服務,在使用上並不會感覺到有何不同,而且因為是存取 Local 資料,瀏覽的速度也會比較快。有了這項技術之後,對於使用行動裝置上網會有很大幫助跟用處,而這裡所指的行動上網,不限於使用 NB,也可以是用手機或是用其他的設備瀏覽網路。

Offline Architecture

Local 伺服器會檢查你是否有連上網路。當有機會連上網路,就會做最新的更新。

除了 Local 伺服器跟 Local 資料庫,Gears 也做到了讓 JavaScript 像一般程式語言一樣有 Multi-thread 的能力。他們稱它為 WorkerPool。

所謂 Multi-thread 就是有多個程式片段 (Thread),可以同時處理使用者所要求的動作。原本瀏覽器上執行 JavaScript 是單一 Thread,所以必須每個動作一個一個處理。如果說所需要的動作很花時間的話,就會拖慢瀏覽器,讓你的瀏覽器像是當機了一樣或是反應很慢。所以 Multi-thread 有什麼好處?主要就是讓一個 Main-thread 可以專心負責前端瀏覽器 UI 的處理,而其它需要運算的部分可以交由其它 Thread 做 ,讓瀏覽器 UI 與其他的動作能夠分開不受影響。這樣一來,當你執行的一個動作需要做大量運算時,就不會出現瀏覽器整個被拖慢或是當掉沒反應的情形。

看一下這個 demo 就可以很清楚的看到差別在哪裡:
Gears – Google Developer Day 2008 Tokyo
http://tw.youtube.com/watch?v=vexwQE1Wz4s

如果你不相信的話,就自己來玩玩看吧!
http://twgdd2008.googlecode.com/svn/trunk/gears/primes.html

Gears 還有什麼功能?

介紹完主要的原理後,Ray 又接著介紹了 Gears 已經開發或是正在開發的幾項功能。像是支援大檔案的續傳 (Big file resume),就可以用在網路相簿的服務上。另外還有 Location API (應該還在開發中),則是讓你可以查詢你目前所在的位置。如果是在手機以及筆記型電腦上的話,結合 Google Map 應該可以做出很多有趣的應用。http://code.google.com/p/gears/wiki/GeolocationAPI

另外 Ray 也展示了一個進階的應用,叫做 GearsMonkey。如果安裝了這項工具的話,就可以把你目前瀏覽的 Wikipedia 網頁,儲存到 Gears 的 Local 資料庫。所以就算 Wikipedia 沒有主動提供支援 Gears,你還是可以在沒有網路連線的情況下,離線瀏覽它的網頁! http://code.google.com/support/bin/answer.py?answer=81101&topic=11982

關於未來的發展,原本 Gears 是由 Google 提出的,但現在已經開放原始碼,所以將會由它的開發社群來決定未來的方向。不過,繼續與 HTML5 的標準整合應該是一定會的。而往手機上的行動網路的應用去發展也是可預期的。

—-
下一篇: App Engine – Advanced

—-
附帶一提,今天看到 Google Developer Day 的投影片已經公開出來了:
http://sites.google.com/site/developerdaytaiwan/google-developer-day-2008-taiwan

這裡是 Ray 當天演講的投影片:
http://twgdd2008.googlecode.com/svn/trunk/gears/p10n.html

而當天的影片可以在這裡找到:
http://tw.youtube.com/user/GoogleDevelopersZHTW

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!