I didn't see the option for CDN (or Server Relocation).
It doesn't matter whether or not you use techniques like Caching and Minification, if the ping between your server and your clients exceeds 250ms, your users will perceive slowness, and it is absolutely easy to reach those pings with a Mobile connection.
So the first option should be to pick a server at the nearest location from the majority of your users, or pick a CDN which covers where most of your audience is located, most CDNs also offer caching and minification with their most basic plan.
After having a CDN sorted out, the next option is Caching, especially if you do more READ than WRITE requests, most of the advantages of Caching are perceived when you get peaks of traffic, so rather than improving the experience of a specific user, you are improving the experience of all your users as a whole.
If you do more WRITE than READ requests, you should probably start exploring distributed databases.
The use of modern CSS and markup should be your last resort with existing projects, since that means to refactor them, but it should be your first option with new projects, since you get client-side optimizations for free just by writing modern code.
Also, the use of ASYNC/DEFER statements depends solely on your project, for ex. you may depend on an external API like Google Maps, so wouldn't be able to use ASYNC, and the same rule as before applies: It should be your first option with new projects, but your last resort with old projects, unless you know in advance that a non-critical script like Facebook's Share Button is slowing down your website.
As with everything else in tech...especially on the web, we probably need some qualifying info to really answer this question though right?
How large of a site are we theoretically talking about?
Are we talking about a very basic HTML / CSS only site or a dynamic CMS site like Wordpress, Joomla, Drupal, etc that uses a DB on the back end?
Is it a very media heavy site?
What kind of server is the site running on?
We have to ask these questions because...
Very small sites that have no DB on the back end and are only running HTML / CSS on a decently sized server (even shared) will most likely not need much optimization beyond image sizing, CSS / JS combining and minifying, and possibly some htaccess settings for headers and what not to get a pretty fast load experience.
Any site that runs a DB on the back end will also then need to be optimized differently since very often the most costly thing to website load time will be calls to your server for files and calls to your database. Caching can be a huge help here. Also, setting expires headers can reduce those calls for a specified time.
Media heavy sites should take advantage of a CDN. They are pretty much everywhere and very easy to use these days. Serving video or large images from a CDN will make your load time much better under normal circumstances.
You can almost always make your site(s) run faster by throwing more resources at it (them) as well. Add memory and cpu, and things generally speed up. However, this is often the most costly solution. It is important to include this in the speed optimization equation though. Adding a bit more resources while you're doing the rest of the optimization can be a huge boost when combined.
Lots to think about. This really only touches the surface...but that's what makes each situation different...and fun!
Firs of all caching is a nice thing to have in mind, by other way minimization of js/css it's a very important things. For this reason i think if you cach and minimize you have a better website.
Which do you think is the most effective...
Theresa
Front End Web Developer (JS/HTML/CSS @ JAVA) : Predict the future by inventing it
Thanks to all 94 votes: everyone who participated in the poll! Caching was upvoted as the biggest contributor to a fast loading website. Please feel free to share more articles and experiences here.