Synchronizing document object model trees maintained by servers and browsers, respectively

By using a hash tree to represent different versions of the DOM tree, calculating the root hash value to identify the differences and generating update instructions, the problem of DOM tree synchronization between the server and the browser is solved, achieving efficient DOM tree state consistency and improved user experience.

CN121569285APending Publication Date: 2026-02-24ORACLE INT CORP
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202480046889.9
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Priority Date
2023-07-14
Filing Date
2024-07-10
Publication Date
2026-02-24

AI Technical Summary

Technical Problem

Existing technologies struggle to efficiently synchronize DOM tree updates between servers and browsers, leading to inconsistencies in the DOM tree states between the browser and the server, which negatively impacts user experience and system performance.

Method used

By using a hash tree to represent different versions of the DOM tree, the root hash value of the hash tree is calculated to identify the differences in the DOM tree, and update instructions are generated to synchronize the DOM trees of the browser and the server, ensuring that the DOM tree states of the browser and the server are consistent.

Benefits of technology

It improves the accuracy and efficiency of DOM tree updates between the browser and the server, ensures DOM tree synchronization between the browser and the server, supports efficient browser restoration to previous versions, and enhances user experience and system performance.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN121569285A_ABST
    Figure CN121569285A_ABST
Patent Text Reader

Abstract

A system synchronizes a server-side DOM tree and a browser-side DOM tree with each other. The server may receive, from the browser, a hash value of the browser-side DOM tree and a server-side update instruction for applying a first server-side update to the server-side DOM tree to synchronize with a first browser-side update of the browser-side DOM tree by the browser. The server may identify a server-side DOM tree based on the hash value. The server may perform a first server-side update on the server-side DOM tree and a second server-side update triggered by the first server-side update. The server may compute browser-side update instructions for applying a second browser-side update to the browser-side DOM tree to synchronize with the server-side DOM tree. The server may transmit a browser-side update instruction to the browser, and the browser may apply a second browser-side update to the browser-side DOM tree.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] This disclosure relates to the synchronization of content between a server and a browser. More specifically, this disclosure relates to using the Document Object Model (DOM) tree to synchronize content between a server and a browser. Background Technology

[0002] The DOM tree can be used to represent data, such as the content of a webpage, in a tree structure, where each node is an object representing a part of the data. For example, elements of an HTML or XML document can be represented as nodes in the DOM tree. The content of a document represented by the DOM tree can be changed programmatically by accessing the DOM tree and modifying individual nodes to reflect desired changes. For example, nodes in the DOM tree can be added, removed, or repositioned. Additionally or alternatively, the content represented by the nodes of the DOM tree can be modified.

[0003] The content of this background section should not be construed as prior art simply because it appears in this section. Attached Figure Description

[0004] The embodiments are illustrated by way of example and not limitation in the accompanying drawings. It should be noted that references to "embodiment" or "an embodiment" in this disclosure do not necessarily refer to the same embodiment, and they mean at least one. In the drawings:

[0005] Figure 1 The illustration shows an example system for synchronizing DOM trees maintained by a server and a browser, according to one or more embodiments;

[0006] Figure 2A The illustration shows example operations of a browser according to one or more embodiments;

[0007] Figure 2B The illustration shows an example operation of a server according to one or more embodiments;

[0008] Figure 2C The illustration depicts example operations associated with calculating update instructions for updating the DOM tree, according to one or more embodiments;

[0009] Figure 2D The illustrations depict example operations associated with determining differences between hash trees according to one or more embodiments; and

[0010] Figure 3 A block diagram illustrating a computer system according to one or more embodiments is shown. Detailed Implementation

[0011] In the following description, numerous specific details are set forth for purposes of explanation to provide a thorough understanding. For clarity, detailed examples are described below. One or more embodiments may be practiced without these specific details. The components and / or operations described below should be understood as a specific example, which may not be applicable to some embodiments. Features described in one embodiment may be combined with features described in different embodiments. In some examples, well-known structures and devices are described in block diagram form to avoid unnecessarily obscuring the invention. The components and / or operations described below should not be construed as limiting the scope of any claims.

[0012] 1. General Overview

[0013] 2. Example DOM Tree Management System

[0014] 3. Example DOM tree management operations

[0015] 4. Computer networks and cloud networks

[0016] 5. Microservice Applications

[0017] 6. Hardware Overview

[0018] 7. Other matters; extension

[0019] 1. General Overview

[0020] One or more embodiments use hash values ​​that identify the DOM tree to synchronize DOM trees maintained separately by a server and a browser for the same webpage. The browser and server exchange information and updates for the corresponding DOM tree using the hash values ​​representing the DOM tree. For example, when a browser transmits a DOM tree update to the server, it transmits the hash value of the browser-side DOM tree being updated. The server identifies the corresponding server-side DOM tree based on the hash value received from the browser and performs the same update performed by the browser. Transmitting updates may include, for example, transmitting instructions specifying modifications to the DOM tree.

[0021] One or more embodiments use hash trees representing different versions of the DOM tree to identify differences between different versions of the DOM tree. In the example, each version of the DOM tree is represented by a hash tree. Nodes of the DOM tree can be represented by hash values ​​of the hash trees. Hash values ​​at each level of the hash tree are used to compute hash values ​​for higher levels of the hash tree, until a root hash value is computed for the hash tree. The system (e.g., a server or browser) identifies the differing portions of the different versions of the DOM tree based on the corresponding hash trees. For example, the system can traverse a pair of hash trees corresponding to different versions of the DOM tree. When the system identifies a pair of corresponding hash values ​​from the hash trees that are the same, the system does not traverse further down the tree to the child nodes of the nodes represented by the same hash value. When the system identifies a pair of hash values ​​from the hash trees that are different, the server traverses down the tree until it identifies a different hash value corresponding to a leaf node of the hash tree. The portions of the DOM tree represented by the leaf nodes are identified as different.

[0022] One or more embodiments improve upon the techniques associated with using DOM trees to track and synchronize updates between the browser and the server. For example, by using the root hash value to identify the corresponding copy of the DOM tree, the correct DOM tree to be updated can be identified with greater accuracy. Furthermore, because the root hash values ​​of the corresponding hash trees match each other when the corresponding copies of the DOM tree are synchronized, using the root hash value to identify the DOM tree to be updated provides implicit confirmation that copies of the DOM tree are synchronized with each update applied to the corresponding DOM tree. Additionally, because the state of the DOM tree is maintained by the browser, the browser can efficiently revert to a previous version of the DOM tree, for example, in response to user input that selects the "back" button.

[0023] This "General Overview" section is intended to provide a general overview and does not cover all aspects of this disclosure. The full scope of the subject matter disclosed herein can be understood from the entirety of this disclosure.

[0024] 2. Example DOM Tree Management System

[0025] Now for reference Figure 1 This describes the example system. The example system can be used to perform operations associated with synchronizing the DOM tree maintained by the server and the browser, respectively.

[0026] A. Example system components.

[0027] like Figure 1As shown, system 100 according to one or more embodiments may include a browser device 102 and a server 104. Browser device 102 may be a client device. Alternatively or additionally, browser device may be a computing device of an end user executing a browser to view web pages. System 100 may also include a browser data store 106 associated with browser device 102 and a server data store 108 associated with server 104. Browser data store 106 may define a portion of browser device 102. Alternatively or additionally, browser data store 106 may be coupled to browser device 102 via a direct connection or via network communication. Server data store 108 may define a portion of server 104. Alternatively or additionally, server data store 108 may be coupled to server 104 via a direct connection or via network communication.

[0028] System 100 can utilize hash trees to determine updates to the DOM tree, such as updates to the server-side DOM tree and / or updates to the browser-side DOM tree. System 100 can compute a first hash tree representing the DOM tree before the update, and a second hash tree representing the DOM tree after the update. As a result of the update, the first hash value representing the first hash tree will differ from the second hash value representing the second hash tree. Furthermore, System 100 can trace the difference between the first and second hash values ​​back to one or more specific nodes in the hash tree that differed due to the update. From these specific nodes in the hash tree, System 100 can identify the corresponding nodes in the DOM tree that changed due to the update. System 100 can perform this process to identify updates to the browser-side DOM tree and / or identify updates to the server-side DOM tree. Additionally, after identifying updates to the first DOM tree based on the corresponding first hash tree, System 100 can generate update instructions that include one or more operations to be performed on the second DOM tree to synchronize the second DOM tree with the first DOM tree.

[0029] In one example, browser 114, executed on browser device 102, can identify browser-side updates to the browser-side DOM tree based on a comparison of browser-side hash trees representing the browser-side DOM tree before and after the update, respectively. Browser 114 can generate server-side update instructions. Browser 114 can send the server-side update instructions to server 104, and the server can execute the server-side update instructions to apply the server-side update to the server-side DOM tree corresponding to the browser-side DOM tree. As a result of the server-side update, the server-side DOM tree can be synchronized with the browser-side DOM tree reflecting the browser-side update.

[0030] Alternatively or additionally, server 104 may identify server-side updates to the server-side DOM tree based on a comparison of server-side hash trees representing the server-side DOM tree before and after the server-side update, respectively. Server 104 may generate browser-side update instructions. Server 104 may send browser-side update instructions to browser 114 executed on browser device 102, and browser 114 may execute the browser-side update instructions to apply the browser-side update to the browser-side DOM tree corresponding to the server-side DOM tree. As a result of the browser-side update, the browser-side DOM tree may be synchronized with the server-side DOM tree reflecting the server-side update.

[0031] Browser device 102 may include a browser-side DOM tree update engine 110 and a browser-side hash tree analyzer 112. Browser device 102 may also include a browser 114. Browser 114 may be configured to display content, such as web pages, on a user device interface. Furthermore, browser 114 may synchronize the browser-side DOM tree with the corresponding server-side DOM tree, at least by performing operations associated with the browser-side DOM tree update engine 110 and / or the browser-side hash tree analyzer 112. Browser-side DOM tree update engine 110 may be configured to perform operations associated with one or more browser-side DOM trees. Browser-side hash tree analyzer 112 may be configured to perform operations associated with one or more browser-side hash trees.

[0032] The browser-side DOM tree update engine 110 can periodically generate and / or update one or more browser-side DOM trees. The browser-side DOM tree update engine 110 can generate an initial version of the browser-side DOM tree. This initial version of the browser-side DOM tree can represent content, such as a webpage, which can be provided by the browser 114 on the user interface device for display. In one example, content, such as a webpage, can be transferred from the server 104 to the browser device 102.

[0033] The browser-side DOM tree update engine 110 can update the browser-side DOM tree, for example, in response to browser events associated with the content represented by the browser-side DOM tree. The browser-side DOM tree update engine 110 can, for example, send an update instruction to the server 104 in response to a browser event, and the server 104 can update the server-side DOM tree in response to the update instruction from the browser. Additionally or alternatively, the browser-side DOM tree update engine 110 can update the browser-side DOM tree in response to an update instruction from the server 104.

[0034] Browser-side hash tree analyzer 112 may periodically generate and / or analyze one or more browser-side hash trees. Browser-side hash tree analyzer 112 may generate an initial version of the browser-side hash tree. The initial version of the browser-side hash tree may represent an initial version of the browser-side DOM tree. Browser-side hash tree analyzer 112 may generate an updated browser-side hash tree, for example, to represent an updated browser-side DOM tree. Additionally or alternatively, browser-side hash tree analyzer 112 may determine an update to the browser-side DOM tree, for example, by comparing a first browser-side hash tree representing the browser-side DOM tree before the update with a second browser-side hash tree representing the browser-side DOM tree after the update.

