Wednesday, August 27, 2008

A round of XForms engine performance improvements


Now that Orbeon Forms 3.7 beta 1 is out, we have committed a series of changes that intend to improve the performance of the XForms engine. These particular changes initially focused on <xforms:insert> and <xforms:delete>, but they ended up requesting a fairly major refactoring of the XForms controls code on the server. Some (probably obscure) developer information is available on our wiki.

In short, we used to duplicate the tree of controls on the server at every possible turn. Now we:

  • never do it during page initialization

  • do it at most once per Ajax request

Instead we update the tree of controls incrementally upon insert/delete and upon refresh.

The result is that the performance has in fact improved quite a bit for large forms, especially those that use <xforms:insert> and <xforms:delete> heavily. In particular, one of the main goals of this work was to make Form Builder faster. There is still work to do there, but performance has already improved quite a bit!

This is a good step forward: both the code and the processing model for the controls are now much clearer. We are also more XForms 1.1 compliant (in particular regarding repeat index updates). This also fixed along the way a few bugs related to insert/delete/repeat and UI events dispatching.

What's even better, this lays down a healthy foundation for further improvements, including at some point implementing a dependency mechanism for the controls which should yield even better performance, especially for large forms.

No comments:

Post a Comment