Monday, September 17th, 2007
One of the enduring criticisms of ZK, the server-side Ajax framework, has been against its perceived slow performance. Critics have observed, and supporters have conceded, that applications written with ZK seem a touch slow. So it’s no surprise that a major focus of the latest major release has been improved performance. The ZK team found two major bottlenecks in performance testing:
After a series of stress test and reviewing the kernel code, we found out 2 bottlenecks on ZK 2.4.1 and fixed them in ZK 3.0 RC.
- The executing time is too expensive when rendering components. ZK uses templates to render components, and the EL is generally used in templates to simplify the variable access and templete maintenance. However, when the concurrent access rises to a large number, the overhead on rendering component with EL is too heavy.
- Threads spend too much time on waiting the synchronization when many threads access to the same cache under current cache mechanism.
ZK 3.0 RC solves these 2 bottlenecks by using the renderer class and new cache mechanism. The test result shows ZK 3.0 RC is four ~ five times faster than ZK 2.4.1.
I haven’t validated these performance figures myself, but an initial comparison between some demo applications confirms a much more responsive user experience.
ZK 3.0 RC has also added a number of other new features:
- Server push is enabled which allows you to update clientâ€™s information actively and the usage is simple and intuitive.
- Add forward property of components to forward event without programming.
- New expression of annotation is ease of use, and easy-to-read.
- TreeModel is introduced which simplifies the job of Tree rendering.
- Flash components allow you to play audio and video files. (including youtube clip)
- Native namespace is implemented to speed up the performance while integration with HTML.
- To speed up the performance of ZK, EL evaluator is pluggable, and a new way to render ZK components is introduced.
- More integration with other frameworks, ZK has integrated with JSF, JSP, and Ext-JS.
Server push was already supported in ZK through use of the timer component, but the enhancements make it even easier (note: we’re not talking comet, but rather client polling). Even more exciting for me is the dynamic loading of ZUML (the XML-based markup language for specifying ZK interfaces) pages dynamically from sources such as a database. That’s very helpful if you want to allow non-developers to deploy interface changes without having to spit out
As usual, the ZK folks have done a good job documenting the changes and additions. It’s too early to tell if 3.0 will solve all of ZK’s previous shortcomings, but ZK is well on it’s way to becoming my favorite server-side framework.
Posted by Dietrich Kappe at 8:27 am