[0035] Server 104 may include a server-side DOM tree update engine 116 and a server-side hash tree analyzer 118. Server 104 can synchronize the server-side DOM tree with the corresponding browser-side DOM tree, at least by performing operations associated with the server-side DOM tree update engine 116 and / or the server-side hash tree analyzer 118. Server 104 may also include a search engine 120. Search engine 120 may be configured to perform a search operation, for example, in response to a search query received from browser 114. Server 104 may, for example, combine the search query received from browser 114 with operations associated with the server-side DOM tree update engine 116 and / or the server-side hash tree analyzer 118. Server-side DOM tree update engine 116 may be configured to perform operations associated with one or more server-side DOM trees. Server-side hash tree analyzer 118 may be configured to perform operations associated with one or more server-side hash trees.

[0036] Server-side DOM tree update engine 116 can periodically generate and / or update one or more server-side DOM trees. Server-side DOM tree update engine 116 can generate an initial version of the server-side DOM tree. This initial version of the server-side DOM tree can match an initial version of the browser-side DOM tree generated by browser 114. For example, server 104 can send content, such as a webpage, to browser 114, and in conjunction with sending content to browser 114, server 104 can generate an initial version of the server-side DOM tree, and browser 114 can generate an initial version of the browser-side DOM tree.

[0037] Server-side DOM tree update engine 116 can update the server-side DOM tree, for example, in response to an update command from browser 114. Additionally or alternatively, server-side DOM tree update engine 116 can update the server-side DOM tree in response to server events associated with the content represented by the server-side DOM tree. Additionally or alternatively, server-side DOM tree update engine 116 can, for example, send an update command to browser 114 in response to a server event, and browser-side DOM tree update engine 110 can update the browser-side DOM tree in response to an update command from server 104.

[0038] Server-side hash tree analyzer 118 may periodically generate and / or analyze one or more server-side hash trees. Server-side hash tree analyzer 118 may generate an initial version of the server-side hash tree. The initial version of the server-side hash tree may represent an initial version of the server-side DOM tree. Server-side hash tree analyzer 118 may generate an updated server-side hash tree, for example, to represent an updated server-side DOM tree. Additionally or alternatively, server-side hash tree analyzer 118 may determine an update to the server-side DOM tree, for example, by comparing a first server-side hash tree representing the server-side DOM tree before the update with a second server-side hash tree representing the server-side DOM tree after the update.

[0039] B. Example events that trigger DOM tree updates.

[0040] Browser 114, executed on browser device 102, can update the browser-side DOM tree in response to browser events and can send server-side update instructions to server 104, enabling server 104 to synchronize the corresponding server-side DOM tree with the browser-side DOM tree reflecting the browser events. Alternatively, server 104 can update the server-side DOM tree in response to server events and can send browser-side update instructions to browser 114, enabling browser 114 to synchronize the corresponding browser-side DOM tree with the server-side DOM tree reflecting the server events. In one example, an update to the server-side DOM tree by server 104 in response to a server-side update instruction may trigger a server event, resulting in subsequent updates to the server-side DOM tree and corresponding browser-side update instructions being sent from server 104 to browser 114. Alternatively, an update to the browser-side DOM tree by browser 114 in response to a browser-side update instruction may trigger a browser event, resulting in subsequent updates to the browser-side DOM tree and corresponding server-side update instructions being sent from browser 114 to server 104.

[0041] In one example, browser events can represent user interactions with content, such as a webpage, represented by the browser's DOM tree and displayed on the user's device interface by the browser. For example, user interactions can include at least one of the following: activating a text box, typing in a text box, entering a search query, clicking a button, clicking a hyperlink, creating a bookmark, refreshing a page, interacting with streaming content, scrolling content, expanding content, collapsing content, opening a tab, closing a tab, opening a window, closing a window, resizing content, changing browser settings, loading a file, closing a file, streaming video content, streaming audio content, changing browser settings, blocking pop-ups, allowing pop-ups, or viewing the page source code, and combinations thereof. Additionally or alternatively, user interactions can include clicking a back button, clicking a forward button, or clicking a "Load More" button. In one example, a button, such as a "Load More" button, can be configured to cause the browser to load and / or display additional content, such as featured content. Example featured content could include search results, a photo gallery, a video gallery, an audio gallery, an online shopping gallery, and combinations thereof. In one example, interacting with streaming content could include clicking the play button, clicking the pause button, clicking the stop button, or fast-forwarding or rewinding on the progress bar.

[0042] In one example, a server event can represent a change in the content available to the browser. For example, a server event can include at least one of the following: search result event, content update event, data refresh event, notification event, media event, scroll event, form submission event, time-based event, geolocation event, or error event, as well as combinations thereof.

[0043] Search result events can include the server retrieving search results. Search results can include web pages, URLs, text, images, videos, or files, as well as combinations thereof. In one example, a search result event could be triggered by a browser event such as a query.

[0044] Content update events can include updated content becoming available. For example, updated content may become available when server 104 dynamically fetches content. In one example, server 104 may dynamically fetch content such as image files, video files, and / or audio files. Additionally or alternatively, server 104 may dynamically fetch content such as items to be displayed in an online store and / or online shopping cart. Server 104 may dynamically fetch content using at least one of the following methods: AJAX (Asynchronous JavaScript and XML), Fetch API, Axios, WebSocket, Server Send Events (SSE), GraphQL, or WebRTC.

[0045] Data refresh events can include periodically updating or refreshing content. In one example, a data refresh update event can include updating at least one of the following: news feed data, social media feed data, message thread data, stock price data, financial data, e-commerce product data, ledger transaction data, sports score data, streaming data, live event data, webinars data, vehicle traffic data, flight schedule data, weather data, auction platform data, project management data, online game data, or time-related data.

[0046] Notification events can include, for example, providing notifications to users via a webpage. Notifications can relate to content update events or data refresh events. In one example, a notification event can relate to at least one of the following: a new message in a messaging application, product availability in an online store, a discount in an online store, or new media in a multimedia platform.

[0047] Media streaming events can include providing streaming content, such as audio or video content. Media streaming events can be triggered by a browser playing streaming content on a webpage. Media events can include at least one of the following: initiating streaming content, stopping streaming content, pausing streaming content, ending streaming content, updating a progress bar, or updating time data. Scrolling events can occur in response to an instruction to scroll a scrollbar associated with a webpage. Scrolling events can include dynamically fetching additional content, such as content associated with feeds, libraries, or search results.

[0048] A form submission event can be triggered in response to a user submitting a form on a webpage. A form submission event can include at least one of the following: processing data associated with the form, updating content, performing a search, or providing search results.

[0049] Time-based events can be triggered in response to a specific time interval or schedule. As an example, a time-based event may include at least one of the following: updating content based on a time interval or schedule, or updating a timestamp. Additionally or alternatively, a time-based event may include retrieving time-related data corresponding to a time, time interval, or schedule.

[0050] Geolocation events can occur with respect to geolocation tracking. In one example, a geolocation event could include updating content in response to geolocation data, such as customizing and displaying location-specific content or services.

[0051] Error events can be triggered in response to errors associated with retrieving content, such as corrupted images or failed API requests. Error events may include providing error messages or fallback content.

[0052] C. Example hash tree.

[0053] Hash trees, such as browser-side hash trees or server-side hash trees, can include a tree of nodes, where each node is associated with a hash value that uniquely represents the node's content and its position within the tree. Hash trees can include leaf nodes, intermediate nodes, and a root node.

[0054] Each leaf node can represent a single block or element in the hash tree. The data associated with a leaf node can be hashed using a hash function to produce a hash value that uniquely represents the data associated with the leaf node. Each leaf node can be assigned a unique label or identifier number based on its position in the hash tree. The unique label or identifier can include an index number and / or more complex identifiers, such as those derived from the data represented by the leaf node.

[0055] The intermediate nodes of a hash tree represent intermediate levels of the tree. A hash tree can include multiple levels of intermediate nodes. Each intermediate node can be associated with an intermediate hash value, which is calculated based on the concatenation or hashing of the hash values ​​of its child nodes. Child nodes can include one or more leaf nodes and / or one or more lower-level intermediate nodes. Each intermediate node can also be assigned a unique label or identifier number based on its position in the hash tree. The unique label or identifier assigned to an intermediate node can include an index number and / or more complex identifiers, such as those derived from the data represented by the child nodes associated with the intermediate node.

[0056] The root node of a hash tree represents the entire data structure. The root node can be associated with a root hash value, which is calculated based on the concatenation or hashing of the hash values ​​of its child nodes. Child nodes can include one or more leaf nodes and / or one or more intermediate nodes. The root hash value uniquely represents the entire data structure associated with the hash tree. The root node can also be assigned a unique label or identifier number based on its position in the hash tree. The unique label or identifier assigned to the root node can include an index number and / or more complex identifiers, such as those derived from the data represented by the child nodes associated with the root node.

[0057] The nodes of a hash tree can be determined by using a hash function, such as a cryptographic hash function or a non-cryptographic hash function. A hash function can be chosen based on one or more of the following properties: determinism, irreversibility, or avalanche effect. Determinism means that the same input produces the same hash value. Irreversibility means that it is difficult to derive the original input from the hash value. Avalanche effect means that a small change in the input leads to a significant change in the hash value. Example hash functions can include cryptographic hash functions such as SHA-256, RIPEMED, Whirlpool, Tiger, SipHash, BLAKE2, or SHA3 (e.g., SHA3-256). For illustration, the SHA-256 or SHA3-256 hash function can transform an input into a 256-bit output. Additionally or alternatively, example hash functions may include non-cryptographic hash functions, such as MurmurHash, CityHash, xxHash, Fowler-Noll-Vo, or CRC32 hash functions. Non-cryptographic hash functions may be particularly well-suited for hash tables or hash-based data structures.

[0058] The browser-side hash tree can be computed against the browser-side DOM tree. The browser-side hash tree can include a browser-side root node, multiple browser-side intermediate nodes, and multiple browser-side leaf nodes. Each node in the browser-side hash tree can include a hash tree node representing the corresponding DOM tree node of the browser-side DOM tree. For example, each browser-side leaf node can include a browser-side leaf hash value representing the corresponding leaf node of the browser-side DOM tree. The browser-side hash tree can include a browser-side root hash value corresponding to the browser-side root node. The browser-side root hash value can be selected as the browser-side hash value for identifying the browser-side hash tree and / or the browser-side DOM tree in the browser data repository 106. For example, the browser hash value can be stored in the browser-side DOM tree data corpus 122 in association with the corresponding browser-side DOM tree. Additionally or alternatively, the browser hash value can be stored in the browser-side hash tree data corpus 124 in association with the corresponding browser-side hash tree.

[0059] The server-side hash tree can be computed against the server-side DOM tree. The server-side hash tree can include a server-side root node, multiple server-side intermediate nodes, and multiple server-side leaf nodes. Each node in the server-side hash tree can include a hash tree node representing the corresponding DOM tree node of the server-side DOM tree. For example, each server-side leaf node can include a server-side leaf hash value representing the corresponding leaf node of the server-side DOM tree. The server-side hash tree can include a server-side root hash value corresponding to the server-side root node. The server-side root hash value can be selected as the server-side hash value for identifying the server-side hash tree and / or the server-side DOM tree in the server data repository 108. For example, the server hash value can be stored in association with the corresponding server-side DOM tree in the server-side DOM tree data corpus 126. Additionally or alternatively, the server hash value can be stored in association with the corresponding server-side hash tree in the server-side hash tree data corpus 128.

[0060] D. Node numbering convention.

