Progressive Enhancement is a web development technique or pattern. The basic premise is that a web site should be accessible to all users and then to overlay additional functionality based on the client’s capability.
Progressive enhancement can be used in a number of ways. Here are a few examples:
- Segmentation by freshness
- Included function
The term Segmentation by freshness was coined by Martin Fowler to describe how progressive enhancement can be used to partition content by how fresh or how frequently it is updated.
Many web sites tailor their functionality based on how well you are known to the site. An anonymous user can perhaps browse content but not contribute to the site. To contribute content you need to log in perhaps using a username and password.</p>
To provide this feature pages might include a link to the login form
<a href='login'>Login</a>. In the basic implementation this is a
complete in terms of functionality. The user clicks on the link, is
presented with the login form, which they fill in and submit. If the
credentials are correct they are redirected back to the page
containing the link - but are now authenticated and have access to
Although functional just providing a link to login seems a little light. Most web sites designers would prefer to include the login feature directly in the page and not require users to navigate to another page.
Including the login form in every page is both time consuming and leads to maintainance problems later when perhaps an additional ‘remember me’ feature is required. One option is to do some sort of server side include where the contents of the form is included by a server side statement and the page is aggregated before the content is returned to the client.
On the server side things are simpler too. All included content is delivered as web content over HTTP. For each piece of included content an additional request is required but this request does not slow down the rendering of the main page because it is loaded later (although the delay may be imperceptible to the user).