It is almost Christmas but here I continue to work full time on the PHP Classes site to keep improving its services.
Just today I finished implementing a simple feature that has been in the to do list for quite some time.
- Site map
Once in a while I get messages from users that complain about the site navigation. Some times it is hard to understand what exactly the users are complaining about. Is it the pages layout? Is it the presentation style? Is the lack of links to the pages where they can find what they want?
In occasional conversations I noticed that some users even access the site frequently but they are not aware of certain site resources.
In the past I added a site FAQ page. It has helped reducing the need for providing human technical support.
I also added tips pages. Individual site tips also show in pop-up Windows the site newsletters and alert messages. These pages helped more people to be aware certain site features that are not so evident.
Still, this does not seem to be enough learn all the site features because not everybody knows about the tips pages, or is blocking pop-up windows, or does not want to receive the site newsletters.
So, to help users that want to learn about the site features, the site map page was created.
It gives an overview of the most important site resources that all users can benefit. Now, most of the site pages have a navigation link at the bottom to the site map page. I hope it is noticeable enough there.
- Faster e-mail delivery
As the time passes, more and more users become subscribers of the site and receive its newsletters. Currently the site is growing at a pace of about 8,000 subscribers a month. That is an overwhelming figure for a site dedicated to a niche community.
This is great because more and more people are attracted to the site and become potential contributors. However, it has a cost in terms of bandwidth that is used to serve the site pages and send the site newsletters.
A few months ago the site hosting provider has put a cap on the bandwidth that the site can use. That was meant to avoid causing traffic jams that could affect other clients of the hosting company. This caused major slowdown in the delivery of all messages sent by this site.
Some types of newsletters are sent to about 140,000 subscribers in one hour. This delays a lot all messages sent after those newsletters are queued. Most types of newsletter messages are not urgent, so they can wait the hours that they take to reach their subscribers.
However, the bandwidth cap was causing excessive waiting to users that want to get messages immediately, like password reset instructions, new class updates, forum thread update notifications, etc..
In the past I used in conjunction these two classes in direct delivery mode to avoid the delays imposed by long queues of messages to be delivered. They work really well, despite there is a myth that PHP is not suited for high scale jobs. I can only prove the opposite.
Nowadays, many mail servers use a technique called grey listing. That is meant to drop a great part of the unsolicited messages they get. For now this seems to be a good solution for that problem, but it causes other problems, even when sending newsletters to voluntary subscribers.
Since grey listing works by not accepting the first attempt to deliver a certain message to a certain user, it forces mail servers to resend the messages later, causing additional delays and at least double the bandwidth usage.
I have not found a solution to overcome the delays imposed to newsletter deliveries. However, I found a solution to avoid low priority messages, like the newsletters, delaying the delivery of more urgent messages.
The solution consists of setting up a second instance of the e-mail server software used by the site. The second instance only delivers low priority newsletters. This frees the main instance for delivering more important messages.
It worked perfectly because each instance has its own queue despite both instances are running in the same server hardware. It just took me changing one line of a PHP script switch the mail instance to use. So, if you ever face a similar problem, now you should know what to do.
As usual, feel free to send your comments and suggestions about these and other subjects to firstname.lastname@example.org . I always reply. Sometimes it takes some time though. If I did not reply to a message you may have sent in the past, that is most certainly due to message loss. So, feel free to resend messages that were not replied.
If I do not speak to you soon, I wish you a Merry Christmas and an Happy New Year 2006.