[0061] In one example, nodes in a hash tree, such as a browser-side hash tree and / or a server-side hash tree, can be numbered and / or renumbered according to a numbering convention. For example, the unique label or identifier of a node in the hash tree can be replaced with a node identifier number determined according to the numbering convention. Alternatively, a node identifier number can be associated with or appended to the node's unique label or identifier. Assigning node identifier numbers to nodes in the hash tree using a numbering convention ensures that the identity of a node in the hash tree is preserved from one hash tree to the next. In one example, the hash tree can be generated after each update of the corresponding DOM tree, and the nodes in the hash tree can be numbered and / or renumbered according to the numbering convention. Alternatively, the nodes in the DOM tree can be numbered and / or renumbered according to the numbering convention after each update of the DOM tree.

[0062] The node identifiers generated by the hash tree's numbering and / or renumbering can be used, at least in part, to identify updates to the DOM tree corresponding to the hash tree. For example, if a node is deleted from or moved to a different location in the DOM tree, the deletion or movement can be identified, at least in part, in the corresponding hash tree based on the node identifier. For instance, if a leaf node moves from position A below a middle node to position B, the data represented by the leaf node may still produce the same hash value, but its identifier will change due to the move from position A to position B.

[0063] Additionally or alternatively, node identifiers generated by the numbering and / or renumbering of the hash trees can be used, at least in part, to determine whether the browser-side DOM tree and the server-side DOM tree are synchronous or asynchronous relative to each other. For example, if the browser-side hash tree representing the browser-side DOM tree has a browser-side leaf node representing a data element at position A, and the server-side hash tree representing the server-side DOM tree has a server-side leaf node representing that data element at position B, then the asynchrony between the server-side DOM trees corresponding to the difference in the positions of the corresponding leaf nodes can be identified by assigning different identifiers to the respective leaf nodes. Additionally or alternatively, when the browser-side DOM tree and the server-side hash tree are synchronous with each other, each browser-side node in the browser-side hash tree representing the browser-side DOM tree will have a node value and node identifier that match the corresponding node value and node identifier of the server-side node in the server-side hash tree representing the browser-side DOM tree.

[0064] In one example, the numbering convention could include a depth-first search (DFS) numbering technique. Using a DFS numbering technique, a unique node identifier is assigned to each node in the hash tree. The DFS numbering technique can begin with the initial node in the hash tree. The initial node could be the root node. The DFS numbering technique can assign a node identifier to the initial node (such as the root node), followed by adjacent nodes, until every node in the hash tree has been numbered / renumbered. The unique node identifier assigned to a node in the hash tree can indicate the order in which nodes are processed during the DFS numbering process. The DFS numbering technique can number / renumber nodes as deep as possible before backtracking and numbering / renumbering nodes in other branches of the hash tree. The DFS numbering technique ensures that all nodes in the hash tree are numbered / renumbered systematically, thus revealing the relative positions and relationships of nodes in the hash tree.

[0065] As an addition to or alternative to depth-first search numbering techniques, numbering conventions can include one or more of the following: breadth-first search numbering, preorder numbering, post-order numbering, and level-order numbering. Breadth-first search numbering assigns a node identifier to each node based on a breadth-first search traversal. Using breadth-first search numbering, nodes at the same level can be numbered sequentially before moving to the next level. Preorder numbering assigns a unique node identifier to each node based on a preorder traversal. Using preorder traversal, the root node is numbered first, followed by its left subtree, and then its right subtree. Postorder numbering assigns a unique node identifier to each node based on a postorder traversal. Using postorder traversal, the left subtree is visited first, followed by the right subtree, and finally the root node. Level-order numbering assigns a numerical label to each node based on a level-order traversal. Using level-order traversal, nodes at each level are visited from left to right before moving to the next level.

[0066] In one example, nodes in a DOM tree, such as a browser-side DOM tree and / or a server-side DOM tree, can be numbered and / or renumbered according to numbering conventions (such as depth-first search numbering techniques). In another example, nodes in the DOM tree corresponding to nodes in a hash tree can be identified, at least in part, by matching node identifiers between the hash tree and the DOM tree. Node identifiers can be used to identify content in the DOM tree that is included in an update instruction. For example, when generating an update instruction, system 100 can navigate to a node in the DOM tree based on a node identifier from the corresponding hash tree. The system can then select content from the DOM tree at the node with the corresponding node identifier and generate an update instruction based on that content. Additionally or alternatively, node identifiers can be used to identify locations in the DOM tree where updates are applied. For example, when applying an update instruction, system 100 can identify a node identifier in the update instruction and navigate to a node in the DOM tree based on that node identifier. The system can then apply the update according to the update instruction at the node in the DOM tree identified based on the node identifier. Additionally or alternatively, node identifiers generated by the hash tree numbering and / or renumbering can be used, at least in part, to confirm that the browser-side DOM tree and the server-side DOM tree are synchronized with each other, and / or to identify that the browser-side DOM tree and the server-side DOM tree are asynchronous with respect to each other.

[0067] In one example, browser 114 may assign a browser-side node identifier to each of the multiple browser-side hash tree nodes in the browser-side hash tree by numbering them according to a numbering convention. For at least some of the browser-side hash tree nodes, browser 114 may replace the node identifier previously assigned to one or more of the browser-side hash tree nodes with a new browser-side hash tree node identifier. Additionally or alternatively, server 104 may assign a server-side node identifier to each of the multiple server-side hash tree nodes in the server-side hash tree by numbering them according to a numbering convention. For at least some of the server-side hash tree nodes, server 104 may replace the node identifier previously assigned to one or more of the server-side hash tree nodes with a new server-side hash tree node identifier. When the browser-side hash tree represents a browser-side DOM tree that is synchronized with the server-side DOM tree represented by the server-side hash tree, the browser-side node value of each browser-side hash tree node identified by the corresponding browser-side node identifier can be matched with the server-side node value of the corresponding server-side hash tree node identified by the corresponding server-side node identifier.

[0068] E. Example update instruction.

[0069] System 100 can generate update instructions for updating the browser-side DOM tree and / or the server-side DOM tree. In one example, browser 114, executed on a browser device, can generate server-side update instructions and send them to server 104. Server-side update instructions may include one or more node identifiers conforming to a numbering convention, and one or more corresponding node operations to be performed on the node identified by the corresponding node identifier. For example, server-side update instructions may include a first node identifier corresponding to a first server-side node in the server-side DOM tree, and a first node operation to be performed on the first server-side node in the server-side DOM tree. Alternatively or additionally, server 104 can generate browser-side update instructions and send them to browser 114, executed on browser device 102. Browser-side update instructions may include one or more node identifiers conforming to a numbering convention, and one or more corresponding node operations to be performed on the node identified by the corresponding node identifier. For example, browser-side update instructions may include a first node identifier corresponding to a first browser-side node in the browser-side DOM tree, and a first node operation to be performed on the first browser-side node in the browser-side DOM tree.

[0070] E. Data storage repository.

[0071] Further reference Figure 1 The browser data store 106 may include data associated with browser device 102 and / or browser 114. As shown, the browser data store 106 may include a browser-side DOM tree data corpus 122 and a browser-side hash tree data corpus 124. The browser-side DOM tree data corpus 122 may include one or more browser-side DOM trees and / or data associated with one or more browser-side DOM trees. For example, the browser-side DOM tree data corpus 122 may include various iterations of the browser-side DOM trees generated by various browser-side updates. Additionally or alternatively, the browser-side DOM tree data corpus 122 may include one or more update logs corresponding to the respective browser-side DOM trees. The update logs may include updates to the browser-side DOM trees corresponding to various browser-side updates and / or browser-side update instructions received from server 104. Additionally or alternatively, the update logs may include server-side update instructions calculated by browser 114 and / or sent to server 104.

[0072] The browser-side hash tree corpus 124 may include one or more browser-side hash trees and / or data associated with one or more browser-side hash trees. For example, the browser-side hash tree corpus 124 may include one or more iterations of browser-side hash trees generated by various browser-side updates. Additionally or alternatively, the browser-side hash tree corpus 124 may include one or more browser-side hash values ​​corresponding to the browser-side hash trees. Browser-side hash values ​​may include root hash values, intermediate hash values, and / or leaf hash values. Additionally or alternatively, the browser-side hash tree corpus 124 may include one or more update logs corresponding to the respective browser-side hash trees. Update logs may include updates to the browser-side hash trees corresponding to various browser-side updates and / or browser-side update instructions.

[0073] In one example, browser data store 106 may include one or more browser-side hash values, such as one or more root hash values, associated with a corresponding browser-side hash tree and / or a corresponding browser-side DOM tree represented by the browser-side hash tree. The browser-side hash tree and / or browser-side DOM tree may be identified by the corresponding browser-side hash values ​​(such as root hash values). Browser-side DOM tree data corpus 122 and browser-side hash tree data corpus 124 may represent common or separate portions of browser data store 106. Data items in browser-side DOM tree data corpus 122 may be associated with data systems in browser-side hash tree data corpus 124. Browser-side DOM tree data corpus 122 and browser-side hash tree data corpus 124 may be updated from time to time, for example, in response to browser-side update instructions.

[0074] In one or more embodiments, the browser data store 106 may include any type of storage unit and / or device for storing data (e.g., a file system, database, collection of tables, or any other storage mechanism). Additionally, the browser data store 106 may include multiple different storage units and / or devices. These multiple different storage units and / or devices may or may not be of the same type or located at the same physical site. Furthermore, the browser data store 106 may be implemented or executed on the same computing system as the browser device 102. Additionally or alternatively, the browser data store 106 may be implemented or executed on a separate computing system from the browser device 102.

[0075] Server data store 108 may include data associated with server 104. As shown, server data store 108 may include server-side DOM tree data corpus 126 and server-side hash tree data corpus 128. Server-side DOM tree data corpus 126 may include one or more server-side DOM trees and / or data associated with one or more server-side DOM trees. For example, server-side DOM tree data corpus 126 may include various iterations of server-side DOM trees generated by various server-side updates. Additionally or alternatively, server-side DOM tree data corpus 126 may include one or more update logs corresponding to the respective server-side DOM trees. Update logs may include updates to the server-side DOM trees corresponding to various server-side updates and / or server-side update instructions received from browser 114 executed on browser device 102. Additionally or alternatively, update logs may include browser-side update instructions calculated by server 104 and / or sent to browser device 102.

[0076] The server-side hash tree data corpus 128 may include one or more server-side hash trees and / or data associated with one or more server-side hash trees. For example, the server-side hash tree data corpus 128 may include one or more iterations of server-side hash trees generated by various server-side updates. Additionally or alternatively, the server-side hash tree data corpus 128 may include one or more server-side hash values ​​corresponding to the server-side hash trees. Server-side hash values ​​may include root hash values, intermediate hash values, and / or leaf hash values. Additionally or alternatively, the server-side hash tree data corpus 128 may include one or more update logs corresponding to the respective server-side hash trees. Update logs may include updates to the server-side hash trees corresponding to various server-side updates and / or server-side update instructions.

[0077] In one example, server data store 108 may include one or more server-side hash values, such as one or more root hash values, associated with a corresponding server-side hash tree and / or a corresponding server-side DOM tree represented by the server-side hash tree. The server-side hash tree and / or server-side DOM tree may be identified by the corresponding server-side hash values ​​(such as root hash values). Server-side DOM tree data corpus 126 and server-side hash tree data corpus 128 may represent common or separate portions of browser data store 106. Data items in server-side DOM tree data corpus 126 may be associated with data items in server-side hash tree data corpus 128. Server-side DOM tree data corpus 126 and server-side hash tree data corpus 128 may be updated from time to time, for example, in response to server-side update instructions.

