It may be no surprise to any of my long-term visitors, but I've decided to perform a deep overhaul of my website. Based partly on my recent introduction to model-view-control frameworks and partly on research into web caching and optimization, I've spent a good chunk of time analyzing my current and future website functions in the hopes of streamlining the backend code and optimizing the frontend. There are several goals that I have in mind for this overhaul, most of which will stretch my current programming skills.
The idea behind this sort of programming is breaking everything up into separate, reusable objects. All requests to the website are directed to a primary router, which interprets the request and pulls a controller to handle the page. A controller is a set of instructions based on the page type (example: home page, blog post pages, etc) that sets variables for the final page. The controller may talk to a model, which is the 'logic' for the site (usually a database object), and pull additional content for the page. Finally, views are included and passed variables to display a unique page per URL.
The benefits for this system are numerous - once the system is setup, that is. One database model can handle all SQL commands on separate pages and separate websites. The router allows universal control over all of the sites and changes are immediately felt on all sites. I've used similar logic with configuration functions and .htaccess mod rewrite, but nothing on a scale that spanned my subdomains. By implementing a universal model-view-controller system to handle all jacobemerick.com websites, I can start reusing standard logic and content easier and make large updates with little effort.
Optimization is one area that my website is severely lacking in. There are no cache-control methods, minification, or compression scripts for my files. After doing a bit of research, I've found a number of improvements that I can make for my assets and primary content.
With a complete overhaul in the works, I can start creating subdomains specifically for images, scripts, and stylesheets. This will allow all three separate types of content to be downloaded independently from the html content. Based on the content type, I can then apply different minification and compression techniques on them separately, further decreasing the bandwidth usage and speed. I also have a technique in place to dynamically create and cache these content types, but it's a work in progress, so I'll probably discuss that topic later.
Unified User Experience
After implementing comments on my blogs, I realized that I had just duplicated a feature on my waterfalls page (the comment section) without connecting any of the user information. This was not only a duplication of code and content problem: I had just created two similar, but different, user registration and handling systems to confuse potential commenters.
By creating a unified user system, I can easily cross over information for these commenting systems - after registering to comment on the blog, you can easily comment on the waterfalls site with the same credentials. I can then take this a step further with a separate user area that allows commenters to handle their notifications and view the past comments on the site. While there are only two interactive portions of the site right now, the waterfalls and blog comment forms, I plan to add some more interactivity with future projects where this will come in handy.
I'm planning on tweaking the frontend during the overhaul of the backend. Some of these changes will concern optimization - CSS sprites, caching, etc, but others may be much more obvious. My portfolio site is a bit of a mess, more of a relic from a previous website design then a functional web page, and needs a serious redesign and update. The waterfalls website is painfully independent of the hiking map functionality and open data systems, something I hope to remedy in the future. Sharing of data across the subdomains in general will be important, and I hope to start consolidating databases and data handling to allow each subdomain to act as a different portal for user interaction with the content whether then be a totally separate entity, as they are now.
The total project will last at least a month with my planned method involving a gradual rollout of an overhauled site every week. This may be too optimistic for the sites that need more work, like the waterfalls site, especially since I'm still working on the core model-view-controller framework. The new system is hosted in separate folders, so the current sites will not be affected until its replacement is launched (which will probably include a frantic debugging process). I can't wait until it's completed, as it promises easier website development in future, and I have a ton of ideas for this site.