Thoughts On BlogEngine and Arthemia Pro Theme!
After spending several weeks on BlogEngine, I can honestly say that it a usable engine that I really enjoy working with. However, BlogEngine is showing its age and its history a bit much. IMHO, it should be rewritten for .NET Framework 4.0 from the ground up. IMHO, one of the best themes for BlogEngine, Arthemia Pro has a great look to it, but is a port from another engine and has significant issues with the code. This article will discuss my findings when working with BlogEngine and the Arthemia Pro Theme. There will be no order to the various areas.
Arthemia Pro Theme
This blog uses the Arthemia Pro Theme for BlogEngine. Originally I picked a port of the Arthemia theme for WordPress from Onesoft. This theme looks OK, but was riddled with bugs. So I moved to the Arthemia Pro theme. Unfortunately that theme leveraged the same Arthemia theme as its base and didn’t correct any of the bugs. In fact, it probably introduced a few. Thanks to Visual Studio 2010 and Intelltrace and I was able to quickly eradicate several bugs with this theme. Most of them were links pointing to the wrong path for some .js and image files. However, there were some long time bugs like the headline and features not showing up that was just painful to troubleshoot. Thanks again Intellitrace.
The Arthemia and Arthemia Pro themes tend to use code as a mechanism for updating things like ‘About Me’. My hope is to change this to be more inline with what people expect these days. This should be some form of editable widget or web part.
Asynchronous Work
BlogEngine likes to do a ton of asynchronous work. For example, it has an AutoSave feature in the admin pages and a Ping Service notification feature.
SendPing Extension
First, let me tackle the Ping Service notifications. Here is an actual block of code. Notice it goes to sleep? Wow! I have no words for this.
System.Threading.Thread.Sleep(2000); // Ping the specified ping services. BlogEngine.Core.Ping.PingService.Send(itemUrl);
One other thing, if this feature were to fail, it will never try again. I call this the ‘Best Effort’ approach. Unfortunately its best effort is not so good. If it fails, an exception will occur and then be trapped.
AutoSave
Every blog needs this feature! Unfortunately it sends stuff every 5 seconds. Turning this down a few notches requires code though. I set mine to every 60 seconds. Also, this feature integrates with the Ping Services to send updates whenever a new blog is published.
Database Access
OMG! BlogEngine is the Chatty Cathy of blogging engines! This thing goes to the database a gazillion times at startup. It even writes back to the database at startup! Why would it ever need to do this?
BlogEngine uses a combination of browser, full page, and data caching to achieve any type of acceptable performance. This is one of the best aspects of this engine! However, I am concerned of the performance over time when you have a large number of posts. Does startup performance degrade? What happens if you have a popular blog and it has tons of page views and everything is always kept in-memory? Better yet, what about moving to a cloud architecture where every database transactions may cost money?
Caching should not be used as a bandaid to a poor performing data access layer. IMHO, there needs to be an overhaul of the data access layer.