[0078] In one or more embodiments, the browser data store 106 may include any type of storage unit and / or device for storing data (e.g., a file system, database, collection of tables, or any other storage mechanism). Additionally, the browser data store 106 may include multiple different storage units and / or devices. These multiple different storage units and / or devices may or may not be of the same type or located at the same physical site. Furthermore, the browser data store 106 may be implemented or executed on the same computing system as the browser device 102. Additionally or alternatively, the browser data store 106 may be implemented or executed on a separate computing system from the browser device 102.

[0079] Server data storage 108 may also include a content data corpus 130. The content data corpus 130 may include content that can be provided to browser device 102, for example, for display on a webpage by browser 114. In one example, the content may include streaming data, such as audio and / or video streaming data. Additionally or alternatively, the content data corpus 130 may include webpages, URLs, text files, image files, audio files, video files, or data files, and combinations thereof. Server 104 may search the content data corpus 130, for example, in response to a query from browser 114 executed on browser device 102.

[0080] In one or more embodiments, server data storage 108 may include any type of storage unit and / or device for storing data (e.g., file system, database, collection of tables, or any other storage mechanism). Additionally, server data storage 108 may include multiple different storage units and / or devices. These multiple different storage units and / or devices may or may not be of the same type or located at the same physical site. Furthermore, server data storage 108 may be implemented or executed on the same computing system as server 104. Alternatively or additionally, server data storage 108 may be implemented or executed on a separate computing system from server 104.

[0081] Refer again Figure 1 System 100 may include a user device interface 132 communicatively coupled or coupled to a browser device 102. User device interface 132 may include hardware and / or software configured to facilitate interaction between a user and various aspects of system 100. User device interface 132 may render user interface elements and receive input via these elements. For example, user device interface 132 may display content from browser 114, such as one or more web pages and associated content. Additionally or alternatively, user device interface 132 may provide query input to browser 114, such as via a web page displayed by user device interface 132. User device interface 132 may also display search results in response to query input, such as via a web page displayed by user device interface 132. Examples of interfaces include GUIs, command-line interfaces (CLIs), haptic interfaces, or voice command interfaces. Examples of user interface elements include checkboxes, radio buttons, drop-down lists, list boxes, buttons, toggle switches, text fields, date and time pickers, command lines, sliders, pages, or forms. User device interface 132 may utilize any one or more of these interfaces or interface elements.

[0082] In this embodiment, different components of the user device interface 132 are specified using different languages. The behavior of user interface elements is specified using a dynamic programming language, such as JavaScript. The content of user interface elements is specified using a markup language, such as Hypertext Markup Language (HTML) or XML User Interface Language (XUL). The layout of user interface elements is specified using a style sheet language, such as Cascading Style Sheets (CSS). Alternatively, the user device interface 132 may be specified using one or more other languages, such as Java, C, or C++.

[0083] Refer again Figure 1 System 100 may include at least one communication interface 134, which is communicatively coupled or combinable to browser device 102 and / or server 104. Additionally or alternatively, at least one communication interface 134 may be communicatively coupled or combinable to browser database 106 and / or server database 108. At least one communication interface 134 may include hardware and / or software configured to transmit data between and / or to and / or from system 100. For example, communication interface 134 may transmit and / or receive data between and / or among at least one of: browser device 102 and server 104, browser device 102 and browser database 106, or server 104 and server database 108.

[0084] In one example, browser device 102 and / or server 104 may be implemented on one or more digital devices, respectively. The term "digital device" generally refers to any hardware device that includes a processor. A digital device can refer to a physical device that executes an application or virtual machine. Examples of digital devices include computers, tablets, laptops, desktops, netbooks, servers, web servers, network policy servers, proxy servers, general-purpose machines, function-specific hardware devices, hardware routers, hardware switches, hardware firewalls, hardware network address translation (NAT), hardware load balancers, mainframes, televisions, content receivers, set-top boxes, printers, mobile handheld devices, smartphones, personal digital assistants (PDAs), wireless receivers and / or transmitters, base stations, communication management equipment, routers, switches, controllers, access points, and / or browser devices.

[0085] In one or more embodiments, system 100 may include a reference Figure 1 The number of components described may be more or less. (Reference) Figure 1 The described components can be local or remote. Reference Figure 1The described components can be implemented using software and / or hardware. Each component can be distributed across multiple applications and / or machines. Multiple components can be combined into one application and / or machine. Operations described for one component can be performed by another component.

[0086] 4. Example DOM tree management operations

[0087] Now for reference Figures 2A-2D This further describes example operation 200 associated with the example system. (See references.) Figures 2A-2D The described operation 200 can be associated with one or more components of the system. For example, refer to... Figure 2A The described operation 200 may include operations on the browser device and / or browser operations performed on the browser device. Additionally or alternatively, see [reference needed]. Figure 2B The described operation 200 may include server operations. (See reference) Figure 2C and 2D The described operation 200 may include browser operations and / or server operations. (See reference) Figures 2A-2D One or more operations described may be modified, rearranged, or all may be omitted. Accordingly, refer to... Figures 2A-2D The specific order of operations described should not be construed as limiting the scope of one or more embodiments.

[0088] A. Example browser operation.

[0089] like Figure 2A As shown, example operation 200 may include operations associated with updating the browser-side DOM tree. In one example, operation 200 may include, at box 202, a browser-recognized first browser-side update to a browser-side DOM tree stored by the browser, performed on the browser device. The first browser-side update may include a first set of one or more browser-side operations on the browser-side DOM tree corresponding to a browser event associated with the content represented by the browser-side DOM tree. At box 204, the operation may include a browser-side hash value recognized by the browser corresponding to the browser-side DOM tree prior to the first browser-side update. The browser-side hash value may be recognized in a browser database, such as in a browser-side hash tree data corpus. The browser-side hash value may be the root hash value of the browser-side hash tree representing the browser-side DOM tree prior to the first browser-side update. The browser-side hash tree may be generated by the browser, and the root hash value of the browser-side hash tree may be selected as the browser-side hash value.

[0090] At box 206, operation 200 may include a server-side update instruction computed by the browser to apply a first server-side update to the server-side DOM tree. The server-side update instruction may include a first set of one or more server-side operations on the server-side DOM tree. At box 208, the operation may include the browser transmitting (a) a browser-side hash value and (b) a server-side update instruction to the server. The browser-side hash value may correspond to a server-side hash value stored by the server in a server database. The browser-side hash value may match the server-side hash value. Therefore, the server may identify the server-side DOM tree based on the browser-side hash value. After identifying the server-side DOM tree, the server may execute the server-side update instruction to apply the first server-side update to the server-side DOM tree. The server-side DOM tree may correspond to the browser-side DOM tree. After the server-side update instruction has been executed to apply the first server-side update to the server-side DOM tree, the server-side DOM tree may match the browser-side DOM tree generated by the first browser-side update.

[0091] At box 210, operation 200 may include the browser receiving from the server (a) a server-side hash value representing the server-side DOM tree generated by the first server-side update, and (b) a browser-side update instruction for applying a second browser-side update to the browser-side DOM tree. At box 212, operation 200 may include the browser identifying the browser-side DOM tree based on the server-side hash value. The browser-side DOM tree identified at box 212 may be the browser-side DOM tree generated by the first browser-side update. The server-side hash value may be the root hash value of the server-side hash tree. The server-side hash tree may be generated by the server, and the root hash value of the server-side hash tree may be selected as the server-side hash value. The server-side hash value may correspond to a browser-side hash value stored by the browser in the browser's database. In one example, before receiving the server-side hash value from the server at box 210, the browser may compute a browser-side hash value representing the browser-side DOM tree generated by the first browser-side update. The browser-side hash value representing the browser-side DOM tree generated by the first browser-side update may match the server-side hash value. Therefore, the browser can identify the browser-side DOM tree based on the server-side hash value. For example, the browser-side DOM tree generated by the first browser-side update can be stored in the browser data repository 106, such as in the browser-side DOM tree data corpus 122. Subsequently, the browser-side DOM tree generated by the first browser-side update can be retrieved at box 212, for example, based on the corresponding server-side hash value.

[0092] After identifying the browser-side DOM tree, at box 214, the operation may include the browser performing a second browser-side update on the browser-side DOM tree based on browser-side update instructions. Browser-side update instructions may include a second set of one or more browser-side operations on the browser-side DOM tree. Browser-side update instructions may be triggered by the server having already performed a first server-side update on the server-side DOM tree. For example, a first server-side update on the server-side DOM tree may trigger a second server-side update on the server-side DOM tree, and in response to the second server-side update, the server may compute browser-side update instructions for applying the second browser-side update, for example, to synchronize the browser-side DOM tree with the server-side DOM tree after the second server-side update. After the browser-side update instructions have been executed to apply the second browser-side update to the browser-side DOM tree, the browser-side DOM tree may match the server-side DOM tree generated by the second browser-side update.

[0093] At box 216, operation 200 may include determining whether there is another browser-side operation to be performed on the browser-side DOM tree in the browser-side update instruction. When there is another browser-side operation in the browser-side update instruction, operation 200 may return to box 214, for example, to further execute the browser-side update instruction. When each browser-side operation has been executed, operation 200 may return to box 202, for example, to identify another browser-side update to the browser-side DOM tree corresponding to another browser event associated with the content represented by the browser-side DOM tree.

[0094] B. Example server operation.

[0095] Now for reference Figure 2B Example operation 200 may include operations associated with updating the server-side DOM tree. For example... Figure 2B As shown, in one example, operation 200 may include, at box 222, the server receiving from the browser, executed on the browser device, (a) a browser-side hash value corresponding to a browser-side DOM tree stored by the browser, and (b) a server-side update instruction for applying a first server-side update to the server-side DOM tree stored by the server. The browser-side hash value may be the root hash value of the browser-side hash tree. The browser-side hash tree may be generated by the browser, and the root hash value of the browser-side hash tree may be selected as the browser-side hash value. In one example, the browser-side hash value and the server-side update instruction received by the server may be transmitted from the browser to the server at box 206, as referenced. Figure 2AAs described. In one example, the first server-side update can represent an indication of user interaction with the browser. The first server-side update can be configured to apply one or more updates to the server-side DOM tree to reflect user interaction with the browser. Additionally or alternatively, the first server-side update can represent a content request from the browser.

[0096] At box 224, operation 200 may include the server identifying the server-side DOM tree based on a browser-side hash value. The browser-side hash value may correspond to a server-side hash value stored by the server in a server database. The browser-side hash value can match the server-side hash value. Therefore, the server can identify the server-side DOM tree based on the browser-side hash value.

[0097] After identifying the server-side DOM tree, at box 226, operation 200 may include the server performing a first server-side update on the server-side DOM tree based on server-side update instructions. Server-side update instructions may include a first set of one or more server-side operations on the server-side DOM tree. Server-side update instructions may be triggered by a browser event associated with the content represented by the browser-side DOM tree. In response to a browser event, the browser may compute server-side update instructions for applying server-side updates, for example, to synchronize the server-side DOM tree with the browser-side DOM tree after an update to the browser-side DOM tree corresponding to the browser event. The server-side DOM tree may correspond to the browser-side DOM tree. After server-side update instructions have been executed to apply server-side updates to the server-side DOM tree, the server-side DOM tree may match the browser-side DOM tree resulting from the update to the browser-side DOM tree corresponding to the browser event.

[0098] At box 228, operation 200 may include determining whether there is another server-side operation to be performed on the server-side DOM tree in the server-side update instruction. When there is another server-side operation in the server-side update instruction, operation 200 may return to box 226, for example, to further execute the server-side update instruction. When each server-side operation has been executed, operation 200 may proceed to box 230.

