A bit more than one year after the initial commit, Cutelyst makes it’s 5th release.
It’s now powering 3 commercial applications, the last one recently got into production and is the most complex of them, making heavy use of Grantlee and Cutelyst capabilities.
Speaking of Grantlee if you use it on Qt5 you will get hit by QTBUG-41469 which sadly doesn’t seems to get fixed in time for 5.4, but uWSGI can constrain your application resources so your server doesn’t go out of memory (worth the leak due to it’s usefulness).
Here is an overview since 0.4.0 release:
- Remove hardcode build setting to “Debug”, so that one can build with “Release” increasing performance up to 20% – https://gitorious.org/cutelyst/pages/CutelystPerformance
- Request::uploads() API was changed to be useful in real world, filling a QMap with the form field name as a key and in the proper order sent by the client
- Introduced a new C_ATTR macro which allows to have the same Perl attributs syntax like C_ATTR(method_name, :Path(/foo/bar) :Args)
- Added an Action class RoleACL which allows for doing authorization on control lists, making it easy to deny access to some resources if a user doesn’t match the needed role
- Added a RenderView class to make it easier to delegate the rendering to a view such as Grantlee
- Request class is now QObject class so that we can use it on Grantlee as ctx.request.something
- Make use of uWSGI ini (–init) configuration file to also configure the Cutelyst application
- Better docs
- As always some bugs were fixed
I’m very happy with the results, all those site performance tools like webpagetest give great scores for the apps, and I have started to work on translating Catalyst tutorial to Cutelyst, but I realize that I need Chained dispatcher working before that…
If you want to try it, I’ve made a hello-world app available today at https://gitorious.org/cutelyst/hello-world
This is yet another big step for Cutelyst, this release bring several important fixes to the last version, and stabilizes the API a bit more. So far I have successfully deployed 3 commercial applications build on top of Cutelyst + Grantlee5, and the result is great.
If you don’t know Cutelyst yet it’s a Web Framework allowing you to build web applications using Qt, for more info check (this blog and) our website/wiki which is still work in progress: http://cutelyst.org or join #cutelyst on freenode
This release brings the following improvements:
- Further speed improvements by simplifying several code paths and improving the dispatcher logic was an overall of 15% speedup
- Added an API to enable Grantlee template caching which greatly improve speed when using Grantlee templating
- Improved Query and Body parameters to allow for properly dealing with posts that contains the same field id multiple times
- REST API – Since 0.1.0 I was asked about supporting REST, and since I needed it for another project that I got involved the support landed early, the behavior is the same as Catalyst::Action::REST which allows you to easily add a foo_DELETE method which will get automatically called if the request method is DELETE for example.
- Added a Credential HTTP plugin to handle Basic HTTP (and in future Digest) authentication
- Added support for Authenticate and ProxyAuthenticate basic parsing on the Headers class
- Finished Context::uriFor() methods that allows for easily building an URI.
- Added a method to do a DNS PTR lookup to get the hostname of the client
- Added a C_PATH to more easily set the matching part of the path (thanks to Dan Vrátil)
- Fixed a few memory leaks
- Fixed a crash if the body wasn’t set
- Fixed uWSGI body buffered device
- And a lot of other misbehaviors found on post release…
For the next release I hope to be able to port the Catalyst tutorial to the Cutelyst equivalent, and finish a few other API changes.
As before the API is unstable but don’t be afraid of playing with it, most changes will simply require a rebuild of your application.
Have fun! https://gitorious.org/cutelyst/cutelyst/archive/0f28d7da9b04061fe80f7e9cf24a120250a02e02.tar.gz