專利名稱:基于web的多用戶協(xié)作的制作方法
基于web的多用戶協(xié)作背景出于各種原因,在地理上彼此分開的不同用戶可能希望就文檔進(jìn)行協(xié)作。先前用 于方便這種類型的遠(yuǎn)程協(xié)作的技術(shù)通常涉及使這些不同用戶在遠(yuǎn)程工作站上安裝合適的 特征豐富(richly-featured)的客戶端。概述描述了用于基于web的多用戶協(xié)作的工具和技術(shù)。這些工具可提供使用戶能夠使 用各自的瀏覽器來就文檔進(jìn)行遠(yuǎn)程協(xié)作的方法。這些方法可將給定文檔的各部分的表示發(fā) 送到瀏覽器,并將文檔的各部分與特定用戶相關(guān)聯(lián)。瀏覽器可接收如由用戶提供的命令的 表示,并且可確定是否在瀏覽器處執(zhí)行命令。這些方法還可包括從瀏覽器接收對(duì)文檔的各 部分的修訂,以及將文檔的這些部分存儲(chǔ)在被配置成存儲(chǔ)相對(duì)新近變更的內(nèi)容的存儲(chǔ)區(qū)域 中。上述主題也可被實(shí)現(xiàn)為方法、計(jì)算機(jī)控制裝置、計(jì)算機(jī)進(jìn)程、計(jì)算系統(tǒng)或諸如計(jì)算 機(jī)可讀介質(zhì)等制品。通過閱讀下面的詳細(xì)描述并審閱相關(guān)聯(lián)的附圖,這些及各種其他特征 將變得顯而易見。提供本概述是為了以簡化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概 念。本概述并不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在將本概述用 來限制所要求保護(hù)的主題的范圍。此外,所要求保護(hù)的主題不限于解決在本發(fā)明的任一部 分中提及的任何或所有缺點(diǎn)的實(shí)現(xiàn)。附圖簡述
圖1是示出用于提供基于web的多用戶協(xié)作的系統(tǒng)或操作環(huán)境的組合的框和流程 圖。圖2是示出涉及啟動(dòng)如圖1所示的協(xié)作過程的組件和數(shù)據(jù)流的組合的框和流程 圖。圖3是示出用于啟動(dòng)對(duì)某一文檔的協(xié)作工作(例如,編輯)的過程的流程圖。圖4是示出用于在給定瀏覽器處啟動(dòng)協(xié)作的組件和流程的組合的框和流程圖。圖5是示出用于處理協(xié)作用戶對(duì)文檔作出的修訂的組件和流程的組合的框和流 程圖。圖6是示出用于處理由瀏覽器報(bào)告的修訂的過程的流程圖。圖7是示出瀏覽器可提供的用以處理對(duì)由多個(gè)用戶協(xié)作編輯的內(nèi)容的修訂的組 件和數(shù)據(jù)流的組合的框和流程圖。圖8是示出用于接收并處理來自瀏覽器的修訂的服務(wù)器側(cè)組件和數(shù)據(jù)流的組合 的框和流程圖。圖9是示出用于提供協(xié)作客戶機(jī)服務(wù)的服務(wù)器側(cè)組件的框圖。詳細(xì)描述下面的詳細(xì)描述涉及用于基于web的多用戶協(xié)作的技術(shù)。盡管在結(jié)合計(jì)算機(jī)系統(tǒng) 上的操作系統(tǒng)和應(yīng)用程序的執(zhí)行而執(zhí)行的程序模塊的一般上下文中提出了此處描述的主到,其他實(shí)現(xiàn)可以結(jié)合其他類型的程序模塊來執(zhí)行。一般而 言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和 其他類型的結(jié)構(gòu)。此外,本領(lǐng)域技術(shù)人員將明白,可以利用其他計(jì)算機(jī)系統(tǒng)配置來實(shí)施此處 描述的主題,這些計(jì)算機(jī)系統(tǒng)配置包括手持式設(shè)備、多處理器系統(tǒng),基于微處理器的或可編 程消費(fèi)電子產(chǎn)品、小型計(jì)算機(jī)、大型計(jì)算機(jī)等等。在下面的詳細(xì)描述中,將參考構(gòu)成本發(fā)明的一部分的附圖,并且在附圖中作為說 明示出了各具體實(shí)施例或示例?,F(xiàn)在參考附圖(其中若干附圖中相同的標(biāo)號(hào)表示相同的元 素),將描述用于訪問和更新結(jié)構(gòu)化數(shù)據(jù)元素的多客戶機(jī)協(xié)作的工具和技術(shù)的各方面。圖1示出了在100處概括地表示的用于提供基于web的多用戶協(xié)作的系統(tǒng)和操作 環(huán)境。這些系統(tǒng)100可包括一個(gè)或多個(gè)服務(wù)器系統(tǒng)102,且本說明書的實(shí)現(xiàn)包括任何數(shù)量 的前端和/或后端服務(wù)器,如以下更詳細(xì)地描述的那樣。服務(wù)器可包括一個(gè)或多個(gè)處理器 104,這些處理器可具有被選為適于特定實(shí)現(xiàn)的特定類型或架構(gòu)。處理器104可以耦合到被 選為與處理器104兼容的一個(gè)或多個(gè)總線系統(tǒng)106。服務(wù)器102還可包括耦合到總線系統(tǒng)106的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)108的一個(gè)或多 個(gè)實(shí)例。這些總線系統(tǒng)能使處理器104能夠?qū)⒋a和/或數(shù)據(jù)讀取到計(jì)算機(jī)可讀存儲(chǔ)介質(zhì) 108或從計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)108中讀取代碼和/或數(shù)據(jù)。介質(zhì)108可表示使用包括但不 限于半導(dǎo)體、磁性材料、光學(xué)等任何合適的技術(shù)來實(shí)現(xiàn)的存儲(chǔ)元件。介質(zhì)108可包括存儲(chǔ)器 組件,無論其被歸類為RAM、ROM、閃存、還是其他類型,并且還可表示硬盤驅(qū)動(dòng)器。存儲(chǔ)介質(zhì)108可包括指令的一個(gè)或多個(gè)模塊,這些指令在被加載到處理器104中 并被執(zhí)行時(shí),使得服務(wù)器102執(zhí)行用于方便基于web的多用戶協(xié)作的各種技術(shù)。更具體而 言,存儲(chǔ)介質(zhì)108可包括向多個(gè)客戶機(jī)系統(tǒng)提供協(xié)作客戶機(jī)服務(wù)110的指令的模塊。圖1 在112a和112η處提供了這樣的客戶機(jī)系統(tǒng)的兩個(gè)示例(統(tǒng)稱為客戶機(jī)系統(tǒng)112)。然而, 本說明書的實(shí)現(xiàn)可包括多個(gè)客戶機(jī)系統(tǒng)。存儲(chǔ)介質(zhì)108可包含文檔存儲(chǔ)114的一個(gè)或多個(gè)實(shí)例。雖然文檔存儲(chǔ)的進(jìn)一步細(xì) 節(jié)在下文中提供,但總而言之,該文檔存儲(chǔ)容納或包含多個(gè)客戶機(jī)系統(tǒng)可對(duì)其進(jìn)行協(xié)作編 輯或創(chuàng)建的文檔。盡管圖1示出了文檔存儲(chǔ)114和協(xié)作客戶機(jī)服務(wù)110的軟件駐留在相同 的存儲(chǔ)介質(zhì)108上的情形,但該示例只是為了易于說明而提供的,而不是為了限制可能的 實(shí)現(xiàn)。特別注意,在某些情況下,文檔存儲(chǔ)和協(xié)作客戶機(jī)服務(wù)可以駐留在分開的介質(zhì)和/或 分開的系統(tǒng)或物理箱上。更詳細(xì)地轉(zhuǎn)向協(xié)作客戶機(jī)服務(wù)110,這些服務(wù)可方便服務(wù)器102和客戶機(jī)系統(tǒng)112 之間的協(xié)作流。圖1提供了協(xié)作流的兩個(gè)示例,協(xié)作流116a表示服務(wù)器102和客戶機(jī)系統(tǒng) 112a之間的數(shù)據(jù)和過程流,而協(xié)作流116N表示服務(wù)器102和客戶機(jī)系統(tǒng)112η之間的數(shù)據(jù) 和過程流。更詳細(xì)地轉(zhuǎn)向客戶機(jī)系統(tǒng)112,這些客戶機(jī)系統(tǒng)可包括各自的處理器118a和 118n(統(tǒng)稱為處理器118),這些處理器可具有或不具有與處理器104相同的類型和架構(gòu)。 總線系統(tǒng)120a和120η (統(tǒng)稱為系統(tǒng)120)可以分別耦合到處理器118a和118η,如圖1所 示。這些總線系統(tǒng)120可以在類型和架構(gòu)方面與其對(duì)應(yīng)的處理器118兼容,并且可具有或 不具有與服務(wù)器102上的總線系統(tǒng)106相同的類型和架構(gòu)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)122a和 122η (統(tǒng)稱為存儲(chǔ)介質(zhì)122)的各個(gè)實(shí)例可包含瀏覽器軟件124a和124η (統(tǒng)稱為瀏覽器
5124)。如此處所描述的,客戶機(jī)系統(tǒng)112和服務(wù)器系統(tǒng)102可以協(xié)作以使得各個(gè)終端用 戶126a和126n(統(tǒng)稱為終端用戶126)能夠就編輯和/或創(chuàng)建來自文檔存儲(chǔ)114的文檔 (整體地或部分地)進(jìn)行協(xié)作。在某些情況下,不同的終端用戶126可協(xié)作編輯給定文檔的 相同部分。在其他情況下,不同的終端用戶126可就給定文檔的不同部分進(jìn)行協(xié)作。服務(wù)器系統(tǒng)102和各個(gè)客戶機(jī)系統(tǒng)112可通過在128處概括地表示的一個(gè)或多個(gè) 合適的網(wǎng)絡(luò)來彼此通信。這些網(wǎng)絡(luò)128可采取任何合適的形式,無論被表征為全球、地區(qū)、 本地、個(gè)人、還是其他類型的網(wǎng)絡(luò)。服務(wù)器系統(tǒng)和客戶機(jī)系統(tǒng)可包括如適于與網(wǎng)絡(luò)128接口 的任何網(wǎng)絡(luò)適配器、硬件、軟件、協(xié)議棧等,但這些特征為了清楚和簡明起見從圖1中省略。如將在下文中更詳細(xì)地描述的,協(xié)作客戶機(jī)服務(wù)110可使用戶126能夠使用瀏 覽器來在編輯或創(chuàng)建文檔的至少各部分時(shí)進(jìn)行協(xié)作。因?yàn)橛脩?26能夠使用瀏覽器, 所以客戶機(jī)系統(tǒng)112可避免安裝額外的客戶機(jī)軟件以使用戶能夠在協(xié)作體驗(yàn)中暢游 (dissipate)。協(xié)作客戶機(jī)服務(wù)110可通過普遍存在的瀏覽器來向用戶126提供豐富的客 戶機(jī)體驗(yàn)。更具體而言,協(xié)作客戶機(jī)服務(wù)可使用戶能夠訪問各種類型的終端用戶功能,包括 但不限于文字處理、數(shù)據(jù)庫管理、電子表格管理、數(shù)據(jù)共享、電子筆記本能力等。為了啟用這 些用戶體驗(yàn),服務(wù)器端處的協(xié)作客戶機(jī)服務(wù)可轉(zhuǎn)換成/自由執(zhí)行上述功能中的任一個(gè)的特 征豐富的客戶機(jī)所使用的任何本機(jī)格式。圖1中用來描繪服務(wù)器和客戶機(jī)系統(tǒng)的圖形元素只是為了方便說明而選擇的,并 且不是為了限制此處的描述的可能的實(shí)現(xiàn)。更具體而言,圖1示出了服務(wù)器系統(tǒng)102是可能 由不止一個(gè)客戶機(jī)系統(tǒng)共享的集中式計(jì)算系統(tǒng)的示例??蛻魴C(jī)系統(tǒng)112可表示臺(tái)式系統(tǒng)、 膝上型或移動(dòng)計(jì)算系統(tǒng)、智能電話、啟用無線的個(gè)人數(shù)字助理(PDA)或其他合適的系統(tǒng)。然 而,此處的描述還構(gòu)想其他形式的服務(wù)器和/或客戶機(jī)系統(tǒng),包括但不限于圖1所示的那些 示例。在描述了圖1所示的系統(tǒng)和操作環(huán)境后,本討論現(xiàn)在繼續(xù)至對(duì)涉及啟動(dòng)協(xié)作過程 的組件和流程的描述。該討論現(xiàn)在用圖2給出。圖2示出了在200處概括地表示的涉及啟動(dòng)如圖1所示的協(xié)作過程的組件和數(shù)據(jù) 流。為了易于引用而非限制,圖2可從先前的附圖帶入某些附圖標(biāo)記以指代類似項(xiàng)目。例 如,圖2帶入來自圖1的協(xié)作客戶機(jī)服務(wù)110、文檔存儲(chǔ)114、網(wǎng)絡(luò)128、瀏覽器124和用戶 126的表示。更詳細(xì)地轉(zhuǎn)向文檔存儲(chǔ)114,該文檔存儲(chǔ)可實(shí)現(xiàn)可用于客戶機(jī)系統(tǒng)和終端用戶的 協(xié)作的文檔模型。更具體而言,這些模型可促進(jìn)在這些協(xié)作工作期間提高效率并優(yōu)化。例 如,某些文檔模型可將文檔的某些語義片段分配給此處被稱為單元格的構(gòu)造。另外,此處所 描述的另一構(gòu)造是修訂,修訂是在特定時(shí)刻拍攝的單元格的快照,提供該單元格在該時(shí)間 點(diǎn)處的表示。例如,給定文檔中的各個(gè)頁面可使用具體的單元格來表示。進(jìn)而,具體的修訂 可被細(xì)分成表示對(duì)應(yīng)于該單元格的內(nèi)容的各具體的部分或方面的一個(gè)或多個(gè)對(duì)象。例如, 對(duì)象可包括出現(xiàn)在給定頁面中的段落或圖像、出現(xiàn)在給定列表中的項(xiàng)目符號(hào)等。圖2在202處示出了修訂結(jié)構(gòu)的示例,并且可以理解,各實(shí)現(xiàn)可以在適當(dāng)時(shí)包括任 何數(shù)量的單元格結(jié)構(gòu)以表示一個(gè)或多個(gè)文檔。進(jìn)而,給定修訂結(jié)構(gòu)可包括一個(gè)或多個(gè)對(duì)象, 且圖2在204a和204η處示出了對(duì)象的示例(統(tǒng)稱為對(duì)象204)。具體的對(duì)象可由對(duì)應(yīng)的ID來標(biāo)識(shí)。這些對(duì)象可以指向同一單元格中的其他對(duì)象,或者可以指向其他單元格中的對(duì)象。協(xié)作客戶機(jī)服務(wù)110可發(fā)送來自給定的某一文檔的一個(gè)或多個(gè)修訂以供不同的 終端用戶126經(jīng)由瀏覽器124來協(xié)作。例如,協(xié)作客戶機(jī)服務(wù)110可確定不同的終端用戶 對(duì)給定文檔中的哪些修訂感興趣,并且然后可發(fā)送這些修訂以便在瀏覽器上向這些終端用 戶顯示。圖2在206a處表示了發(fā)送到瀏覽器124a以便于用戶126a交互的修訂的示例,在 206b處表示了發(fā)送到瀏覽器124b以便于用戶126b交互的修訂的示例,在206η處表示了發(fā) 送到瀏覽器124η以便于用戶126η交互的修訂的示例。協(xié)作客戶機(jī)服務(wù)110可確定要將給定文檔的哪些具體的修訂206分發(fā)給各個(gè)客戶 機(jī)瀏覽器。例如,協(xié)作客戶機(jī)服務(wù)最初可向?yàn)g覽器發(fā)送包含給定文檔中的所有頁面的名稱 的導(dǎo)航頁面,以及僅僅首頁的內(nèi)容。在瀏覽器處,不同的用戶然后可點(diǎn)擊他們各自的導(dǎo)航頁 面,并選擇他們想要查看和編輯哪些頁面。協(xié)作客戶機(jī)服務(wù)然后可將所選頁面的內(nèi)容下載 到各個(gè)瀏覽器。例如,不同的用戶126可滾動(dòng)到給定文檔中的相同或不同頁面。在該示例 中,一旦協(xié)作客戶機(jī)服務(wù)確定不同的用戶希望編輯的頁面,客戶機(jī)服務(wù)就可從文檔存儲(chǔ)114 中獲取對(duì)應(yīng)于這些頁面的那些修訂208。進(jìn)而,協(xié)作客戶機(jī)服務(wù)可將這些修訂分發(fā)給合適的 用戶,如206a、206b和206η(統(tǒng)稱為分發(fā)的修訂206)所示。在不同的情形中,協(xié)作客戶機(jī)服務(wù)不僅可分發(fā)由某一用戶正在編輯的給定頁面, 而且還可分發(fā)出現(xiàn)在該文檔中的該給定頁面之前和/或之后的特定數(shù)量的頁面。通過提供 特定數(shù)量的“前導(dǎo)”或“后繼”頁面,協(xié)作客戶機(jī)服務(wù)可使這些用戶能夠在不被發(fā)送額外的 修訂的情況下滾動(dòng)通過若干連續(xù)頁面。如將在下文中更詳細(xì)地描述的,單元格模型可允許文檔存儲(chǔ)方便不同終端用戶 (例如,126)之間的更高效的協(xié)作。例如,文檔的修訂表示通常比作為整體的文檔小得多。如將在下文中更詳細(xì)地描述的,文檔的單元格模型可允許文檔存儲(chǔ)方便不同終端 用戶(例如,126)之間的更高效的協(xié)作。例如,文檔的基于修訂的表示通常比作為整體的文 檔小得多。由此,與將整個(gè)文檔發(fā)送到不同的協(xié)作用戶和客戶機(jī)系統(tǒng)相比,協(xié)作客戶機(jī)服務(wù) 可通過發(fā)送這些修訂表示來減少網(wǎng)絡(luò)資源消耗并節(jié)省網(wǎng)絡(luò)帶寬。一旦協(xié)作客戶機(jī)服務(wù)已向?yàn)g覽器分發(fā)具體的修訂206,這些服務(wù)就可存儲(chǔ)在210 處概括地表示的協(xié)作信息。例如,該協(xié)作信息可指示已經(jīng)向哪些具體用戶分發(fā)了哪些具體 修訂。協(xié)作客戶機(jī)服務(wù)可將該信息存儲(chǔ)在服務(wù)器側(cè)修訂存儲(chǔ)212中,該存儲(chǔ)可包含不同用 戶126的表示214a和214m(統(tǒng)稱為用戶表示214)。進(jìn)而,用戶表示214可指示已經(jīng)向具體 用戶分發(fā)了哪些修訂,如216a和216m所示(統(tǒng)稱為修訂表示216)。如將在下文中更詳細(xì) 地描述的,服務(wù)器側(cè)修訂存儲(chǔ)中的這些條目可使得協(xié)作客戶機(jī)服務(wù)能夠確定由某些用戶作 出的哪些修訂可能與其他用戶相關(guān)。在圖2中描述了涉及啟動(dòng)各個(gè)客戶機(jī)系統(tǒng)和用戶之間的協(xié)作的組件和流程之后, 本討論現(xiàn)在繼續(xù)至對(duì)執(zhí)行以啟動(dòng)對(duì)某一文檔的協(xié)作工作的處理流程的描述。該描述現(xiàn)在用 圖3來提供。圖3示出了在300處概括地表示的、用于啟動(dòng)對(duì)某一文檔的協(xié)作工作(例如,編 輯)的處理流程。為了易于引用而非限制,圖3可從先前的附圖帶入某些附圖標(biāo)記以指代 類似項(xiàng)目。例如,圖3從先前附圖帶入?yún)f(xié)作客戶機(jī)服務(wù)110的表示。雖然處理流程300結(jié)
7合這些協(xié)作客戶機(jī)服務(wù)來描述,但注意,處理流程300的實(shí)現(xiàn)還可由其他組件或服務(wù)來執(zhí) 行而不背離本說明書的范圍和精神。更詳細(xì)地轉(zhuǎn)向處理流程300,框302概括地表示標(biāo)識(shí)一個(gè)或多個(gè)具體用戶對(duì)給定 文檔中的哪些單元格感興趣。例如,框302可包括將給定文檔中的頁面的名稱連同該文檔 中的首頁的內(nèi)容一起發(fā)送到多個(gè)協(xié)作用戶。這些用戶然后可選擇他們希望查看的頁面的名 稱。框302可包括提供相對(duì)于某一用戶感興趣的給定單元格的某種程度的前導(dǎo)和/或后繼。 回想上文對(duì)文檔的單元格模型的討論,例如,某些單元格可表示這些文檔中的頁面???04概括地表示獲取框302中所標(biāo)識(shí)的感興趣的修訂。例如,框304可包括從 包含內(nèi)容的文檔存儲(chǔ)中獲取感興趣的修訂,各個(gè)不同的用戶可使用此處所描述的工具和技 術(shù)來就該內(nèi)容進(jìn)行協(xié)作。圖2在114處提供了這一文檔存儲(chǔ)的示例,并在208處表示單元 格的示例???06概括地表示將所獲取的感興趣的修訂發(fā)送到某些用戶。例如,假設(shè)三個(gè)不 同的用(例如,用戶126a、126b和126η)戶正在就如圖2所示的給定文檔進(jìn)行協(xié)作,這些用 戶可表現(xiàn)出對(duì)該給定文檔的相同或不同部分的興趣。因此,框306可包括將給定文檔的適 當(dāng)部分的修訂表示發(fā)送到這些不同的用戶(例如,206a、206b和206η)???08概括地表示將某些用戶與這些用戶正在操作的單元格相關(guān)聯(lián)。例如,框308 可包括將某些用戶的表示(例如,圖2中的214)與其修訂已被提供給這些用戶(例如,圖 2中的修訂表示216)的單元格相關(guān)聯(lián)。框310概括地表示存儲(chǔ)框308中所定義的關(guān)聯(lián)。例如,框310可包括更新服務(wù)器 側(cè)修訂存儲(chǔ)(例如,212)以存儲(chǔ)協(xié)作用戶和這些用戶正就其進(jìn)行協(xié)作的單元格之間的關(guān)聯(lián) 或關(guān)系,如圖2在214和216處所表示的。在描述了用于啟動(dòng)對(duì)某一文檔的協(xié)作工作的處理流程300后,本討論現(xiàn)在繼續(xù)至 對(duì)可出現(xiàn)在瀏覽器側(cè)以啟動(dòng)該協(xié)作的組件和流程的更詳細(xì)的描述。該討論現(xiàn)在用圖4給
出ο圖4示出了在400處概括地表示的、可出現(xiàn)在瀏覽器側(cè)以啟動(dòng)給定客戶機(jī)系統(tǒng)處 的協(xié)作的組件和流程。為了易于引用而非限制,圖4可從先前的附圖帶入某些附圖標(biāo)記以 指代類似項(xiàng)目。例如,圖4從先前附圖帶入網(wǎng)絡(luò)128、分發(fā)的單元格206、瀏覽器124和用戶 126。更詳細(xì)轉(zhuǎn)向圖4,客戶機(jī)側(cè)復(fù)制管理器402可通過網(wǎng)絡(luò)128從服務(wù)器102接收分 發(fā)的修訂206。這些修訂206可表示最初呈現(xiàn)給用戶126的頁面,或者可表示其他協(xié)作用 戶對(duì)這些單元格作出的修訂。出于描述圖4的目的,假設(shè)單元格206表示最初通過瀏覽器 124呈現(xiàn)給用戶126的頁面。一般而言,復(fù)制管理器402可以在瀏覽器和服務(wù)器之間上傳和下載對(duì)單元格的修 訂。復(fù)制管理器還可以在適當(dāng)時(shí)在網(wǎng)絡(luò)和瀏覽器之間變換協(xié)議。在圖4中,在206處表示 的修訂被假定為采用適于網(wǎng)絡(luò)傳輸?shù)膮f(xié)議,而在404處表示的修訂被變換為適于供瀏覽器處理。復(fù)制管理器402可將修訂404轉(zhuǎn)發(fā)到客戶機(jī)側(cè)修訂存儲(chǔ)406。一般而言,修訂存儲(chǔ) 可管理和存儲(chǔ)針對(duì)單元格206的修訂(或?qū)@些修訂的變更),無論這些修訂或變更是在給 定的瀏覽器124處本地地發(fā)生,還是在其他瀏覽器處遠(yuǎn)程地發(fā)生并被報(bào)告到給定的本地瀏覽器124中。當(dāng)開始涉及修訂404的給定的協(xié)作工作時(shí),修訂存儲(chǔ)406可存儲(chǔ)這些單元格 408的初始狀態(tài)或修訂以供將來參考。修訂存儲(chǔ)406可將這些單元格的表示提供給圖數(shù)據(jù)結(jié)構(gòu)410,該圖數(shù)據(jù)結(jié)構(gòu)提供 正在協(xié)作編輯的文檔的語義模型,且該語義模型提供文檔的分層結(jié)構(gòu)。假設(shè)數(shù)據(jù)/視圖模 型的實(shí)現(xiàn),圖結(jié)構(gòu)410可提供該模型的數(shù)據(jù)部分。圖結(jié)構(gòu)410可以是有向無環(huán)圖,其包括不 同類型的節(jié)點(diǎn)、特性集以及表示傳入的單元格206的其他元素。圖4在412a和412η處表 示節(jié)點(diǎn)的示例(統(tǒng)稱為圖節(jié)點(diǎn)412)。例如,假設(shè)傳入的修訂表示協(xié)作編輯的文檔的頁面,圖 結(jié)構(gòu)410中的不同節(jié)點(diǎn)412可表示不同的段落、圖像、頁面、章節(jié)或頁面中的其他部分或子 元素。某些對(duì)象可以用圖中的一個(gè)節(jié)點(diǎn)(例如,圖像)來表示,而諸如表等其他內(nèi)容可用圖 中的許多節(jié)點(diǎn)來表示。在說明性而非限制性實(shí)現(xiàn)中,客戶機(jī)側(cè)復(fù)制管理器402、客戶機(jī)側(cè)修訂存儲(chǔ)406、 初始單元格狀態(tài)408和圖結(jié)構(gòu)410可以用Script#來創(chuàng)作并用JavaScript來實(shí)現(xiàn)。然而, 這些示例只是為了方便本說明書而提供的并且在不同的實(shí)現(xiàn)中其他情形是可能的。圖結(jié)構(gòu)410可提供由傳入的修訂206表示的內(nèi)容的瀏覽器無關(guān)模型。進(jìn)而,該圖結(jié) 構(gòu)中的節(jié)點(diǎn)412可以在各個(gè)不同的部分可用的瀏覽器中的任一個(gè)中呈現(xiàn)。因此,視圖模型 或視圖代碼414可將這些節(jié)點(diǎn)412從圖結(jié)構(gòu)410呈現(xiàn)或映射到瀏覽器相關(guān)的查看模型。圖 4提供了作為文檔對(duì)象模型(D0M)416的這一查看模型的示例。DOM 416可存儲(chǔ)協(xié)作編輯的 文檔的當(dāng)前視圖,以表示出現(xiàn)在文檔的一個(gè)或多個(gè)頁面中的段落、圖像、列表、或其他元素。視圖代碼414可從圖結(jié)構(gòu)410中創(chuàng)建D0M,且該圖結(jié)構(gòu)中的節(jié)點(diǎn)412a和412η對(duì)應(yīng) 于DOM中的節(jié)點(diǎn)418a和418η (統(tǒng)稱為DOM節(jié)點(diǎn)418)。D0M416然后可被呈現(xiàn)在瀏覽器124 上以供用戶126查看。圖4表示所呈現(xiàn)的內(nèi)容部分可由用戶在任何給定時(shí)刻在瀏覽器視口 420處查看。用戶然后可以在他或她覺得適合時(shí)與瀏覽器視口中所表示的無論哪些元素交 互。在圖4中描述了用于啟動(dòng)對(duì)具體文檔的協(xié)作工作的組件和流程之后,本討論現(xiàn)在 轉(zhuǎn)向?qū)τ糜谔幚韰f(xié)作用戶對(duì)文檔作出的修訂的組件和流程的描述。該描述現(xiàn)在用圖5來提{共。圖5示出了在500處概括地表示的、用于處理協(xié)作用戶對(duì)文檔作出的修訂的組件 和流程。為了易于引用而非限制,圖5可從先前的附圖帶入某些附圖標(biāo)記以指代類似項(xiàng)目。 例如,圖5從先前附圖帶入網(wǎng)絡(luò)128、瀏覽器124、用戶126、協(xié)作客戶機(jī)服務(wù)110、服務(wù)器側(cè) 修訂存儲(chǔ)212以及相關(guān)用戶表示214和修訂表示216。更詳細(xì)地轉(zhuǎn)向圖5,假設(shè)用戶126a和126b正在就給定文檔中的相同單元格進(jìn)行協(xié) 作。圖5在502a和502b處將該單元格表示為在用戶126a和126b之間共享。如上所述, 服務(wù)器側(cè)修訂存儲(chǔ)212可創(chuàng)建并存儲(chǔ)用戶表示214和修訂表示216以啟動(dòng)該情形。如果用 戶126a創(chuàng)建對(duì)共享單元格502a的修訂504a,則瀏覽器124a可將這些修訂發(fā)送到協(xié)作客戶 機(jī)服務(wù)110。關(guān)于修訂504a的通知還可指示已被修訂的單元格502a。在接收到關(guān)于修訂504a的通知后,協(xié)作客戶機(jī)服務(wù)110可確定這些修訂504a是 否與其他用戶正在編輯的單元格相關(guān)。為了作出該判定,協(xié)作客戶機(jī)服務(wù)110可查詢服務(wù) 器側(cè)修訂存儲(chǔ)212以確定任何其他用戶是否正在編輯單元格502a。在這種情況下,該查詢 將指示用戶126b也在編輯剛剛被修訂的單元格502a。另外,瀏覽器124b可向協(xié)作客戶機(jī)
9服務(wù)110查詢對(duì)單元格502的任何新變更。以此方式,運(yùn)行協(xié)作客戶機(jī)服務(wù)的服務(wù)器可以 隱式地確定兩個(gè)客戶機(jī)正在就單元格502進(jìn)行協(xié)作。因此,在某些情況下,協(xié)作客戶機(jī)服務(wù) 110可形成關(guān)于這些修訂的通知并將通知發(fā)送到瀏覽器124b。在其他情況下,協(xié)作客戶機(jī) 服務(wù)可從瀏覽器124b接收請求,并且可以用對(duì)單元格502的適當(dāng)修訂來響應(yīng)這些請求。圖 5在504b處概括地表示這些和其他情形。進(jìn)而,瀏覽器124b可更新其顯示畫面以結(jié)合修訂 504b。在圖5所示的情況下,假定用戶126η正在編輯與用戶126a和126b共享的單元格 502a和502b (統(tǒng)稱為單元格502)不同的單元格506。盡管這些不同的單元格502和506可 以在相同的文檔中,但用戶126η當(dāng)前未編輯單元格502。在這種情況下,其他用戶作出的對(duì) 該單元格502的修訂不與用戶126η和/或?yàn)g覽器124η直接相關(guān)。因此,協(xié)作客戶機(jī)服務(wù) 110不會(huì)將這些修訂立即通知給瀏覽器124η,由此節(jié)省與這一通知相關(guān)聯(lián)的網(wǎng)絡(luò)帶寬。然 而,用戶126η可對(duì)單元格506作出修訂508,且這些修訂在適當(dāng)時(shí)被傳遞給協(xié)作客戶機(jī)服務(wù) 110。進(jìn)而,協(xié)作客戶機(jī)服務(wù)可將這些修訂傳遞給正在編輯同一單元格506的任何其他瀏覽 器或用戶。如上所述,與先前的技術(shù)相比,圖5所示的情形可提供操作效率。例如,協(xié)作客戶 機(jī)服務(wù)可分發(fā)文檔的各部分(例如,修訂),而不是整個(gè)文檔本身。通常,這些修訂比整個(gè) 文檔小得多。由此,與發(fā)送整個(gè)文檔相比,通過網(wǎng)絡(luò)發(fā)送這些修訂消耗更少的網(wǎng)絡(luò)帶寬。另 外,瀏覽器124和協(xié)作客戶機(jī)服務(wù)110可交換對(duì)文檔的這些部分的修訂,而不是交換整個(gè)文 檔的已更新版本。因此,與交換整個(gè)文檔的已更新版本相比,通過網(wǎng)絡(luò)傳遞這些修訂涉及發(fā) 送少得多的數(shù)據(jù)。按照該模型進(jìn)行的網(wǎng)絡(luò)通信可以與所傳遞的變更的大小成比例,但不與 變更的對(duì)象的大小成比例。當(dāng)各個(gè)瀏覽器124報(bào)告對(duì)正在協(xié)作地編輯的單元格的修訂時(shí),協(xié)作客戶機(jī)服務(wù)只 向正在編輯相同單元格的那些其他瀏覽器分發(fā)這些修訂的指示。一般而言,如果給定文檔 是用多個(gè)單元格來建模的,并且如果多個(gè)用戶正在就該文檔進(jìn)行協(xié)作,則這些單元格通常 隨機(jī)分布在該多個(gè)用戶之間。由此,在最壞的情況下,所有這些用戶都可能就同一單元格進(jìn) 行協(xié)作,但在最好的情況下,至多一個(gè)用戶操作給定單元格。典型的操作情形可以落在這兩 個(gè)極端之間的某處,且協(xié)作客戶機(jī)服務(wù)通過只向操作被修訂的單元格的那些用戶和瀏覽器 報(bào)告修訂來進(jìn)一步節(jié)省網(wǎng)絡(luò)帶寬和資源。在圖5中描述了涉及處理協(xié)作用戶對(duì)文檔作出的修訂的組件和數(shù)據(jù)流之后,本討 論現(xiàn)在轉(zhuǎn)向?qū)τ糜谔幚磉@些修訂的處理流程的描述。該討論現(xiàn)在用圖6給出。圖6示出了在600處概括地表示的、用于處理如由瀏覽器報(bào)告的修訂的流程。為 了易于引用而非限制,圖6可從先前的附圖帶入某些附圖標(biāo)記以指代類似項(xiàng)目。例如,圖6 從先前附圖帶入?yún)f(xié)作客戶機(jī)服務(wù)110的表示。雖然處理流程600結(jié)合這些協(xié)作客戶機(jī)服務(wù) 來描述,但注意,處理流程600的實(shí)現(xiàn)還可由其他組件或服務(wù)來執(zhí)行而不背離本說明書的 范圍和精神。更詳細(xì)地轉(zhuǎn)向圖6,框602表示接收如由一個(gè)或多個(gè)瀏覽器(例如,先前附圖中的 124)報(bào)告的修訂的指示。例如,框602可包括協(xié)作客戶機(jī)服務(wù)110接收這些修訂的指示,如 圖5在504a和508處所表示的???04概括地表示標(biāo)識(shí)經(jīng)受框602中所報(bào)告的修訂的單元格。例如,所報(bào)告的修訂可包括指示這些修訂所修改的單元格的標(biāo)識(shí)符。
框606概括地表示存儲(chǔ)如在框606中接收到的所報(bào)告的修訂。例如,框606可包 括將這些修訂存儲(chǔ)在服務(wù)器側(cè)修訂存儲(chǔ)(例如,112)中。判定框608表示確定任何其他瀏覽器是否已請求查看和/或編輯已被修訂的給定 單元格。如果當(dāng)前沒有其他瀏覽器在給定時(shí)刻請求給定單元格,則處理流程600可取“否” 分支610以返回框602并等待來自一個(gè)瀏覽器的對(duì)單元格的下一次修訂的通知。返回到判定框608,如果其他瀏覽器已經(jīng)請求所修訂的單元格,則處理流程600可 取“是”分支612至框614,框614表示將對(duì)單元格的修訂發(fā)送到任何作出請求的瀏覽器。 如以上在圖5中所描述的,可供協(xié)作的單元格可以隨機(jī)分布在協(xié)作用戶之間。在這種情況 下,框614可包括將關(guān)于這些更新的通知發(fā)送到在給定文檔中協(xié)作的用戶的某一較小的子 集,而不是發(fā)送到就給定文檔進(jìn)行協(xié)作的所有用戶。在執(zhí)行框614后,處理流程600可返回到框602以等到來自瀏覽器的下一個(gè)修訂 通知。在圖6中描述了用于處理各個(gè)協(xié)作瀏覽器所報(bào)告的修訂的流程之后,本討論現(xiàn)在轉(zhuǎn) 向?qū)Τ霈F(xiàn)在瀏覽器側(cè)以處理這些修訂的組件和數(shù)據(jù)流的描述。該描述現(xiàn)在用圖7來提供。圖7示出了在700處概括地表示的組件和數(shù)據(jù)流,瀏覽器可提供這些組件和數(shù)據(jù) 流以處理對(duì)多個(gè)用戶協(xié)作地編輯的內(nèi)容的修訂。為了易于引用而非限制,圖7可從先前的 附圖帶入某些附圖標(biāo)記以指代類似項(xiàng)目。例如,圖7從先前附圖帶入網(wǎng)絡(luò)128、示例用戶 126、示例瀏覽器124、示例DOM 416、示例視圖代碼或視圖模型408、以及示例圖結(jié)構(gòu)410。圖 7還帶入客戶機(jī)側(cè)修訂存儲(chǔ)406,該修訂存儲(chǔ)406可包括顯示在瀏覽器124中以供用戶126 編輯的單元格的初始狀態(tài)408。另外,圖7帶入復(fù)制管理器402,該復(fù)制管理器402可通過 網(wǎng)絡(luò)128來報(bào)告來自瀏覽器的修訂504。更詳細(xì)地轉(zhuǎn)向圖7,用戶126可發(fā)出被發(fā)送出以與呈現(xiàn)在瀏覽器124中的內(nèi)容交互 的各種命令,并且可通過這些命令來對(duì)該內(nèi)容作出任何數(shù)量的修訂。這些命令702可采取 各種類型,這取決于呈現(xiàn)在瀏覽器中的內(nèi)容的類型,并且取決于什么能力通過協(xié)作客戶機(jī) 服務(wù)(例如,先前附圖中的110)對(duì)瀏覽器可用。取決于用戶發(fā)出的命令702的類型,瀏覽器可對(duì)DOM或圖結(jié)構(gòu)執(zhí)行這些命令。通 常,可對(duì)圖執(zhí)行大多數(shù)命令,這可提供數(shù)據(jù)/視圖模型的模型部分。以此方式,模型部分保 持最新。然而,可對(duì)DOM執(zhí)行編輯命令,并且在特定點(diǎn)(例如,在單詞或段落的末尾),DOM 可以用由于用戶編輯而產(chǎn)生的修訂來更新圖結(jié)構(gòu)。以此方式,DOM和圖結(jié)構(gòu)不會(huì)招致跟蹤 并處理用戶鍵入的每一鍵擊的性能懲罰,并且改為聚集鍵擊或命令以提高處理效率。圖結(jié)構(gòu)中的節(jié)點(diǎn)可響應(yīng)于命令702被更新,且只更新受到命令影響的那些節(jié)點(diǎn)。 一旦更新受影響的節(jié)點(diǎn),視圖代碼408就可遍歷這些節(jié)點(diǎn)并用例如適當(dāng)?shù)腍TML來填充D0M。 進(jìn)而,瀏覽器124可遍歷DOM并呈現(xiàn)HTML以便向用戶126顯示。以此方式,瀏覽器124可 使用戶126能夠可視化該用戶輸入的任何命令的結(jié)果。在某些情況下,瀏覽器124可確定是在瀏覽器處本地地執(zhí)行命令,還是在服務(wù)器 處遠(yuǎn)程地執(zhí)行命令。該判定可基于性能考慮事項(xiàng)來作出;通常,可將資源密集的操作卸載到 服務(wù)器。然而,供考慮的其他因素可包括服務(wù)器在給定時(shí)刻負(fù)載很重??蛻魴C(jī)側(cè)修訂存儲(chǔ)406可存儲(chǔ)由于命令或用戶通過瀏覽器124采取的其他動(dòng)作而 產(chǎn)生的一組修訂。以瀏覽器中所顯示的單元格的初始狀態(tài)的表示408開始,修訂存儲(chǔ)406可創(chuàng)建并存儲(chǔ)一系列修訂增量704。這些修訂增量表示在給定瀏覽器124處本地地發(fā)生在 圖上的順序的、增量的變更。除其他功能之外,這些修訂增量可提供瀏覽器可用于向用戶提 供“撤消”功能的機(jī)制,用戶可回退一組修訂以返回到某一先前狀態(tài)。修訂存儲(chǔ)406可將修訂和修訂增量存儲(chǔ)在例如最初按照出現(xiàn)次序排列的一個(gè)或 多個(gè)鏈接列表中。然而,隨著時(shí)間的流逝,這一鏈接列表可變得相當(dāng)長以至于無法遍歷。通 常,用戶感興趣的大多數(shù)修訂(例如,用于“撤消”操作)可能在該鏈接列表的末尾。然而, 訪問這些感興趣的修訂可涉及遍歷整個(gè)鏈接列表,從而承擔(dān)相當(dāng)多的性能懲罰。在這種情 況下,修訂存儲(chǔ)可重新組織修訂增量的鏈接列表,以使得增量看上去“向前”將來狀態(tài),而不 是看上去穿過列表“倒退”回早先的初始狀態(tài)。盡管修訂存儲(chǔ)406可存儲(chǔ)表示出現(xiàn)在本地瀏覽器處的修訂中的大多數(shù)或全部的 增量,但修訂存儲(chǔ)406可通過網(wǎng)絡(luò)128向服務(wù)器報(bào)告或可不報(bào)告所有這些修訂。例如,給定 本地地出現(xiàn)在瀏覽器 上的一組完整的修訂增量704,修訂存儲(chǔ)406可向復(fù)制管理器402報(bào)告 這些修訂增量的某一子集(在706處表示)。進(jìn)而,復(fù)制管理器可將這些修訂轉(zhuǎn)發(fā)給服務(wù) 器,如在504處帶入的。更具體而言,瀏覽器中的復(fù)制管理器可確定何時(shí)將這些修訂轉(zhuǎn)發(fā)給 服務(wù)器,以使得不會(huì)不恰當(dāng)?shù)卮驍_在瀏覽器中發(fā)生的用戶交互。最終,給定瀏覽器處的復(fù)制 管理器可將用戶在該瀏覽器處作出的聚集或累積的所得變更傳送到服務(wù)器。該瀏覽器處的 復(fù)制管理器可組合出現(xiàn)在該瀏覽器處的修訂和修訂增量以定義模擬對(duì)單元格的聚集或累 積變更的所得修訂,由此建立單元格的當(dāng)前狀態(tài)。進(jìn)而,復(fù)制管理器可將單元格的當(dāng)前狀態(tài) 向上發(fā)送到服務(wù)器。在圖7中描述了用于處理修訂的瀏覽器側(cè)組件和數(shù)據(jù)流之后,本討論現(xiàn)在轉(zhuǎn)向?qū)?用于處理這些修訂的服務(wù)器側(cè)組件和數(shù)據(jù)流的描述。該描述現(xiàn)在用圖8來提供。圖8示出了在800處概括地表示的、用于接收并處理來自瀏覽器的修訂的服務(wù)器 側(cè)組件和數(shù)據(jù)流。為了易于引用而非限制,圖8可從先前的附圖帶入某些附圖標(biāo)記以指代 類似項(xiàng)目。在圖8所示的示例中,示例用戶126a和126η可以與示例瀏覽器124a和124η交 互以創(chuàng)建對(duì)某些單元格802a和802η的修訂504a和504η。進(jìn)而,瀏覽器124a和124η可通 過網(wǎng)絡(luò)128向協(xié)作客戶機(jī)服務(wù)110報(bào)告這些修訂。在接收到來自瀏覽器的這些修訂后,協(xié)作客戶機(jī)服務(wù)110可將這些修訂存儲(chǔ)在服 務(wù)器側(cè)修訂存儲(chǔ)(例如,212)中,如在804處概括地表示的。圖8只是出于本討論的目的而 示出兩個(gè)瀏覽器傳遞修訂,但本說明書的各種實(shí)現(xiàn)可包括向協(xié)作客戶機(jī)服務(wù)報(bào)告修訂的任 何數(shù)量的瀏覽器124。如以上在圖2中所描述的,服務(wù)器側(cè)修訂存儲(chǔ)212可包含任何數(shù)量的單元格的修 訂,這些修訂進(jìn)而可包含一個(gè)或多個(gè)對(duì)象表示204。這些對(duì)象表示204可以與初始修訂806 相關(guān)聯(lián),該初始修訂指示單元格或?qū)ο笤趯?duì)該單元格或?qū)ο蟮娜魏涡抻喭ㄖ竭_(dá)前的狀況 或狀態(tài)。當(dāng)關(guān)于修訂504的通知從各個(gè)瀏覽器到達(dá)時(shí),這些通知可指示哪些單元格正在被 修訂,如分別在802a和802η處表示的。當(dāng)協(xié)作客戶機(jī)服務(wù)110接收到這些通知時(shí),這些服 務(wù)可創(chuàng)建修訂增量808并將其存儲(chǔ)在服務(wù)器側(cè)。在功能上,這些服務(wù)器側(cè)的修訂增量808 可以與在瀏覽器側(cè)描述的修訂增量類似地操作。然而,應(yīng)當(dāng)理解,服務(wù)器側(cè)修訂增量可以與或不與瀏覽器側(cè)修訂增量完全相同。在圖8中描述了用于接收和處理來自瀏覽器的修訂的服務(wù)器側(cè)組件和數(shù)據(jù)流之 后,本討論現(xiàn)在繼續(xù)至對(duì)服務(wù)器側(cè)組件的更詳細(xì)的描述。該描述現(xiàn)在用圖9來提供。圖9示出了在900處概括地表示的、與協(xié)作客戶機(jī)服務(wù)相關(guān)聯(lián)的服務(wù)器側(cè)組件。為 了易于引用而非限制,圖9可從先前的附圖帶入某些附圖標(biāo)記以指代類似項(xiàng)目。例如,圖9 帶 入?yún)f(xié)作客戶機(jī)服務(wù)110的示例以及網(wǎng)絡(luò)128的示例。web服務(wù)902作為接口來提供,該接口從瀏覽器接收通信并將這些通信定向到協(xié) 作客戶機(jī)服務(wù)中的適當(dāng)?shù)慕M件。這些通信可包括例如,如從就給定內(nèi)容實(shí)例進(jìn)行協(xié)作的各 個(gè)不同的瀏覽器接收到的修訂或修訂增量的通知。這些通知可來自/去往各個(gè)瀏覽器。該 web服務(wù)可提供適配器904,該適配器904將這些通信從適于通過網(wǎng)絡(luò)128來傳輸?shù)膮f(xié)議轉(zhuǎn) 換成更適于在協(xié)作客戶機(jī)服務(wù)中處理的內(nèi)部二進(jìn)制協(xié)議。該web服務(wù)可支持用于向?yàn)g覽器發(fā)送修訂,從瀏覽器接收修訂等的方法或應(yīng)用程 序編程接口(API)。另外,這些API可包括向服務(wù)器指示給定瀏覽器已經(jīng)瀏覽離開給定頁 面,并由此已完成編輯該頁面上的任何單元格的方法。存儲(chǔ)層906可通過web服務(wù)適配器904來進(jìn)行通信,并且可抽象去往和/或來自 服務(wù)器側(cè)修訂存儲(chǔ)212的通信。存儲(chǔ)層906還可提供存儲(chǔ)適配器908,該存儲(chǔ)適配器提供到 服務(wù)器側(cè)修訂存儲(chǔ)的接口。當(dāng)修訂從各個(gè)瀏覽器到達(dá)時(shí),存儲(chǔ)層906可將這些修訂高速緩 存在修訂存儲(chǔ)中。服務(wù)器側(cè)修訂存儲(chǔ)可包括具有不同特性的不同存儲(chǔ)區(qū)域或高速緩存。例如,第一 存儲(chǔ)區(qū)域910可適用于或被配置成存儲(chǔ)較新近且較頻繁訪問和修訂的較小的數(shù)據(jù)組塊。為 了易于引用而不是為了限制可能的實(shí)現(xiàn),圖9將該第一存儲(chǔ)區(qū)域表示為“熱”存儲(chǔ)區(qū)域或高 速緩存。修訂存儲(chǔ)還可包括第二存儲(chǔ)區(qū)域或高速緩存912,該第二存儲(chǔ)區(qū)域或高速緩存適用 于或被配置成存儲(chǔ)較不新近且較不頻繁訪問和修訂的較大的數(shù)據(jù)組塊。為了易于引用而不 是為了限制可能的實(shí)現(xiàn),圖9將該第二存儲(chǔ)區(qū)域表示為“冷”存儲(chǔ)區(qū)域或高速緩存。歸并層914及相關(guān)歸并引擎916產(chǎn)生允許存儲(chǔ)層調(diào)用歸并能力的那些接口及相關(guān) 方法。例如,當(dāng)不同的瀏覽器向協(xié)作客戶機(jī)服務(wù)發(fā)送對(duì)給定內(nèi)容的修訂時(shí),存儲(chǔ)層可將對(duì) 應(yīng)的修訂和/或修訂增量存儲(chǔ)在高速緩存910和912中。在適當(dāng)時(shí),存儲(chǔ)層906可調(diào)用歸 并層914來歸并或協(xié)調(diào)這些各個(gè)修訂以更新瀏覽器正就其進(jìn)行協(xié)作的內(nèi)容。另外,歸并層 914可基于諸如提供協(xié)作客戶機(jī)服務(wù)的服務(wù)器在任何給定時(shí)刻負(fù)載有多重或有多忙等因素 來確定何時(shí)調(diào)用和運(yùn)行歸并引擎916。在上述處理中,保存操作變?yōu)榕c歸并操作異步。通常,在瀏覽器側(cè),修訂數(shù)據(jù)可以 是高度串行化的,而在服務(wù)器側(cè),可以重新組織并優(yōu)化修訂數(shù)據(jù)以使其不那樣串行化。由 此,如由服務(wù)器維護(hù)的修訂歷史可以是或不是指示在瀏覽器上發(fā)生變更的次序的線性表 示。相反,修訂歷史可包括分支或其他非線性特性。通常,向用戶和瀏覽器屏蔽歸并過程的細(xì)節(jié),以使得歸并延遲不會(huì)過渡影響總體 用戶體驗(yàn)。換言之,用戶可繼續(xù)瀏覽器處的修訂,而不等待歸并完成或甚至知道歸并在服務(wù) 器端進(jìn)行。協(xié)作客戶機(jī)服務(wù)110可使用圖9所示的體系結(jié)構(gòu)來執(zhí)行若干功能。這些功能可包 括但不限于優(yōu)化傳送至和傳送自各個(gè)瀏覽器的數(shù)據(jù)凈荷、確定運(yùn)行發(fā)自瀏覽器的命令的最佳環(huán)境、優(yōu)化內(nèi)容和單元格在服務(wù)器上的存儲(chǔ)、啟用對(duì)協(xié)作內(nèi)容的多用戶編輯等。本討論現(xiàn)在提供關(guān)于這些功能中的每一個(gè)的附加細(xì)節(jié)。優(yōu)化數(shù)據(jù)凈荷當(dāng)打開文檔或文件以便借助協(xié)作客戶機(jī)服務(wù)來進(jìn)行協(xié)作時(shí),存儲(chǔ)層906可檢索該 文件或文檔中的一個(gè)或多個(gè)適當(dāng)頁面的內(nèi)容。該存儲(chǔ)層可從服務(wù)器側(cè)修訂存儲(chǔ)中只讀取該 一個(gè)或多個(gè)頁面的數(shù)據(jù)。可優(yōu)化該讀取以便首先在熱存儲(chǔ)(例如,910)中查找這些頁面。 如果所請求的這些頁面不在熱存儲(chǔ)中,則該讀取可增量式地搜索冷存儲(chǔ)(例如,912)。適當(dāng)?shù)臄?shù)據(jù)從修訂存儲(chǔ)中被讀取,存儲(chǔ)在服務(wù)器上的前端高速緩存中,并向下發(fā) 送到適當(dāng)?shù)臑g覽器(例如,124)。接收瀏覽器可將該數(shù)據(jù)存儲(chǔ)在瀏覽器側(cè)修訂存儲(chǔ)中(例 如,306),并在圖結(jié)構(gòu)中重新創(chuàng)建或重新組合(rehydrate)該數(shù)據(jù)(例如,310)。當(dāng)給定用 戶在給定瀏覽器中修訂內(nèi)容時(shí),或者如果另一用戶在另一瀏覽器中變更該內(nèi)容,則協(xié)作客 戶機(jī)服務(wù)可生成指示這些變更的修訂和修訂增量,并且可將這些修訂發(fā)送到就該內(nèi)容進(jìn)行 協(xié)作的其他瀏覽器。在瀏覽器側(cè),瀏覽器可以在瀏覽器側(cè)修訂存儲(chǔ)中處理修訂和修訂增量,且瀏覽器 在修訂存儲(chǔ)之外創(chuàng)建對(duì)圖結(jié)構(gòu)的適當(dāng)更新。在服務(wù)器側(cè),協(xié)作客戶機(jī)服務(wù)可將這些修訂和 修訂增量存儲(chǔ)在熱存儲(chǔ)(例如,910)中。之后,協(xié)作客戶機(jī)服務(wù)可歸并從不同的用戶接收到 的修訂和修訂增量。例如,客戶機(jī)服務(wù)可與其他操作異步地運(yùn)行歸并操作,以使得不會(huì)不恰 當(dāng)?shù)卮驍_這些其他操作(即,“安靜地”)。其他用戶或?yàn)g覽器可向服務(wù)器詢問對(duì)協(xié)作內(nèi)容作出的任何變更。在這些情況下, 服務(wù)器可從前端服務(wù)器所維護(hù)的高速緩存中檢索這些變更,或者前端服務(wù)器可從后端服務(wù) 器中檢索這些變更。一般而言,協(xié)作客戶機(jī)服務(wù)可通過允許前端服務(wù)器本地地存儲(chǔ)這些前 端服務(wù)器先前已經(jīng)讀取的數(shù)據(jù),并將這些數(shù)據(jù)返回給作出請求的瀏覽器而不去往后端服務(wù) 器,來提供機(jī)會(huì)主義熱存儲(chǔ)高速緩存。協(xié)作客戶機(jī)服務(wù)還可提供到高速緩存的重定向,其中 在另一前端服務(wù)器包含瀏覽器正在請求的被高速緩存的數(shù)據(jù)的情況下,一個(gè)前端服務(wù)器可 將來自該瀏覽器的請求重定向到該另一前端服務(wù)器。在適當(dāng)?shù)沫h(huán)境中運(yùn)行命令協(xié)作客戶機(jī)服務(wù)可以在不與服務(wù)器交互或沒有服務(wù)器干預(yù)的情況下在瀏覽器中 執(zhí)行多個(gè)命令。該瀏覽器可通過操縱D0M(例如,316)以及對(duì)圖結(jié)構(gòu)(例如,310)執(zhí)行操作 的組合來執(zhí)行這些命令。然而,某些命令可以在服務(wù)器上運(yùn)行,因?yàn)榉?wù)器可提供運(yùn)行這些 命令的執(zhí)行能力,并且因?yàn)樵诜?wù)器上運(yùn)行命令不涉及將代碼(以及機(jī)密和/或敏感信息) 下載到遠(yuǎn)程瀏覽器。另外,在服務(wù)器上運(yùn)行的那些命令可以在不會(huì)另外打擾服務(wù)器的“普通”操作的情 況下這樣做。例如,當(dāng)存儲(chǔ)層906接收到新變更時(shí),該存儲(chǔ)層可將該變更傳遞給服務(wù)器側(cè)修 訂存儲(chǔ)212以便存儲(chǔ)。該存儲(chǔ)層還可將該新變更通知給歸并層914。然而,歸并層可試圖在 適當(dāng)時(shí)與該通知異步地歸并該新內(nèi)容。該異步操作可以將使服務(wù)器過載以使其太忙以至于 無法處理其他請求的風(fēng)險(xiǎn)降到最低。就此,歸并層可以只在前端服務(wù)器具有足夠的空閑周 期來投入到該歸并的情況下操作。諸如粘貼等命令可以在瀏覽器和服務(wù)器的組合中運(yùn)行。瀏覽器可包括執(zhí)行以下動(dòng) 作的邏輯檢測到在執(zhí)行充分的粘貼操作時(shí)所涉及的處理太復(fù)雜以至于無法在該瀏覽器處本地地執(zhí)行,并且可改為要求服務(wù)器來執(zhí)行該操作。同樣,在服務(wù)器上運(yùn)行的代碼可調(diào)度并 執(zhí)行該粘貼操作以使得不會(huì)不恰當(dāng)?shù)卮驍_在該服務(wù)器上執(zhí)行的其他操作。服務(wù)器存儲(chǔ)當(dāng)要存儲(chǔ)協(xié)作內(nèi)容(例如,單元格)時(shí),該內(nèi)容可從瀏覽器移至前端服務(wù)器,并最 終移至存儲(chǔ)層。該存儲(chǔ)層可以與服務(wù)器側(cè)修訂存儲(chǔ)通信,并且可將單元格存儲(chǔ)在兩個(gè)不同 的位置,較新近發(fā)生的相對(duì)較小的變更可被存儲(chǔ)在較快、較昂貴的熱存儲(chǔ)(例如,910)中。 這優(yōu)化了檢索該小數(shù)據(jù)集以將其傳遞給其他用戶,而不是必須從較慢的、較昂貴的冷存儲(chǔ) (例如,912)中檢索數(shù)據(jù)。一旦修訂或變更被合并或歸并到主文件中,就可將該主文件存儲(chǔ) 在冷存儲(chǔ)中。這通過將通常相對(duì)較大的主文件存儲(chǔ)在比熱存儲(chǔ)便宜的存儲(chǔ)中來優(yōu)化成本。在瀏覽器請求文件中的特定單元格時(shí),存儲(chǔ)層和文件提供者可從這些存儲(chǔ)(即, 熱存儲(chǔ)和冷存儲(chǔ))中的一個(gè)或兩者中檢索所請求的修訂,并且可將修訂作為統(tǒng)一數(shù)據(jù)呈現(xiàn) 給瀏覽器和其余服務(wù)器側(cè)組件。存儲(chǔ)層還可將存儲(chǔ)在服務(wù)器上的用戶內(nèi)容轉(zhuǎn)換成可供瀏覽 器消費(fèi)的內(nèi)容,同時(shí)擴(kuò)展內(nèi)容中的特定節(jié)點(diǎn),并且不下載瀏覽器不使用的內(nèi)容。多用戶編輯如上所述,協(xié)作客戶機(jī)服務(wù)所采用的數(shù)據(jù)模型可包括修訂??蛻魴C(jī)服務(wù)還可以在 不表達(dá)用戶交互的情況下(即,“在幕后”)加載/保存這些修訂。該方法可以自動(dòng)傳播來 自用戶的變更,以便優(yōu)化如何共享用戶內(nèi)容和修訂(即,通過對(duì)線路(wire)造成最小負(fù)擔(dān)) 以及何時(shí)共享這些內(nèi)容和修訂。以此方式,一旦協(xié)作客戶機(jī)服務(wù)檢測到多個(gè)用戶正在就給 定內(nèi)容進(jìn)行協(xié)作,協(xié)作客戶機(jī)服務(wù)就可以更快地將來自給定用戶的變更同步到所有其他瀏
IrWSB 見益。協(xié)作客戶機(jī)服務(wù)可變換數(shù)據(jù)模型以允許瀏覽器和服務(wù)器高效地處理數(shù)據(jù)。瀏覽器 然后可顯示并處理適當(dāng)?shù)膬?nèi)容。另外,協(xié)作客戶機(jī)服務(wù)可以與電子筆記本應(yīng)用程序(例如, 包括但不限于可從華盛頓州雷蒙德市的微軟公司購得的OneNoteTM產(chǎn)品)集成。例如,存 儲(chǔ)層可改變修訂格式以使得能夠以與電子筆記本應(yīng)用程序兼容的格式存儲(chǔ)這些修訂。以此 方式,協(xié)作客戶機(jī)服務(wù)可以與富客戶端無縫集成,并且可利用可廣泛購得的瀏覽器,同時(shí)依 靠電子筆記本應(yīng)用程序(或其他軟件產(chǎn)品或應(yīng)用程序)來提供更豐富的用戶體驗(yàn)。雖然以計(jì)算機(jī)結(jié)構(gòu)特征、方法動(dòng)作、以及計(jì)算機(jī)可讀介質(zhì)專用的語言描述了本文 呈現(xiàn)的主題,但是應(yīng)該理解,在所附權(quán)利要求書中所限定的本發(fā)明不必限于本文描述的具 體特征、動(dòng)作、或介質(zhì)。相反,這些具體特征、動(dòng)作和介質(zhì)是作為實(shí)現(xiàn)權(quán)利要求的示例形式來 公開的。上述主題僅作為說明提供,并且不應(yīng)被解釋為限制。可對(duì)此處所述的主題作出各 種修改和改變,而不必遵循所示和所述的示例實(shí)施方式和應(yīng)用,且不背離所附權(quán)利要求書 中所述的本發(fā)明的真正精神和范圍。
權(quán)利要求
至少一種其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令(110)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(108),所述指令在由計(jì)算機(jī)執(zhí)行時(shí)使得所述計(jì)算機(jī)執(zhí)行一種方法,所述方法包括使多個(gè)用戶(126)能夠使用各自的瀏覽器(124)來就至少一個(gè)文檔(114)進(jìn)行遠(yuǎn)程協(xié)作;將所述文檔的一部分的表示(206)發(fā)送(306)到與所述用戶中的至少一個(gè)用戶相關(guān)聯(lián)的瀏覽器;以及將所述文檔的所述一部分與所述至少一個(gè)用戶相關(guān)聯(lián)(308)。
2.如權(quán)利要求1所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于從所述瀏覽器接收對(duì)所述 文檔的所述一部分的至少一個(gè)修訂的表示的指令。
3.如權(quán)利要求2所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于確定所述用戶中的至少另 一個(gè)用戶正在就所述文檔的所述一部分進(jìn)行協(xié)作的指令,并且還包括用于將所述修訂的表 示發(fā)送到所述用戶中的所述至少另一個(gè)用戶的指令。
4.如權(quán)利要求2所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于確定所述用戶中的至少另 一個(gè)用戶正在就所述文檔的所述一部分進(jìn)行協(xié)作的指令,并且還包括用于只向所述用戶中 的所述至少另一個(gè)用戶發(fā)送所述修訂的表示的指令。
5.如權(quán)利要求2所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于從所述瀏覽器接收對(duì)所述 文檔的所述一部分的至少另一個(gè)修訂的表示的指令。
6.如權(quán)利要求5所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于歸并對(duì)所述文檔的所述一 部分的所述修訂和所述至少另一個(gè)修訂的指令。
7.如權(quán)利要求1所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于將所述文檔建模為多個(gè)單 元格的指令,并且其中所述用于發(fā)送所述文檔的一部分的表示的指令包括用于將所述修訂 中的至少一個(gè)發(fā)送到所述瀏覽器的指令。
8.如權(quán)利要求1所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于高速緩存至少所述文檔的 所述一部分的指令。
9.如權(quán)利要求8所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于從所述高速緩存中檢索至 少所述文檔的所述一部分,并且用于將所述文檔的所述一部分的表示發(fā)送到與所述用戶中 的至少另一個(gè)用戶相關(guān)聯(lián)的至少另一個(gè)瀏覽器的指令。
10.如權(quán)利要求8所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于接收對(duì)至少所述文檔的所 述一部分的請求,并且用于將該請求重定向到所述高速緩存的指令。
11.至少一種其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令(110)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(122或 108),所述指令在由計(jì)算機(jī)執(zhí)行時(shí)使得所述計(jì)算機(jī)執(zhí)行一種方法,所述方法包括使多個(gè)用戶(126)能夠使用各自的瀏覽器(124)來就至少一個(gè)文檔(114)進(jìn)行遠(yuǎn)程協(xié)作;在所述瀏覽器中的一個(gè)處接收由所述用戶中的至少一個(gè)用戶提供的至少一個(gè)命令 (702)的表示;以及確定(314)是否在所述瀏覽器處執(zhí)行所述命令。
12.如權(quán)利要求11所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于在所述瀏覽器處執(zhí)行所 述命令的指令。
13.如權(quán)利要求12所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于對(duì)由所述瀏覽器維護(hù)的文檔對(duì)象模型執(zhí)行所述命令的指令。
14.如權(quán)利要求12所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于對(duì)由所述瀏覽器維護(hù)的 圖結(jié)構(gòu)執(zhí)行所述命令的指令。
15.如權(quán)利要求11所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于將所述命令轉(zhuǎn)發(fā)給服務(wù) 器以便執(zhí)行的指令。
16.如權(quán)利要求11所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于接收在所述服務(wù)器上執(zhí) 行所述命令的結(jié)果的指令。
17.至少一種其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令(110)的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(108),所述 指令在由計(jì)算機(jī)執(zhí)行時(shí)使得所述計(jì)算機(jī)執(zhí)行一種方法,所述方法包括使多個(gè)用戶(126)能夠使用各自的瀏覽器(124)來就至少一個(gè)文檔(114)進(jìn)行協(xié)作;將所述文檔的一部分的表示(206)發(fā)送到與所述用戶中的至少一個(gè)相關(guān)聯(lián)的瀏覽器;從所述瀏覽器接收(602)對(duì)所述文檔的所述一部分的至少一個(gè)修訂(504);以及將所述文檔的所述一部分存儲(chǔ)在被配置成存儲(chǔ)相對(duì)較新近地變更的文檔的各部分的 第一存儲(chǔ)區(qū)域(910)中。
18.如權(quán)利要求17所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于將所述文檔的其余部分 存儲(chǔ)在被配置成存儲(chǔ)未相對(duì)較新近地變更的文檔的各部分的第二存儲(chǔ)區(qū)域中。
19.如權(quán)利要求18所述的存儲(chǔ)介質(zhì),其特征在于,還包括所述用于存儲(chǔ)的指令包括用 于將所述文檔的所述一部分存儲(chǔ)在熱存儲(chǔ)區(qū)域中的指令,并且其中所述用于存儲(chǔ)所述文檔 的其余部分的指令包括用于將所述文檔的其余部分存儲(chǔ)在冷存儲(chǔ)區(qū)域中的指令。
20.如權(quán)利要求17所述的存儲(chǔ)介質(zhì),其特征在于,還包括用于將所述文檔的所述一部 分轉(zhuǎn)換成與客戶機(jī)應(yīng)用程序相關(guān)聯(lián)的至少一個(gè)格式或者將所述文檔的所述一部分從所述 至少一個(gè)格式轉(zhuǎn)換的指令。
全文摘要
描述了用于基于web的多用戶協(xié)作的工具和技術(shù)。這些工具可提供使用戶能夠使用各自的瀏覽器來就文檔進(jìn)行遠(yuǎn)程協(xié)作的方法。這些方法可將給定文檔的各部分的表示發(fā)送到瀏覽器,并將文檔的各部分與特定用戶相關(guān)聯(lián)。瀏覽器可接收如由用戶提供的命令的表示,并且可確定是否在瀏覽器處執(zhí)行命令。這些方法還可包括從瀏覽器接收對(duì)文檔的各部分的修訂,以及將文檔的這些部分存儲(chǔ)在被配置成存儲(chǔ)相對(duì)新近變更的內(nèi)容的存儲(chǔ)區(qū)域中。
文檔編號(hào)G06F15/16GK101971163SQ200980109416
公開日2011年2月9日 申請日期2009年1月30日 優(yōu)先權(quán)日2008年3月14日
發(fā)明者H·薩利巴, P·恩格拉弗 申請人:微軟公司