[0099] At box 230, operation 200 may include the server calculating a server-side hash value representing the server-side DOM tree generated by the first server-side update. The server-side hash value may be the root hash value of the server-side hash tree representing the server-side DOM tree generated by the first server-side update. The server-side hash tree may be generated by the server, and the root hash value of the server-side hash tree may be selected as the server-side hash value. The server-side hash value calculated at box 230 can be used to identify the server-side DOM tree generated by the first server-side update. For example, the server-side DOM tree generated by the first server-side update may be stored in server data repository 108, such as in server-side DOM tree data corpus 126. Subsequently, the server-side DOM tree generated by the first server-side update can be retrieved based on the corresponding server-side hash value.

[0100] At box 232, the operation may include the server performing a second server-side update on the server-side DOM tree. The second server-side update may include a second set of one or more server-side operations on the server-side DOM tree. In one example, the second server-side update may be triggered by a first server-side update. For example, the first server-side update on the server-side DOM tree performed by the server at box 226 may represent a content request from a browser, as applied to the server-side DOM tree, and the second server-side update on the server-side DOM tree performed by the server at box 232 may represent a response to the content request, as applied to the server-side DOM tree. A response, as applied to the server-side DOM tree, may include changes to at least one content item, as represented by the server-side DOM tree.

[0101] At box 234, operation 200 may include determining whether there is another server-side operation to be performed on the server-side DOM tree in the second server-side update instruction. When there is another server-side operation in the server-side update, operation 200 may return to box 232, for example, to further perform the second server-side update. When each server-side operation has been performed, operation 200 may proceed to box 236.

[0102] At box 236, operation 200 may include the server calculating a browser-side update instruction for applying a second browser-side update to the browser-side DOM tree. The browser-side update instruction may include a second set of one or more browser-side operations on the browser-side DOM tree. At box 238, the operation may include the server transmitting (a) a server-side hash value representing the server-side DOM tree generated by the first server-side update, and (b) the browser-side update instruction, to the browser executed on the browser device. The server-side hash value may correspond to a browser-side hash value stored by the browser in the browser's database.

[0103] In one example, a second browser-side update to the browser-side DOM tree can represent a response to a content request as applied to the browser-side DOM tree. A response to the browser-side DOM tree can include changes to at least one content item as represented by the browser-side DOM tree. For example, a first server-side update to the server-side DOM tree performed by the server at box 226 can represent a content request from a browser as applied to the server-side DOM tree, and a second server-side update to the server-side DOM tree performed by the server at box 232 can represent a response to a content request as applied to the server-side DOM tree, and a second browser-side update to the browser-side DOM tree can represent a response to a content request as applied to the browser-side DOM tree.

[0104] In one example, before the server transmits the server-side hash value to the browser at box 236, the browser can calculate a browser-side hash value representing the browser-side DOM tree generated by the first browser-side update. The browser-side hash value representing the browser-side DOM tree generated by the first browser-side update can match the server-side hash value transmitted by the server at box 236. Therefore, the browser can identify the browser-side DOM tree based on the server-side hash value. For example, the browser-side DOM tree generated by the first browser-side update can be stored in browser data store 106, such as in browser-side DOM tree data corpus 122. Subsequently, the browser-side DOM tree generated by the first browser-side update can be retrieved, for example, based on the corresponding server-side hash value transmitted by the server at box 236.

[0105] The server-side hash value transmitted to the browser at box 236 matches the browser-side hash value representing the browser-side DOM tree generated by the first browser-side update. Therefore, the browser can identify the browser-side DOM tree generated by the first browser-side update based on the server-side hash value transmitted to the browser at box 236. After identifying the browser-side DOM tree, the browser can execute a browser-side update instruction to apply a second browser-side update to the browser-side DOM tree. After the browser-side update instruction has been executed to apply the second server-side update to the browser-side DOM tree, the browser-side DOM tree matches the server-side DOM tree generated by the second server-side update. In one example, the server-side hash value and browser-side update instruction transmitted by the server at box 238 can correspond to the server-side hash value and browser-side update instruction received by the browser at box 210, as shown in the reference. Figure 2A As described.

[0106] C. Calculate update instructions.

[0107] like Figure 2CAs shown, example operation 200 may include operations associated with calculating update instructions for updating the DOM tree. Figure 2C The operations shown reflect the calculation of browser-side update instructions. In one example, refer to Figure 2C The described operations can be combined with references, etc. Figure 2B The description describes the computation and execution of browser-side update instructions at box 236. Browser-side update instructions can be computed by the server and sent to the browser. After receiving browser-side update instructions from the server, the browser can execute the instructions to apply one or more browser-side updates to the browser-side DOM tree. Additionally or alternatively, it will be appreciated that, similar to... Figure 2C The operations shown can be performed by the browser to calculate server-side update instructions to be sent to the server, and after receiving the server-side update instructions from the browser, the server can execute the server-side update instructions to apply one or more server-side updates to the server-side DOM tree. For example, see [reference]. Figure 2C The described operations can be combined with references, etc. Figure 2A The description refers to calculating and executing server-side update instructions at box 206.

[0108] like Figure 2C As shown, in one example, operation 200 may include, at box 252, generating a first server-side hash tree representing a server-side DOM tree resulting from a first server-side update. The first server-side hash tree may include a first set of leaf nodes. At box 254, operation 200 may include generating a second server-side hash tree representing a server-side DOM tree resulting from a second server-side update. The second server-side hash tree may include a second set of leaf nodes.

[0109] At box 256, operation 200 may include comparing a first leaf node in a first group of leaf nodes with a second leaf node in a second group of leaf nodes. The first leaf node may occupy the first leaf position in a first server-side hash tree, and the second leaf node may occupy the second leaf position in a second server-side hash tree, with the first leaf position corresponding to the second leaf position.

[0110] At box 258, operation 200 may include determining whether a first leaf node matches a second leaf node. When the first leaf node matches the second leaf node, operation 200 may return to box 256, for example, to compare another set of leaf nodes. When the first leaf node and the second leaf node are different, operation 200 may proceed to box 260. For example, at box 258, the operation may include determining a first difference between the first leaf node in the first set of leaf nodes and the second leaf node in the second set of leaf nodes. Based on at least the first difference between the first leaf node and the second leaf node, operation 200 may proceed to box 260.

[0111] At box 260, operation 200 may include identifying a first server-side DOM tree node corresponding to the first leaf node of the first server-side hash tree in the server-side DOM tree generated by the first server-side update. At box 262, operation 200 may include identifying a second server-side DOM tree node corresponding to the second leaf node of the second server-side hash tree in the server-side DOM tree generated by the second server-side update.

[0112] At box 264, operation 200 may include determining a second difference between a first server-side DOM tree node and a second server-side DOM tree node. At box 266, operation 200 may include determining a browser-side update for the browser-side DOM tree based on the second difference between the first server-side DOM tree node and the second server-side DOM tree node. At box 268, operation 200 may include generating a browser-side update instruction that includes the browser-side update.

[0113] Browser-side update directives may include at least a first directive configured to cause the browser to apply a second browser-side update. In one example, after the browser has applied the browser-side update to the browser-side DOM tree, the first browser-side DOM tree node corresponding to the first server-side DOM tree node is modified to match the second server-side DOM tree node.

[0114] Now for reference Figure 2D Example operation 200 may include, for example, combining with, reference, etc. Figure 2C The described computation is used to update the DOM tree's update instructions to determine the operations associated with the differences between hash trees. Figure 2D The operations shown reflect, for example, the server-side hash tree associated with the computation of browser-side update instructions. In one example, refer to... Figure 2D The described operations can be combined with, for example, references. Figure 2B The calculation browser-side update instruction described in box 236 is executed. Additionally or alternatively, it will be recognized that, similar to... Figure 2D The operations shown can be combined, for example, as referenced. Figure 2A The update instructions described in box 206 are executed on the computing server side.

[0115] In one example, refer to Figure 2DThe described operations can be performed by the server determining the difference between a first server-side hash tree representing the server-side DOM tree produced by a first server-side update and a second server-side hash tree representing the server-side DOM tree produced by a second server-side update. In one example, based on the difference between the first and second server-side hash trees, the server can generate browser-side update instructions for the browser application to update the browser-side DOM tree. The server can transmit the browser-side update instructions to the browser, and the browser can execute the browser-side update instructions to apply the updates to the browser-side DOM tree. In one example, the first server-side hash tree can be a reference... Figure 2C Box 252 describes the first server-side hash tree. In one example, the second server-side hash tree could be a reference. Figure 2C Box 254 describes the second server-side hash tree.

[0116] like Figure 2D As shown, operation 200 may include, at block 272, comparing the root node of the first server-side hash tree with the corresponding root node of the second server-side hash tree. At block 274, the operation may include determining whether the root node of the first server-side hash tree matches the root node of the second server-side hash tree. When the root nodes match each other, the first server-side hash tree matches the second server-side hash tree. When the root nodes are different from each other, the first server-side hash tree differs from the second server-side hash tree with respect to at least one leaf node and / or at least one intermediate node. When the first root node matches the second root node, operation 200 may return to block 272, for example, to compare another set of root nodes corresponding to another set of hash trees. When the first root node differs from the second root node, operation 200 may proceed to block 276, for example, to determine one or more leaf nodes and / or intermediate nodes that differ between the first and second server-side hash trees.

[0117] In one example, the first server-side hash tree may include a first server-side root node with a first root node value, and the second server-side hash tree may include a second server-side root node with a second root node value. Operation 200 may include, at box 272, comparing the first root node value of the first server-side root node with the second root node value of the second server-side root node. At box 274, operation 200 may include determining that the first root node value and the second root node value are different. Based on the difference between the first root node value and the second root node value, operation 200 may proceed to box 276.

[0118] At box 276, operation 200 may include comparing intermediate nodes of the first server-side hash tree with corresponding intermediate nodes of the second server-side hash tree. At box 278, operation 200 may include determining whether intermediate nodes match each other or whether intermediate nodes are different from each other. When intermediate nodes match, operation 200 may return to box 276, for example, to compare another set of intermediate nodes. When intermediate nodes are different, the operation may proceed to box 280. Additionally or alternatively, when there are no further intermediate nodes, operation 200 may return to box 272.

[0119] In one example, the first server-side hash tree may include at least a first server-side intermediate node and a second server-side intermediate node extending from the first server-side root node, respectively. The first server-side intermediate node may have a first intermediate node value, and the second server-side intermediate node may have a second intermediate node value. The second server-side hash tree may include at least a third server-side intermediate node and a fourth server-side intermediate node extending from the second server-side root node, respectively. The third server-side intermediate node may have a third intermediate node value, and the fourth server-side intermediate node may have a fourth intermediate node value. The first server-side intermediate node may occupy a first intermediate position in the first server-side hash tree, and the third server-side intermediate node may occupy a third intermediate position in the second server-side hash tree. The first intermediate position in the first server-side hash tree may correspond to the third intermediate position in the second server-side hash tree. The second server-side intermediate node may occupy a second intermediate position in the first server-side hash tree, and the fourth server-side intermediate node may occupy a fourth intermediate position in the second server-side hash tree. The second intermediate position in the first server-side hash tree may correspond to the fourth intermediate position in the second server-side hash tree.

[0120] In one example, at box 276, operation 200 may include comparing a first intermediate node value of a first server-side intermediate node with a third intermediate node value of a third server-side intermediate node, and at box 278, operation 200 may include determining that the first intermediate node value matches the third intermediate node value. Based on the match between the first and third intermediate node values, operation 200 may return to box 276.

