Silverstripe CMS 6.1.0 Release Announcement
We're pleased to announce the release of Silverstripe CMS 6.1.0. This update offers a faster and smoother experience for all users, from developers to content editors.
Our main goal with this release was performance optimization, and we've made significant improvements across database queries, how assets are handled, and session management.
Improved Performance for Common CMS Operations
We've addressed frequent slowdowns within the CMS by reducing the number of database requests and improving the efficiency of those requests, improving CMS performances, particularly for large-scale projects or configurations where the web server and database are on separate servers.
The main focus has been on commonly used CMS operations, such as the page site tree, and the files section, by reducing how often we talk to the database.
This was achieved using a variety of methods, including by combining multiple single-ID queries into more efficient batch queries (WHERE "ID" IN (...)
) and temporarily caching results for the current HTTP request.
File System Performance Improvements
If you have thousands of files in one folder, you might have noticed things slowing down because of how the filesystem abstraction layer checks for files. We've introduced new ways to speed this up:
- Fewer Checks: We've cut down on unnecessary checks for empty folders.
- Quick Empty Check: The new
Filesystem::isEmpty()
method uses a super-fast check, often only needing to look at one file with the default local adapter. - Globbing Support: New interfaces perform file lookups using glob patterns, which dramatically speeds up finding image variants - a massive win for performance in large asset libraries.
New Tools for Data Performance & Control
For developers who love to fine-tune their applications, 6.1.0 brings new features for advanced data and query management.
Request-level Database Query Caching
You can now cache the results of DataList
and SQLSelect
queries for the duration of the current HTTP request. This is perfect for those custom queries that run multiple times during a single application request.
Just call ->setUseCache(true)
on your $DataList
or $SQLSelect
object to turn it on. This change also means older methods like DataObject::get_by_id()
are being phased out, encouraging you to use cached DataList
s instead.
Generated Column Support
The CMS now supports Generated Columns, where the column value is calculated and maintained by the database itself. This offers the following advantages:
- Sorting: Easily sort a GridField on a complex calculated field.
- Functional Indexes: Use complex expressions in indexes for faster filtering.
- Data Integrity: Values are always correct, even if updated directly via raw SQL.
Improved Indexing and Control
We've added several enhancements to give you more control and better default performance for your database indexes:
- Composite Indexes for
default_sort
: The ORM now creates a composite index for multi-field sorts, making it more efficient to sort large data sets. - Dropping Indexes: You can now explicitly drop old or unwanted indexes by setting the index value to
false
in your indexes configuration. - New Default Indexes: Several tables, including
Member
(for auth hashes) and join tables with adefault_sort
, now have new indexes to improve common operations.
Non-Blocking Session Handlers
The standard PHP session handler locks the session file, meaning multiple simultaneous requests from the same user have to wait for each other (including AJAX). We've introduced three new non-blocking session handlers to get rid of this delay:
Class name | Description |
---|---|
FileSessionHandler |
The new default, storing sessions in files without locking. |
CacheSessionHandler |
Stores sessions in a PSR-16 cache, such as Redis |
DatabaseSessionHandler |
Stores sessions in the database |
Previously, in order to get the benefits of non-blocking sessions you needed to use a module such as silverstripe/dynamodb
or silverstripe/hybridsessions
. Now you no longer need to use these modules - you can (and should) just use one of these new session handlers instead.
Password strength indicator
The ConfirmedPasswordField now gives you real-time, visual feedback on password strength as you type. This is active in the member edit forms and the "lost password" process when using the EntropyPasswordValidator
, providing a better, more secure user experience right out of the box.
Finally, we've updated our performance documentation with new sections and tips, making sure you have all the knowledge to get the most speed out of your Silverstripe CMS projects.
Keen to get your upgrade underway?
Talk to your Digital Agency or Developer about upgrading
Haven’t got a Developer or Agency? No problem! Browse the Silverstripe CMS Developer Network and filter by location to find a Silverstripe CMS Developer near you.
Or reach out to Silverstripe directly to upgrade your project.
Developers, check out our documentation
This release announcement does not cover the full details of what is included in the release. Be sure to review the full changelog before planning your next site upgrade.
Head to our Developer Docs to view the CMS 6.1 changelog.
Post your comment
Comments
No one has commented on this page yet.
RSS feed for comments on this page | RSS feed for all comments