The new Handsontable 8 is now available
The 8th version of Handsontable is now out! It comes with plenty of improvements and a new index management engine.
We redesigned the internal data flow, which determines the flawlessness and speed of the core engine and plugins. Thanks to the new architecture, the library is now less error-prone and provides a solid foundation for future developments.
Along the way, we solved 200+ issues, added 1300+ tests, and virtualized hidden columns and rows which boosted performance, especially in cases where there are plenty of them.
Even though the functionality has been extended by new methods and hooks, we added zero new features. New features are great, but no matter how hard you try, it’s almost impossible to make them bug-free. That is why we decided to take a break from the feature creep and focus solely on improving the existing features.
This is by far the most important change and the main advantage of the new version. The new management system for translating the physical indexes to visual indexes stabilizes the way that plugins exchange information about the order and states of the records in the data set.
As the developer, you now have more power over what is going on inside the library. Since the dependency of callbacks was removed, the plugins are more independent and easier to use. CRUD and move operations are also more predictable, especially in complex use cases.
We added the setSourceDataAtCell method and modifySourceData hooks, and thanks to that modifying the data by reference is no longer necessary.
The ObserveChanges plugin is now deprecated and we plan to remove it in the future. It performs a deep comparison of two objects in a loop and attempts to find the differences between them. However, this operation is inefficient and prone to errors. The same results can be now achieved by using the API methods, which are much more efficient.
Apart from stability, the new version has been tested dozens of times by the QA team to be sure everything works correctly. The release was split into two beta versions to double-check the functionality. As a side effect, the whole testing process has become even more efficient and concise. We made a huge effort to cover the changes with test cases. As a result, the overall number of tests rose by more than 1300.
When columns or rows are hidden, they are not physically rendered. This applies to several plugins that can “hide” rows and columns, namely:
- Column filters
- Hide/show columns
- Hide/show rows
- Trim columns
- Trim rows
This change has an impact on performance, and can be observed on big data sets with lots of hidden rows and columns.
The actual indexes are stored in one place. Plugins no longer exchange information about index values. As a result, finding and reading data is faster and stable.
Less breaking changes in the future
Some of the links between hooks have been removed for good, and that single change impacts any operation within rows or columns, and also in some plugins. The new solution is more steady, and does not require any workarounds to function properly.
We plan to slowly cease the support for Internet Explorer and from now on it has a deprecated status. Issues that happen on IE require very specific fixes which are time-consuming.
A lot of issues fixed
We fixed more than 200 issues and that includes solbed problems with indexes, hiding rows and columns, filtering, sorting, and unexpected, and unexpected behavior in edge cases.
Shorter release cycles
As of today, we’re getting back to our regular ~6-8 week release cycle. The next two releases are all about boosting performance and solving even more issues. The new architecture provides a solid foundation for quicker and easier resolutions and we can’t wait to make use of it!
Also, from now on we’ll be focusing more on the requirements of developers using the three most popular frameworks – Angular, React, and Vue. That will include more improvements to the documentation, and the ecosystem around Handsontable.
Do you want to take the new version for a spin?