Some Javascript grid components provide a "virtualization" facility which allows for rows of data to be downloaded on demand as the user scrolls up and down.
A dedicated server application is responsible for providing the data to the grid. This is sometimes known as a "server side rendering model".
Operations such as sort, filter, group and aggregate can no longer be performed by the grid as it doesn't have access to all the data at once. These operations are instead performed by the server, which may itself defer to a database query.
A Javascript grid component which supports virtualization will typically come with basic sample server code, typically to query a database and buffer the data.
However, features such as managing asynchronous data insert, update and delete transactions and co-ordinating them with sort, filter, group and aggregate operations are not provided.
These features can be challenging to implement if there are frequent data transactions coupled with long-running operations caused by large data quantities.
To achieve satisfactory performance targets it may be necesssary to introduce parallel or asynchronous tasks running on separate threads.
OxGrid consists of complementary client and server component libraries which are designed to work together.
The client is designed to co-ordinate with a virtualized data source in the Cloud. Functions such as sort, filter, group and aggregate are solely the responsibility of the server.
The client grid maintains a local row-data cache which handles asynchronous row updates from the server. The cache is automatically flushed after global server row operations such as sort, filter and group.
The server is optimized to deal with high frequency data updates and can dynamically adjust the frequency of operations such as re-sort, filter or group and aggregate groupings.
The grid may specify columns containing ad-hoc formulae, referencing other columns or aggregations such as Price / Average (Price) or Quantity / Sum (Quantity). The server maintains a formula dependency map and re-evaluates expressions as inputs change.