[0121] In one example, the first server-side hash tree and the second server-side hash tree may each include one or more lower-level intermediate nodes and / or one or more leaf nodes extending from the first server-side intermediate node and the third server-side intermediate node, respectively. Based on matching the third server-side intermediate node with the first server-side intermediate node, operation 200 may include determining that any lower-level intermediate nodes and / or any leaf nodes extending from the first server-side intermediate node and the third server-side intermediate node, respectively, also match each other. For example, based on matching the third server-side intermediate node with the first server-side intermediate node, operation 200 may omit comparing any lower-level intermediate nodes and / or any leaf nodes extending from the first server-side intermediate node and the third server-side intermediate node, respectively.

[0122] After returning to box 276, operation 200 may include comparing the second intermediate node value of the first server-side intermediate node with the fourth intermediate node value of the fourth server-side intermediate node, and at box 278, determining that the second intermediate node value is different from the fourth intermediate node value. Based on the difference between the second intermediate node value and the fourth intermediate node value, the operation may proceed to box 280.

[0123] At box 280, operation 200 may include comparing leaf nodes of the first server-side hash tree with corresponding leaf nodes of the second server-side hash tree. At box 282, operation 200 may include determining whether leaf nodes match each other or whether leaf nodes are different from each other. When leaf nodes match, operation 200 may return to box 280, for example, to compare another set of leaf nodes. When leaf nodes are different, the operation may proceed to box 284. Additionally or alternatively, when no further leaf nodes are available, operation 200 may return to box 276.

[0124] In one example, the first server-side hash tree may include first and second server-side leaf nodes extending from the second server-side intermediate node. The first server-side leaf node may have a first leaf node value, and the second server-side leaf node may have a second leaf node value. The second server-side hash tree may include third and fourth server-side leaf nodes extending from the fourth server-side intermediate node. The third server-side leaf node may have a third leaf node value, and the fourth server-side leaf node may have a fourth leaf node value. The first server-side leaf node may occupy the first leaf position of the first server-side hash tree, and the third server-side leaf node may occupy the third leaf position of the second server-side hash tree. The first leaf position of the first server-side hash tree may correspond to the third leaf position of the second server-side hash tree. The second server-side leaf node may occupy the second leaf position of the first server-side hash tree, and the fourth server-side leaf node may occupy the fourth leaf position of the second server-side hash tree. The second leaf position of the first server-side hash tree may correspond to the fourth leaf position of the second server-side hash tree.

[0125] In one example, at box 280, operation 200 may include comparing the first leaf node value of the first server-side leaf node with the third leaf node value of the third server-side leaf node, and at box 282, operation 200 may include determining that the first leaf node value matches the third leaf node value. Based on the match between the first leaf node value and the third leaf node value, operation 200 may return to box 280.

[0126] After returning to box 280, operation 200 may include comparing the second leaf node value of the second server-side leaf node with the fourth leaf node value of the fourth server-side leaf node, and at box 282, operation 200 may include determining that the second leaf node value and the fourth leaf node value are different. Based on the difference between the second leaf node value and the fourth leaf node value, operation 200 may proceed to box 284.

[0127] At box 284, operation 200 may include generating a browser-side update instruction for the browser to update the browser-side DOM tree corresponding to the server-side DOM tree represented by the first server-side hash tree. The browser-side update instruction may include a browser-side update generated based on the difference between the leaf nodes of the first server-side hash tree and the corresponding leaf nodes of the second server-side hash tree. After the browser-side update instruction has been generated, operation 200 may proceed to box 286. At box 286, operation 200 may include determining whether there is another leaf node associated with the first server-side hash tree and / or the second server-side hash tree. If there is another leaf node, operation 200 may return to box 280, for example, to compare another set of leaf nodes. If there are no further leaf nodes, operation 200 may proceed to box 288. At box 288, operation 200 may include determining whether there is another intermediate node associated with the first server-side hash tree and / or the second server-side hash tree. If there is another intermediate node, operation 200 may return to box 276, for example, to compare another set of intermediate nodes. When there are no further intermediate nodes, operation 200 can return to box 272, for example, to compare another set of root nodes corresponding to another set of hash trees.

[0128] In one example, at box 284, operation 200 may include generating a browser-side update instruction for applying browser-side updates to the browser-side DOM tree based on the difference between the second leaf node value of the second server-side leaf node and the fourth leaf node value of the fourth server-side leaf node. Operation 200 for generating the browser-side update instruction may include referencing... Figure 2C One or more of the operations described in 200, including, for example, the operations described in reference boxes 260-268.

[0129] 4. Computer networks and cloud networks

[0130] In one or more embodiments, a computer network provides connectivity between a set of nodes. Nodes may be local to each other and / or geographically distant. Nodes are connected via a set of links. Examples of links include coaxial cable, unshielded stranded cable, copper cable, fiber optic cable, and virtual links.

[0131] A subset of nodes implements a computer network. Examples of such nodes include switches, routers, firewalls, and Network Address Translation (NAT). Another subset of nodes uses a computer network. Such nodes (also called "hosts") can execute client processes and / or server processes. Client processes make requests for computing services, such as the execution of a specific application and / or the storage of a specific amount of data. Server processes respond by performing the requested service and / or returning the corresponding data.

[0132] A computer network can be a physical network, including physical nodes connected by physical links. A physical node is any digital device. A physical node can be a function-specific hardware device, such as a hardware switch, hardware router, hardware firewall, and hardware NAT. Additionally or alternatively, a physical node can be a general-purpose machine configured to run various virtual machines and / or applications performing corresponding functions. A physical link is the physical medium connecting two or more physical nodes. Examples of links include coaxial cable, unshielded stranded cable, copper cable, and fiber optic cable.

[0133] Computer networks can be overlay networks. An overlay network is a logical network implemented on top of another network (such as a physical network). Each node in an overlay network corresponds to a corresponding node in the underlying network. Therefore, each node in an overlay network is associated with both an overlay address (addressing to the overlay node) and an underlying address (addressing the underlying node that implements the overlay node). Overlay nodes can be digital devices and / or software processes (such as virtual machines, application instances, or threads). The links connecting overlay nodes are implemented as tunnels through the underlying network. Overlay nodes at either end of the tunnel treat the underlying multi-hop path between them as a single logical link. Tunneling is performed through encapsulation and decapsulation.

[0134] In this embodiment, the client may be located locally on the computer network and / or remotely on the computer network. The client may access the computer network via other computer networks, such as a private network or the Internet. The client may use a communication protocol, such as Hypertext Transfer Protocol (HTTP), to transmit requests to the computer network. Requests may be transmitted through interfaces such as client interfaces (such as web browsers), program interfaces, or application programming interfaces (APIs).

[0135] In this embodiment, a computer network provides connectivity between clients and network resources. Network resources include hardware and / or software configured to execute server processes. Examples of network resources include processors, data storage devices, virtual machines, containers, and / or software applications. Network resources are shared among multiple clients. Clients independently request computing services from the computer network. Network resources are dynamically allocated to requesting and / or clients on demand. The network resources allocated to each requesting and / or client can be scaled up or down based on, for example, (a) computing services requested by a specific client, (b) aggregated computing services requested by a specific tenant, and / or (c) the requested aggregated computing services of the computer network. Such a computer network may be referred to as a "cloud network."

[0136] In this embodiment, the service provider offers a cloud network to one or more end users. The cloud network can implement various service models, including but not limited to Software as a Service (SaaS), Platform as a Service (PaaS), and Infrastructure as a Service (IaaS). In SaaS, the service provider offers end users the ability to use applications running on the service provider's network resources. In PaaS, the service provider offers end users the ability to deploy custom applications to network resources. Custom applications can be created using programming languages, libraries, services, and tools supported by the service provider. In IaaS, the service provider offers end users the ability to provision processing, storage, networking, and other basic computing resources provided by the network resources. Any application, including operating systems, can be deployed on the network resources.

[0137] In embodiments, computer networks can implement various deployment models, including but not limited to private clouds, public clouds, and hybrid clouds. In a private cloud, network resources are provisioned to a specific group of entities for exclusive use (as used herein, "entity" refers to a business, organization, individual, or other entity). Network resources can be local to or remote from the premises of the specific group of entities. In a public cloud, cloud resources are provisioned to multiple entities (also referred to as "tenants" or "customers") that are independent of each other. The computer network and its network resources are accessed by clients corresponding to different tenants. Such a computer network can be referred to as a "multi-tenant computer network." Several tenants can use the same specific network resources at different times and / or at the same time. Network resources can be local to or remote from the tenant's premises. In a hybrid cloud, the computer network includes both private and public clouds. The interface between the private and public clouds allows for the portability of data and applications. Data stored in the private cloud and data stored in the public cloud can be exchanged through the interface. Applications implemented in the private cloud and applications implemented in the public cloud may be interdependent. You can use the interface to make calls from an application in a private cloud to an application in a public cloud (and vice versa).

[0138] In this embodiment, the tenants of a multi-tenant computer network are independent of each other. For example, one tenant's business or operations may be separate from those of another tenant. Different tenants may have different network requirements for the computer network. Examples of network requirements include processing speed, data storage capacity, security requirements, performance requirements, throughput requirements, latency requirements, resilience requirements, quality of service (QoS) requirements, tenant isolation, and / or consistency. The same computer network may need to meet the different network requirements demanded by different tenants.

[0139] In one or more embodiments, in a multi-tenant computer network, tenant isolation is implemented to ensure that applications and / or data from different tenants are not shared with each other. Various tenant isolation methods can be used.

[0140] In this embodiment, each tenant is associated with a tenant ID. Each network resource in a multi-tenant computer network is tagged with a tenant ID. A tenant is only allowed access to a specific network resource if the tenant and the specific network resource are associated with the same tenant ID.

[0141] In this embodiment, each tenant is associated with a tenant ID. Each application implemented by the computer network is tagged with a tenant ID. Additionally or alternatively, each data structure and / or dataset stored by the computer network is tagged with a tenant ID. A tenant is allowed access to a specific application, data structure, and / or dataset only if the tenant and the specific application, data structure, and / or dataset are associated with the same tenant ID.

[0142] As an example, each database implemented in a multi-tenant computer network can be identified by a tenant ID. Only the tenant associated with the corresponding tenant ID can access the data in a specific database. As another example, each entry in a database implemented in a multi-tenant computer network can be identified by a tenant ID. Only the tenant associated with the corresponding tenant ID can access the data in a specific entry. However, the database can be shared by multiple tenants.

[0143] In this embodiment, the subscription list indicates which tenants are authorized to access which applications. For each application, a list of tenant IDs of tenants authorized to access that application is stored. A tenant is only allowed to access a specific application if its tenant ID is included in the subscription list corresponding to that specific application.

[0144] In this embodiment, network resources (such as digital devices, virtual machines, application instances, and threads) corresponding to different tenants are isolated to tenant-specific overlay networks maintained by a multi-tenant computer network. As an example, data packets from any source device within a tenant overlay network can be sent only to other devices within the same tenant overlay network. Encapsulation tunnels are used to prevent any transmission from a source device on one tenant overlay network to devices in other tenant overlay networks. Specifically, data packets received from the source device are encapsulated within an outer data packet. The outer data packet is sent from a first encapsulation tunnel endpoint (communicating with the source device in the tenant overlay network) to a second encapsulation tunnel endpoint (communicating with the destination device in the tenant overlay network). The second encapsulation tunnel endpoint decapsulates the outer data packet to obtain the original data packet sent by the source device. The original data packet is then sent from the second encapsulation tunnel endpoint to the destination device within the same specific overlay network.

[0145] 5. Microservice Applications

