WikiCalc 一問世就帶來許多獨特的功能,是同時期的試算表所沒有的:
- 純文字、HTML,以及共筆式的文本標記支援。
- 共筆文字包含插入鏈接、圖片,以及和從儲存格引用值的功能。
- 公式儲存格可以引用放在其他網站的 WikiCalc 網頁裡的值。
- 支援輸出到靜態網頁,以及將動態資料內嵌至其他網頁。
- 儲存格能使用 CSS 來改變樣式。
- 記錄所有編輯操作,以供稽核紀錄。
- 和共筆系統一樣,保留每一個版本,並可以隨時回復。
從幾個小型試算表組建一個主試算表的能力,是 WikiCalc 的一大強項。舉例來說,每位銷售員可以把營業額放在自己的試算表頁面裡;然後銷售經理可以綜合這些資料到該區的試算表中,之後銷售副總再綜合各區域的數字,構成主試算表。
每次有試算表更新時,所有綜合它的試算表都會即時反映出這次更新。如果主試算表的讀者想要瞭解更多細節,只需要點擊鏈結,即可查看試算表後面的試算表。這項功能讓使用者不再需要在多個地方更新數字,從而減少了多餘而容易出錯的操作,並確保所有資訊的視圖總在最新狀態。
為了即時重新計算的需求,WikiCalc 採用了輕客戶端的設計,將所有要顯示的資訊都放在伺服器端。每個試算表在瀏覽器上以 <table>
元素呈現;編輯儲存格時,瀏覽器會發送一個 ajaxsetcell
指令到伺服器,然後伺服器告訴瀏覽器哪個儲存格需要更新。
當然,這項設計依賴於瀏覽器與伺服器之間的快速連接。當網路出現延遲的時候,使用者在更新儲存格和看到它的新內容之間,會看到 Loading... 訊息頻繁出現;這問題對於需要即時調整、預覽公式結果的使用者特別嚴重。
此外,因為 <table>
元素與試算表有著相同大小,一個 100x100 試算表會在 DOM 裡創建上萬個 <td>
元素,大量消耗瀏覽器的記憶資源,進一步限制頁面的大小。
由於這些缺點,雖然 WikiCalc 作為在本地主機運行的獨立伺服器時尚稱實用,但要當作網頁內容管理系統的一部分,卻超出了它的能力。
在 2006 年,Dan Bricklin 與 Socialtext 團隊開始開發 SocialCalc 專案,用 JavaScript 語言對 WikiCalc 原本的 Perl 源碼作出改寫,目標是能支援大型試算表、分散式協作流程,以及與桌面應用程式一樣的操作界面。
這裡是 SocialCalc 的一些設計目標:
- 處理十萬個儲存格的能力。
- 進行編輯操作時提供快速回應。
- 客戶端的稽核紀錄和還原/重作支援。
- 善用 Javascript 和 CSS ,提供完整的視覺呈現功能。
- 用 Javascript 提昇效能,並加強對各種不同瀏覽器的支援。
經過三年的開發和發佈許多次測試版之後,Socialtext 在 2009 年釋出 SocialCalc 1.0,成功實現了設計目標。現在,讓我們來看看 SocialCalc 的系統架構。
(未完,待續。)