專利名稱:順序布局構建器的制作方法
順序布局構建器
背景技術:
使用Web瀏覽器再現結構化的Web內容,諸如HTML和CSS內容,典型地牽涉到處理包括標記的結構化文檔以確定內容的布局(layout),使得其可以由Web瀏覽器呈現。這樣的處理可以包括內容位置、大小和形狀計算,以便從所述標記確定相關聯的內容將如何被呈現在屏幕或顯示器上。對于可用性和用戶感知而言,期望的是布局和呈現算法按照可適用的標準快速并正確地工作。在整個業界,布局處理普遍以遞歸方式執行。例如,這樣的處理可以包括在HTML標記的根節點上發起處理操作,并以遞歸的方式貫穿該標記向下處理到葉節點。該處理典型地在HTML文檔被呈現之前在整個HTML文檔上進行。此外,現代的多核體系結構可以準許處理被并行地執行。然而,因為布局處理的遞歸性質,從并行處理所得到的優勢不能被充分利用。 布局處理的遞歸性質也可能導致處理中的重復,這進而又可能使性能和用戶體驗降級。
發明內容
本概要被提供來以簡化的形式介紹概念的選擇,這些概念還將在下面的詳細說明中進行描述。本概要既不打算確認所要求保護的主題的關鍵特征或必要特征,也不打算被使用來限制所要求保護的主題的范圍。按照一個或多個實施例,對結構化文檔的布局處理以順序的方式實施(conduct)。布局過程被分成可以順序地執行的多個更小的步驟。在至少一些實施例中,布局構建器被結合棧使用以控制在文檔的結構層次的各層次上的布局執行。不可變的數據結構被使用,并且其允許順序布局操作的并行執行。在至少一些實施例中,可以完成布局序列的部分執行來產生可用的數據。
在全部附圖中,使用相同的標號來標注同樣的特征。圖I圖示了按照一個或多個實施例的、在其中可以利用這里描述的各種原理的操作環境。圖2圖示了按照一個或多個實施例的示例性體系結構。圖3描述了按照一個或多個實施例的、在順序布局構建過程中的布局空間分配協議。圖4是描述按照一個或多個實施例的方法中的步驟的流程圖。圖5圖示了按照一個或多個實施例的布局框的類層次。圖6圖示了按照一個或多個實施例的框構建器的類層次。圖7圖示了可以被使用來實施一個或多個實施例的示例性系統。
具體實施例方式綜沭
按照一個或多個實施例,布局處理以順序的方式實施。布局過程被分成可以順序地執行的多個更小的步驟。在至少一些實施例中,布局構建器被結合棧使用以控制在結構化文檔的結構層次的各層次上的布局執行。不可變的數 據結構被使用,并且允許順序布局操作的并行執行。在至少一些實施例中,可以完成布局序列的部分執行來產生可用的數據。這里描述的技術可以結合任意類型的結構化文檔一起被使用,作為例子而不是限制,結構化文檔諸如是HTML文檔。在一個或多個實施例中,在布局構建器的影響下,順序布局處理被組織為按一組順序的步驟執行的非遞歸樹徑(tree walk),所述的一組順序的步驟諸如像“進入塊”、“退出塊”、“構建行”等等。一個個步驟可以具有恒定的時間來執行,并且整個過程可以在一個個步驟后被停止,以便產生可用于再現和用戶交互的部分布局。在一個或多個實施例中,通過把在布局構建期間使用的臨時數據與提供用于再現和交互的布局結果的持久性數據進行分離,而將布局構建數據結構組織成達到高效緊致性。臨時數據由一組布局構建器代表,每種布局一個布局構建器。布局構建器是在布局處理期間臨時存在的臨時對象。另一方面,持久性數據被表示為存儲在最終得到的顯示樹中的布局框,顯示樹可以被處理來呈現相關聯的內容。這樣做可以比過去更加高效地利用存儲器資源。例如,在HTML處理的上下文中,在任一特定時間存在的布局構建器的數量由HTML文檔的深度來限定,而不是由HTML文檔的寬度來限定。因此,由布局構建器代表的臨時數據不必駐留在最終得到的顯示樹中。另外,被處理的數據和處理算法都以可伸縮的方式被組織。這允許任意的布局片段的執行。這種順序可伸縮性導致了對于可以被使用于回溯針對滾動、分頁、欄目化等等的嘗試的算法的改進性能。此外,在至少一些實施例中,布局結果由被設計為不可變的布局框所代表。這使得布局框能夠在動態情景中被再次使用,動態情景諸如是漸增的部分更新、并行布局、漸進式再現以及回溯布局執行。此外,在至少一些實施例中,在規定的、計算的以及已用值和結構之間強制分離。這允許跨整個布局流水線的、部分的和可再次使用的計算。在HTML上下文中,規定的值涉及在原始的HTML標記中如何規定值。這些值可能是矛盾的、不完整的和無效的。這些不一致性可使規定的值很難利用。計算的值是與歸一化屬性和歸一化值的組合相關聯的。這些值是不矛盾的且是可靠的。已用值代表在布局框中存儲的值。在隨后的討論中,提供了標題為“操作環境”的章節,其描述了一種在其中可以利用一個或多個實施例的環境。在這之后,標題為“示例性體系結構”的章節描述了按照一個或多個實施例的示例性體系結構。接著,標題為“示例性方法”的章節描述了按照一個或多個實施例的示例性方法。在這之后,標題為“實施細節”的章節描述了按照一個或多個實施例的實施細節。最后,標題為“示例性系統”的章節描述了可以被使用來實施一個或多個實施例的示例性系統。操作環境
圖I圖示了按照一個或多個實施例的操作環境,總地標為100。環境100包括計算設備102,其具有一個或多個處理器104、一個或多個計算機可讀存儲媒體106、和駐留在計算機可讀存儲媒體上并可由處理器執行的一個或多個應用108。作為例子而不是限制,所述計算機可讀存儲媒體可以包括典型地與計算設備相關聯的、所有形式的易失性和非易失性存儲器和/或存儲媒體。這樣的媒體可以包括ROM、RAM、閃存、硬盤、可拆卸媒體等等。下面在圖7中顯示和描述了計算設備的一個特定的例子。另外,計算設備102包括以web瀏覽器110形式的軟件應用。可以使用任何適當的web瀏覽器,其例子是從本文檔的受讓人和其它方可得到的。另外,計算機可讀存儲媒體106可以包括順序布局構建器111,其按上面和下面所描述的那樣進行操作。順序布局構建器111可以被實施為可由應用108和瀏覽器110使用的獨立的組件。替換地或另外地,順序布局構建器111可以被實施為應用108和/或瀏覽器110的一部分。在操作中,順序布局構建器111允許諸如HTML文檔這樣的結構化文檔的順序處理,以及允許布局以順序的方式被計算。順序布局構建器使用高效的體系結構,該體系結構利用了布局構建器的用來監督布局處理的過程的用途、利用了熟知它們自己的針對內容處理的要求的框構建器類型、以及利用了由框構建器類型的實例構建且持有最終要在顯示器 或屏幕上再現的數據的相關聯的布局框。另外,環境100包括諸如因特網那樣的網絡112,以及可以從其接收內容和向其發送內容的一個或多個網站114。這樣的內容可以包括諸如HTML文檔的結構化文檔,以及可以由順序布局構建器111如上面和下面描述的在其上進行操作的其它web內容。計算設備102可以被具體化為任何適當的計算設備,作為例子而不是限制,諸如是臺式計算機,便攜式計算機,比如個人數字助理(PDA)、蜂窩電話那樣的手持式計算機,等
坐寸o已經描述了示例性操作環境后,現在考慮可以被使用來順序地處理諸如HTML的結構化文檔的示例性體系結構的討論。在下面的討論中,使用HTML做為結構化文檔的例子。應當理解和明白,下面描述的技術可以結合其它類型的結構化文檔一起被利用,而不背離所要求保護的主題的精神和范圍。示例件體系結構
圖2圖示了按照一個或多個實施例的示例性體系結構,總地標為200。在這個特定的例子中,體系結構200包括布局構建器202、框構建器204、布局框206、容器框208和行框210。另外,體系結構200包括可以在HTML的順序布局處理期間采取的動作212、214、216和218的表示。該體系結構被使用來構建布局框的顯示樹,其中布局框包含內容或數據,諸如文本、圖像或圖形元素,比如將要在屏幕或顯示器上再現的順序矢量圖形(Svg)元素。在圖示的和描述的實施例中,布局構建器202構成監督或組織整個順序布局處理的布局引擎或對象。布局構建器202負責實例化布局框206,然后與框構建器204進行通信以務必使(see)布局框206被填充以要在屏幕或顯示器上再現的內容。框構建器204是負責構建特定類型的布局框的對象。特別地,有不同類型的框構建器,在204上只顯示了其中的一個。有用于構建表、圖像、多色、行等等的框構建器。框構建器被特定地配置成構建特定的一段內容。如本領域的技術人員所理解的,不同類型的內容具有不同的布局要求。每個不同類型的框構建器熟知針對它的相關聯的內容類型的不同布局要求,并能構建相對應的一段內容。
在圖示的和描述的實施例中,框構建器204是代表這些不同類型的構建器的共同屬性和方法的抽象類,并因此定義了框構建的通用聯系(contact)。布局構建器202接收HTML文檔并且順序地移動穿過該文檔,與框構建器204進行通信,框構建器204進而又用它的內容來填充布局框206。在這個特定的例子中,容器框208和行框210代表布局框206的子類別或子類。行框210代表對應于一行文本的個別情形。容器框208是可包含諸如容器框和行框這樣的其它框的框。諸如圖像和Svg圖元這樣的內容被作為容器框對待。動作212、214、216和218構成代表在順序布局處理期間發生的一系列基本構建步驟的動作或函數。這里,有四個動作BuildLine (f)、EnterBlock (f)、ReEnterBlock (f)和ExitBox (f)。所述函數加有代表布局構建器的縮寫“LB”的前綴,因為它們被實施為這個類的方法。針對這些方法中的每個方法的主要參數是當前的框構建器,其在圖中由從框構建器204朝向所述方法中的每個的數據流箭頭來反映。 BuildLine (f)
這個方法對應于在其上構建一行文本的布局構建器202的基本步驟。這是可以由布局構建器構建的內容的最小原子部分。要指出的是,所有可能的嵌套的塊,諸如內聯塊(inline block)、浮動物(floater)、或錨定在該行的絕對定位的塊,并不在BuildLine函數內部遞歸地構建。而是,它們作為該行的兄弟(sibling)經由EnterBlock/ExitBox回調而被單獨地構建。EnterBlock (f)
當布局構建器202遇到諸如DIV或TABLE的某個塊元素的打開標簽時執行這個方法。ReEnterBlock(f)
在塊被前一頁上的分頁符中斷后,當該塊在后一頁上被進入時,調用這個方法。ExitBox (f)
當布局構建器202到達塊元素的結束標簽時,或在當分段的(分頁的)空間在頁邊界上被中斷時的情形下,執行這個方法。在操作中,布局處理被組織為對應于HTML的基本結構單元(即,純文本的元素標簽或順串(run))的一系列步驟。布局構建器202接收HTML文檔且一個接一個地讀取這些單元,并執行適當的動作。當布局構建器遇到打開標簽時,它識別其類型、創建適當的類型特定的框構建器(比如框構建器204)、以及通過將所述框構建器推給構建棧來激活該框構建器。然后所述類型特定的框構建器將控制針對特定元素構建布局內容的過程。當布局構建器遇到元素的關閉標簽時,它與活動的、類型特定的框構建器通信以使得最終得到的布局框被完成并被附連到顯示樹上。在這個過程期間,當遇到一行文本時,行框形式的布局框(比如行框210)被創建并被插入到顯示樹中。圖3在某些方面與圖2類似,其描述了按照一個或多個實施例的、在順序布局構建過程中的布局空間分配協議300。該圖也代表可擴展性模型。圖3描述了在通用布局構建器和多個特定框構建器之間的協議。可擴展性通過簡單地將新的框構建器類型插入到協議中,而在想要新的布局類型的事件中變得容易。如將在下面更詳細地描述的,所述協議使用了一組虛擬函數,該組虛擬函數被定義為框構建器的抽象類。不同類型的框構建器可以不同地實施這些虛擬函數。從布局構建器的觀點來看,這些函數中僅有少數函數看起來是和布局構建器一樣的。如上面所指出的,它們的實現取決于框構建器類型而不同。當布局構建器貫穿HTML進行處理時,以及當它遇到標簽和其它內容時,它在相關聯的框構建器上調用相應的函數。當布局構建器移動穿過特定標簽的內容時,它可以在框構建器上酌情調用這些不同的函數,使框構建器能執行它的構造,以使得相關聯的容器框被構建并為顯示作準備。然而,在各段HTML內容之間移動的過程由相關聯的個體的框構建器控制,所述框構建器明確地熟知所述內容的結構。在圖示的和描述的實施例中,協議300包括布局構建器302、ContainerBox.BoxBuilder (容器框.框構建器)304、ContainerBox. BoxBuilder 306 和容器框 308。如以上所討論的,布局構建器302代表組織整個布局構建過程的對象。布局構建器302與由圖中的ContainerBox. BoxBuilder 304代表的各個框構建器一起工作。如以上所指出的,ContainerBox. BoxBuilder是一種抽象類,其定義框構建器的許多具體的子類型 要遵循的總合同(general contract)。它定義了布局構建器302在不同的構建步驟期間調用的一組虛擬回調,這里被描繪為列舉的橢圓。下表描述了在橢圓的列舉和它的相關聯的虛擬函數之間的關聯。在表的下面,描述了每個虛擬函數。
權利要求
1.一種計算機實施的方法,包括 接收結構化文檔; 在結構化文檔內遇到打開標簽; 創建與所述打開標簽相關聯的框構建器; 創建相關聯的布局框;以及 使用所述框構建器來順序地處理所述結構化文檔,以及用可再現的內容填充所述布局框。
2.權利要求I的方法,還包括確定所述結構化文檔中的隨后的標簽是否是與所述打開標簽相關聯的關閉標簽,并且如果是的話,使得所述布局框插入到顯示樹中。
3.權利要求I的方法,還包括 確定所述結構化文檔中的隨后的標簽是否是與所述打開標簽相關聯的關閉標簽,并且如果是的話,使得所述布局框插入到顯示樹中;和再現所述顯示樹中的內容。
4.權利要求I的方法,還包括 確定所述結構化文檔中的隨后的標簽是否是與所述打開標簽相關聯的關閉標簽,并且如果是的話,使得所述布局框插入到顯示樹中;和 再現所述顯示樹中的內容,其中所述再現是在所述結構化文檔被完全地順序處理之前執行的。
5.權利要求I的方法,還包括確定所述結構化文檔中的隨后的標簽是否是與所述打開標簽相關聯的關閉標簽,并且如果不是的話,繼續順序地處理所述結構化文檔,以有效于用可再現的內容填充所述布局框。
6.權利要求I的方法,其中所述使用包括使用被組織為分層地嵌套的框構建器的數據棧來存儲臨時數據。
7.權利要求I的方法,其中所述框構建器包括特定于所述打開標簽的布局構建邏輯。
8.權利要求I的方法,其中所述框構建器被組織為有限狀態機。
9.權利要求I的方法,其中所述布局框是可再次使用的。
10.權利要求I的方法,其中所述創建是由布局構建器執行的,以及其中所述結構化文檔的順序處理利用并發的布局構建器而并行地發生。
11.一種或多種計算機可讀存儲媒體,其包含計算機可執行指令,當這些指令被執行時實施一種方法,所述方法包括 接收HTML文檔; 在HTML文檔內遇到打開標簽; 創建與所述打開標簽相關聯的框構建器; 創建相關聯的布局框; 使用所述框構建器來順序地處理所述HTML文檔,以及用可再現的內容填充所述布局框; 確定所述HTML文檔中的隨后的標簽是否是與所述打開標簽相關聯的關閉標簽,并且如果不是的話,繼續順序地處理所述HTML文檔,以有效于用可再現的內容填充所述布局框;和如果所述隨后的標簽是與所述打開標簽相關聯的關閉標簽,則使得所述布局框插入到顯示樹中。
12.權利要求11的一種或多種計算機可讀存儲媒體,還包括再現所述顯示樹中的內容。
13.權利要求11的一種或多種計算機可讀存儲媒體,還包括在所述HTML文檔被完全地順序處理之前再現所述顯示樹中的內容。
14.權利要求11的一種或多種計算機可讀存儲媒體,其中所述使用包括使用被組織為分層地嵌套的框構建器的數據棧來存儲臨時數據。
15.權利要求11的一種或多種計算機可讀存儲媒體,其中所述框構建器包括特定于所述打開標簽的布局構建邏輯。
全文摘要
描述了布局處理技術,所述布局處理技術允許實施結構化文檔的處理,以及允許以順序的方式完成相關聯的布局。布局過程被分成可以順序地執行的多個更小的步驟。在至少一些實施例中,布局構建器被結合棧使用以控制在結構化文檔的結構層次的各層次上的布局執行。不可變的數據結構被使用,并且其允許順序布局操作的并行執行。在至少一些實施例中,可以完成所述布局序列的部分執行來產生可用的數據。
文檔編號G06F17/21GK102804175SQ201180015863
公開日2012年11月28日 申請日期2011年3月24日 優先權日2010年3月25日
發明者E.N.韋塞羅夫, R.P.阿塔納索夫, M.J.喬爾森 申請人:微軟公司