[0146] According to one or more embodiments, the techniques described herein are implemented using a microservices architecture. In this context, a microservice refers to software logic designed to be deployed independently, having endpoints that can be logically coupled to other microservices to build various applications. Applications built using microservices differ from monolithic applications, which are designed as a single, fixed unit and typically consist of a single logical executable. With microservices applications, different microservices can be deployed independently as separate executables. Microservices can communicate using Hypertext Transfer Protocol (HTTP) messages and / or via API endpoints according to other communication protocols. Microservices can be managed and updated separately, written in different languages, and executed independently of other microservices.

[0147] Microservices offer flexibility in managing and building applications. Different applications can be built by connecting different collections of microservices without changing the source code of the microservices. Therefore, microservices act as logical building blocks that can be arranged in various ways to build different applications. Microservices can provide monitoring services that notify the microservice manager when trigger events from a set of trigger events exposed to the microservice manager occur (such as If-This-Then-That (IFTTT), Zapier, or Oracle Self-Service Automation (OSSA)). Microservices exposed to an application can alternatively or additionally provide action services that perform actions within the application based on data received from the microservice manager (data passed through values, connecting actions to other triggers, and / or other actions from the microservice manager, controlled and configurable by the microservice manager). Microservice triggers and / or actions can be chained together to form recipes for actions that may optionally occur in different applications that are otherwise unaware of or have no control or dependency over each other. These managed applications can be authenticated or inserted into the microservice manager, for example, using application credentials provided by the user to the manager, without requiring re-authentication each time the managed application is used alone or in combination with other applications.

[0148] In one or more embodiments, microservices can be connected via a GUI. For example, a microservice can be displayed as a window, frame, or other logical block within a GUI element. Users can drag and drop microservices into areas of the GUI used to build the application. Users can use directed arrows or any other GUI element to connect the output of one microservice to the input of another. The application builder can run validation tests to verify that the output and input are compatible (e.g., by checking data types, size limits, etc.).

[0149] trigger

[0150] According to one or more embodiments, the above-described techniques can be encapsulated within microservices. In other words, a microservice can trigger notifications (entering the microservice manager for optional use by other inserted applications, referred to herein as the "target" microservice) based on the above-described techniques, and / or can be represented as a GUI block and connected to one or more other microservices. Triggering conditions may include absolute or relative thresholds for values, and / or absolute or relative thresholds for the amount of data to be analyzed or the duration of data analysis, such that a trigger to the microservice manager occurs whenever an inserted microservice application detects that a threshold has been exceeded. For example, when a microservice application detects that a value has exceeded the trigger threshold, a user can request a trigger from the microservice manager.

[0151] In one embodiment, the trigger may output data for the target microservice to consume when satisfied. In another embodiment, the trigger may output a binary value indicating that the trigger has been satisfied, or output the field name or other contextual information that the triggering condition has been met. Additionally or alternatively, the target microservice may connect to one or more other microservices to input alerts to those other microservices. Other microservices may perform response actions based on the techniques described above, including but not limited to deploying additional resources, adjusting system configurations, and / or generating a GUI.

[0152] action

[0153] In one or more embodiments, the inserted microservice application can expose actions to the microservice manager. The exposed actions can receive data, the identifier of a data object, or the location of the data as input, which allows the data to be moved to the data cloud.

[0154] In one or more embodiments, the exposed action can receive a request as input to increase or decrease an existing alert threshold. The input can identify existing in-application alert thresholds and whether to increase, decrease, or delete the threshold. Additionally or alternatively, the input can request the microservice application to create a new in-application alert threshold. In-application alerts can be triggered to the user upon login to the application, or they can use a default or user-selected alerting mechanism available within the microservice application itself, instead of being triggered by other applications plugged into the microservice manager.

[0155] In one or more embodiments, a microservice application may generate and provide output based on inputs that identify, locate, or provide historical data and define the degree or scope of the requested output. Actions, when triggered, cause the microservice application to provide, store, or display output, for example, as a data model or as aggregated data describing the data model.

[0156] 6. Hardware Overview

[0157] According to one embodiment, the techniques described herein are implemented by one or more dedicated computing devices. The dedicated computing device may be hardwired to execute the techniques, or may include digital electronic devices permanently programmed to execute the techniques, such as one or more application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), or network processing units (NPUs), or may include one or more general-purpose hardware processors programmed to execute the techniques according to program instructions in firmware, memory, other storage devices, or combinations thereof. Such a dedicated computing device may also implement the techniques by combining custom hardwired logic, ASICs, FPGAs, or NPUs with custom programming. The dedicated computing device may be a desktop computer system, a portable computer system, a handheld device, a networking device, or any other device that combines hardwired and / or program logic to implement the techniques.

[0158] For example, Figure 3 This is a block diagram illustrating a computer system 300 on which embodiments of the present invention may be implemented. The computer system 300 includes a bus 302 or other communication mechanism for transmitting information and a hardware processor 304 coupled to the bus 302 for processing information. The hardware processor 304 may be, for example, a general-purpose microprocessor.

[0159] Computer system 300 also includes main memory 306, such as random access memory (RAM) or other dynamic storage devices, coupled to bus 302 for storing information and instructions to be executed by processor 304. Main memory 306 can also be used to store temporary variables or other intermediate information during the execution of instructions to be executed by processor 304. When such instructions are stored in non-transitory storage media accessible to processor 304, such instructions make computer system 300 a dedicated machine customized to perform the operations specified in the instructions.

[0160] The computer system 300 also includes a read-only memory (ROM) 308 or other static storage device coupled to the bus 302 for storing static information and instructions of the processor 304. A storage device 310, such as a disk or optical disk, is provided and coupled to the bus 302 for storing information and instructions.

[0161] Computer system 300 can be coupled via bus 302 to a display 312, such as a cathode ray tube (CRT), for displaying information to a computer user. Input device 314, including alphanumeric keys and other keys, is coupled to bus 302 for transmitting information and command selections to processor 304. Another type of user input device is a cursor control 316, such as a mouse, trackball, or arrow keys, for transmitting directional information and command selections to processor 304 and for controlling cursor movement on display 312. Such input devices typically have two degrees of freedom on two axes (a first axis (e.g., x) and a second axis (e.g., y)) to allow the device to specify a position in a plane.

[0162] Computer system 300 may implement the techniques described herein using custom hard-wired logic, one or more ASICs or FPGAs, firmware, and / or program logic, which, in combination with the computer system, make computer system 300 a special-purpose machine or program the computer system 300 as such. According to one embodiment, the techniques herein are executed by computer system 300 in response to processor 304 executing one or more sequences of one or more instructions contained in main memory 306. These instructions may be read into main memory 306 from another storage medium, such as storage device 310. Execution of the sequence of instructions contained in main memory 306 causes processor 304 to perform the processing steps described herein. In alternative embodiments, hard-wired circuitry may be used instead of software instructions or in combination with software instructions.

[0163] As used herein, the term "storage medium" refers to any non-transitory medium that stores data and / or instructions that enable a machine to operate in a particular manner. Such storage media can include non-volatile media and / or volatile media. Non-volatile media include, for example, optical discs or magnetic disks, such as storage device 310. Volatile media include dynamic memory, such as main memory 306. Common forms of storage media include, for example, floppy disks, flexible disks, hard disks, solid-state drives, magnetic tape or any other magnetic data storage media, CD-ROMs, any other optical data storage media, any physical media with a perforated pattern, RAM, PROMs and EPROMs, FLASH-EPROMs, NVRAMs, any other memory chips or cassette tapes, content-addressable memory (CAM), and tri-state content-addressable memory (TCAM).

[0164] Storage media differ from transmission media but can be used in conjunction with them. Transmission media participate in the transfer of information between storage media. For example, transmission media include coaxial cables, copper wires, and optical fibers, including wires containing bus 302. Transmission media can also take the form of sound waves or light waves, such as those generated during radio wave and infrared data communication.

[0165] Various forms of media can involve carrying one or more sequences of instructions to processor 304 for execution. For example, the instructions may initially be carried on a disk or solid-state drive of a remote computer. The remote computer may load the instructions into its dynamic memory and transmit them over a telephone line using a modem. A modem local to computer system 300 may receive data over the telephone line and convert the data into an infrared signal using an infrared transmitter. An infrared detector may receive the data carried in the infrared signal, and appropriate circuitry may place the data on bus 302. Bus 302 carries the data to main memory 306, from which processor 304 retrieves and executes the instructions. The instructions received by main memory 306 may optionally be stored on storage device 310 before or after execution by processor 304.

[0166] Computer system 300 also includes a communication interface 318 coupled to bus 302. Communication interface 318 provides bidirectional data communication coupled to network link 320, which is connected to local network 322. For example, communication interface 318 may be an Integrated Services Digital Network (ISDN) card, a cable modem, a satellite modem, or a modem providing data communication connectivity to a corresponding type of telephone line. As another example, communication interface 318 may be a LAN card providing data communication connectivity to a compatible local area network (LAN). A wireless link may also be implemented. In any such implementation, communication interface 318 transmits and receives electrical, electromagnetic, or optical signals carrying digital data streams representing various types of information.

[0167] Network link 320 typically provides data communication to other data devices via one or more networks. For example, network link 320 may provide a connection to host computer 324 or to data devices operated by Internet Service Provider (ISP) 326 via local network 322. ISP 326, in turn, provides data communication services via a global packet data communication network now commonly referred to as the "Internet" 328. Both local network 322 and Internet 328 use electrical, electromagnetic, or optical signals that carry digital data streams. Signals through various networks, as well as signals on network link 320 and through communication interface 318, are example forms of transmission media that carry digital data to or from computer system 300.

[0168] Computer system 300 can send messages and receive data, including program code, through one or more networks, network links 320, and communication interfaces 318. In the Internet example, server 330 can transmit requested code for the application through the Internet 328, ISP 326, local network 322, and communication interface 318.

[0169] The received code can be executed by processor 304 when it is received, and / or stored in storage device 310 or other non-volatile storage device for later execution.

[0170] 7. Other; Extension

[0171] The embodiments are directed to a system having one or more devices, which include a hardware processor and are configured to perform any of the operations described herein and / or any of the following claims. In the embodiments, a non-transitory computer-readable storage medium includes instructions that, when executed by the one or more hardware processors, cause to perform any of the operations described herein and / or any of the claims.

[0172] Any combination of the features and functions described herein may be used according to one or more embodiments. In the foregoing specification, embodiments have been described with reference to numerous specific details that vary depending on the implementation. Accordingly, the specification and drawings should be considered illustrative rather than restrictive. The sole and exclusive reference to the scope of the invention, and what the applicant intends to define as the scope of the invention, is the literal and equivalent scope of the set of claims issued in this application, in the specific form of such claims, including any subsequent corrections.

Claims

1. A non-transitory computer-readable medium storing one or more instructions, said instructions, when executed by one or more hardware processors, causing to perform operations, including: The server receives (a) a first hash value corresponding to a browser-side DOM tree stored by the browser from the browser on the browser device, and (b) a server-side update instruction for applying a first server-side update to the server-side DOM tree stored by the server, wherein the first server-side update to the server-side DOM tree reflects the first browser-side update to the browser-side DOM tree by the browser. The server identifies the server-side DOM tree based on the first hash value; The server responds to a server-side update instruction and performs a first server-side update on the server-side DOM tree, wherein the first server-side update includes a first set of one or more server-side operations on the server-side DOM tree; as well as The server calculates a second hash value representing the server-side DOM tree generated by the update from the first server side; as well as The second hash value is stored by the server in association with the server-side DOM tree generated by the first server-side update.

2. The medium as claimed in claim 1, wherein the first server-side update represents an instruction for user interaction with the browser.

3. The medium of claim 1, wherein the operation further comprises: After the server performs the first server-side update on the server-side DOM tree, the first group of server-side nodes in the server-side DOM tree are numbered according to the node numbering convention. The second group of browser-side nodes in the browser-side DOM tree are numbered according to node numbering conventions; and Each server-side node in the first group of server-side nodes has a server-side number that matches the browser-side number of the corresponding browser-side node.

4. A non-transitory computer-readable medium storing one or more instructions, said instructions, when executed by one or more hardware processors, causing to perform operations, including: The server receives (a) a first hash value corresponding to a browser-side DOM tree stored by the browser from the browser on the browser device, and (b) a server-side update instruction for applying a first server-side update to the server-side DOM tree stored by the server, wherein the first server-side update to the server-side DOM tree reflects the browser's first browser-side update to the browser-side DOM tree. The server identifies the server-side DOM tree based on the first hash value; In response to a server-side update instruction, the server performs (a) a first server-side update to the server-side DOM tree, wherein the first server-side update includes a first set of one or more server-side operations on the server-side DOM tree, and (b) a second server-side update to the server-side DOM tree, wherein the second server-side update includes a second set of one or more server-side operations on the server-side DOM tree, wherein the second server-side update is triggered by the first server-side update. The server calculates a browser-side update instruction for applying a second browser-side update to the browser-side DOM tree, wherein the second browser-side update includes a second set of one or more browser-side operations on the browser-side DOM tree, wherein the second browser-side update on the browser-side DOM tree reflects the second server-side update on the server-side DOM tree. as well as The server transmits browser-side update instructions to the browser, which is executed on the browser device. In response to the browser-side update instructions, the browser performs a second browser-side update on the browser-side DOM tree.

5. The medium of claim 4, wherein calculating the browser-side update instruction for applying the second browser-side update to the browser-side DOM tree includes: Generate a first server-side hash tree representing the server-side DOM tree generated by the first server-side update, wherein the first server-side hash tree includes a first set of leaf nodes; Generate a second server-side hash tree representing the server-side DOM tree generated by the second server-side update, wherein the second server-side hash tree includes a second set of leaf nodes; Determine the first difference between the first leaf node in the first group of leaf nodes and the second leaf node in the second group of leaf nodes. The first leaf node occupies the first leaf position in the hash tree on the first server side. The second leaf node occupies the second leaf position in the hash tree on the second server side, and The position of the first leaf corresponds to the position of the second leaf; Based on the first difference between the first leaf node and the second leaf node: In the server-side DOM tree generated by the first server-side update, identify the first server-side DOM tree node corresponding to the first leaf node of the first server-side hash tree. In the server-side DOM tree generated by the second server-side update, identify the second server-side DOM tree node corresponding to the second leaf node of the second server-side hash tree. Determine the second difference between the first server-side DOM tree nodes and the second server-side DOM tree nodes. Based on the second difference between the first server-side DOM tree nodes and the second server-side DOM tree nodes, a second browser-side update for the browser-side DOM tree is determined. The browser-side update instruction includes a first instruction, which is configured to cause the browser to apply a second browser-side update. After the browser has applied the second browser-side update to the browser-side DOM tree, the first browser-side DOM tree node corresponding to the first server-side DOM tree node is modified to match the second server-side DOM tree node.

6. The medium of claim 4, wherein the operation further comprises: The server calculates a second hash value representing the server-side DOM tree generated by the update from the first server side; as well as The server transmits a second hash value to the browser, which is executed on the browser device, and the browser identifies the browser-side DOM tree based on the second hash value.

7. The medium of claim 6, wherein calculating the second hash value comprises: Generate a server-side hash tree representing the server-side DOM tree generated by the first server-side update; Determine the server-side root hash value of the server-side hash tree; as well as The server-side root hash value was selected as the second hash value.

8. The medium of claim 7, wherein the server-side hash tree comprises a plurality of server-side leaf nodes, and wherein the server-side DOM tree comprises a plurality of server-side DOM tree nodes, and wherein each of the plurality of server-side leaf nodes comprises a server-side leaf hash value representing a corresponding server-side DOM tree node among the plurality of server-side DOM tree nodes.

9. The medium as described in claim 7, The browser calculates the third hash value representing the browser-side DOM tree generated by the first browser-side update at least in the following ways: Generate a browser-side hash tree representing the browser-side DOM tree generated by the first browser-side update; Determine the browser-side root hash value of the browser-side hash tree; as well as Choose the browser-side root hash value as the third hash value; The second hash value matches the third hash value; and The browser identifies the browser-side DOM tree by matching the second hash value with the third hash value.

10. The medium as described in claim 9, The server-side hash tree includes multiple server-side hash tree nodes, and each of the multiple server-side hash tree nodes includes a server-side node value. and The operation also includes: At least by numbering the plurality of server-side hash tree nodes according to a numbering convention, a server-side node identifier number is assigned to each of the plurality of server-side hash tree nodes. Wherein, for at least the first server-side hash tree node among the plurality of server-side hash tree nodes, the first server-side node identifier assigned to the first server-side hash tree node replaces the second server-side hash tree node identifier previously assigned to the first server-side hash tree node. The browser-side hash tree includes multiple browser-side hash tree nodes, wherein each browser-side hash tree node includes a browser-side node identifier number assigned according to a numbering convention and a browser-side node value. The server-side node value of each server-side hash tree node, which can be identified by the corresponding server-side node identifier, is matched with the browser-side node value of the corresponding browser-side hash tree node, which can be identified by the corresponding browser-side node identifier.

11. The medium as described in claim 4, The first server-side update to the server-side DOM tree represents a content request from the browser. The second server-side update to the server-side DOM tree represents a response to the content request as applied to the server-side DOM tree, wherein the response as applied to the server-side DOM tree includes changes to at least one content item as represented by the server-side DOM tree; and The second browser-side update to the browser-side DOM tree represents a response to the content request as applied to the browser-side DOM tree, wherein the response as applied to the browser-side DOM tree includes changes to the at least one content item as represented by the browser-side DOM tree.

12. The medium of claim 4, wherein the first hash value matches a second hash value corresponding to the server-side DOM tree, the second hash value being calculated by the server before receiving the first hash value and the server-side update instruction.

13. The medium of claim 4, wherein the first group of one or more server-side operations for updating the first server-side operation comprises: The identifier of the first node corresponding to the first server-side node in the server-side DOM tree; as well as The first node operation to be performed on the first server-side node of the server-side DOM tree; The first node identifier corresponds to the node numbering convention, which can be applied to (i) the first group of server-side nodes represented by the server-side DOM tree, including the first server-side node, and (ii) the second group of browser-side nodes represented by the browser-side DOM tree.

14. The medium of claim 4, wherein the operation further comprises: After the server performs the first server-side update on the server-side DOM tree, the first group of server-side nodes in the server-side DOM tree are numbered according to the node numbering convention. The second group of browser-side nodes in the browser-side DOM tree are numbered according to the node numbering convention. Each server-side node in the first group of server-side nodes has a server-side number that matches the browser-side number of the corresponding browser-side node. and The second group of one or more browser-side operations updated by the second browser side include: The identifier of the first node corresponding to the first browser-side node in the browser-side DOM tree; as well as The first node operation to be performed on the first browser-side node of the browser-side DOM tree.

15. The medium of claim 4, wherein calculating the browser-side update instruction for applying the second browser-side update to the browser-side DOM tree comprises: Generate a first server-side hash tree representing the server-side DOM tree generated by the first server-side update, wherein the first server-side hash tree includes: The first server-side root node with the first root node value, The first group of server leaf nodes, and At least a first server-side intermediate node and a second server-side intermediate node extending from the first server-side root node, respectively, wherein the first server-side intermediate node has a first intermediate node value and the second server-side intermediate node has a second intermediate node value. In the first group of server leaf nodes, at least the first server leaf node and the second server leaf node extend from the second server intermediate node, the first server leaf node has a first leaf node value, and the second server leaf node has a second leaf node value. Generate a second server-side hash tree representing the server-side DOM tree generated by the second server-side update, wherein the second server-side hash tree includes: The second server-side root node with the second root node value, The second group of server leaf nodes, and At least a third intermediate node and a fourth intermediate node extending from the second server-side root node, respectively, wherein the third server-side intermediate node has a third intermediate node value, and the fourth server-side intermediate node has a fourth intermediate node value. In the second group of server leaf nodes, at least the third server leaf node and the fourth server leaf node extend from the fourth server intermediate node, the third server leaf node has a third leaf node value, and the fourth server leaf node has a fourth leaf node value. Compare the first root node value of the first server-side root node with the second root node value of the second server-side root node, and determine that the first root node value and the second root node value are different; Based on the difference between the first root node value and the second root node value, the first intermediate node value of the first server-side intermediate node is compared with the third intermediate node value of the third server-side intermediate node, and it is determined that the first intermediate node value matches the third intermediate node value. The intermediate node on the first server side occupies the first intermediate position in the hash tree on the first server side. The third server-side intermediate node occupies the third intermediate position in the hash tree on the second server side, and The first middle position corresponds to the third middle position; Based on the matching of the first intermediate node value with the third intermediate node value, the second intermediate node value of the first server-side intermediate node is compared with the fourth intermediate node value of the fourth server-side intermediate node, and it is determined that the second intermediate node value and the fourth intermediate node value are different. The intermediate node on the second server side occupies the second intermediate position in the hash tree on the first server side. The fourth server-side intermediate node occupies the fourth intermediate position in the hash tree on the second server side, and The second middle position corresponds to the fourth middle position; Based on the difference between the second and fourth intermediate node values, the first leaf node value of the first server's side-leaf node is compared with the third leaf node value of the third server's side-leaf node, and it is determined that the first leaf node value matches the third leaf node value. The first server's leaf node occupies the first leaf position in the first server's hash tree. The third server's leaf node occupies the third leaf position in the second server's hash tree, and The position of the first leaf corresponds to the position of the third leaf; Based on the matching of the first leaf node value with the third leaf node value, the second leaf node value of the second server's side-leaf node is compared with the fourth leaf node value of the fourth server's side-leaf node, and it is determined that the second leaf node value and the fourth leaf node value are different. The second server's leaf node occupies the second leaf position in the hash tree on the first server side. The fourth leaf node of the fourth server occupies the fourth leaf position of the hash tree on the second server side, and The position of the second leaf corresponds to the position of the fourth leaf; Based on the difference between the values ​​of the second leaf node and the fourth leaf node: In the server-side DOM tree generated by the first server-side update, identify the first server-side DOM tree node corresponding to the second server-side leaf node of the first server-side hash tree. In the server-side DOM tree generated by the second server-side update, identify the second server-side DOM tree node corresponding to the fourth server-side leaf node of the second server-side hash tree. Determine the differences between the DOM tree nodes on the first server side and the DOM tree nodes on the second server side. Based on the differences between the first server-side DOM tree nodes and the second server-side DOM tree nodes, a second browser-side update for the browser-side DOM tree is determined. The browser-side update instruction includes a first instruction, which is configured to cause the browser to apply a second browser-side update. After the browser has applied the second browser-side update to the browser-side DOM tree, the first browser-side DOM tree node corresponding to the first server-side DOM tree node is modified to match the second server-side DOM tree node.

16. A method comprising the operation as described in any one of claims 1-15.

17. A system comprising: At least one hardware processor; The system is configured to perform the operation as described in any one of claims 1-15 using the at least one hardware processor.

18. A computer program product comprising instructions that, when executed by one or more hardware processors, cause to perform the operation as described in any one of claims 1-15.