Your website could be a visually-stunning conversion machine, but its appearance and functionality won’t matter much if it takes too long to load. That’s because web users are increasingly impatient and their impatience is likely to continue to grow as tablet and mobile web usage skyrockets.

Unfortunately, the list of things that can cause users to flee a website is long, and in many instances, any one of them can be enough to turn a new customer into a lost opportunity.

Here are 20 of the worst items on that list.

1. Social sharing buttons

You want your users to ‘Like’ you on Facebook, but all those ‘Like’ and social sharing buttons that rely on external JavaScripts could be slowing your pages down significantly, particularly if you’re not loading them asynchronously. They can also make entire sites effectively useless, as some retailers learned the hard way earlier this year.

2. Ad network code

Ad revenue may be a boon for your bottom line, but ad network code, most of which is JavaScript-based, can make your pages slower. Some networks have implemented asynchronous delivery methods, which keep their JavaScripts from resource blocking, but many publishers still don’t use these.

3. Analytics tags

Analytics is immensely valuable, but as with social sharing buttons and ad network code, JavaScript-based analytics tags can be a detriment to page load times. The good news: many analytics providers offer asynchronous delivery. The bad news: many publishers use multiple analytics providers unnecessarily, adding inefficiency that’s entirely avoidable.

4. JavaScript-based functionality

JavaScript may be a necessary evil, particularly when it comes to ads and analytics. But plenty of sites employ JavaScript to provide functionality that is more efficiently provided server-side. One of the best examples: many sites use Disqus and Facebook for commenting, which is arguably the least efficient way of providing this basic functionality.

5. Unoptimized images

In many markets, fast internet connections may be the rule, not the exception, but that doesn’t mean that you shouldn’t maximize your image optimization. On an image-heavy page, a modest 5-10% reduction in file size per image can have a noticeable impact.

6. Bloated HTML

Getting your website to look right in all of the major browsers can be difficult; getting it to look right with efficient HTML markup can be even more difficult. Bloated HTML not only increases the amount of data that must be transferred to your users, it can have a significant impact on JavaScript performance when you’re manipulating the DOM.

7. CSS (crappy stylesheets)

Serving up efficient HTML is just as important as serving up efficient CSS. Unfortunately, crappy CSS is easily found on many sites. From the use of insanely expensive descendant selectors to cutting-edge CSS3 selectors that are as performance-harming as they are useful, there are plenty of ways your CSS can be slowing your pages down.

8. Amateur jQuery

jQuery is the most popular JavaScript library and for good reason: it makes building sophisticated JavaScript functionality a snap. But that doesn’t mean that everyone working with jQuery uses it efficiently. From event handlers to DOM manipulation, there are plenty of areas of jQuery where it’s easy for less experienced developers to wreak havoc.

9. Subpar DNS

Many hosting companies and domain name registrars offer free DNS, but you often get what you pay for. While it’s easy to take DNS for granted, you shouldn’t: in some instances DNS lookups may account for a significant portion of load time.

10. Too many domains

Hosting page components across a few domains will enable parallel downloads — a good thing — but if components of your page are hosted across too many domains, expect the time required to resolve DNS to have a negative impact on page loading times.

11. Header fail

If you don’t set a proper Expires or a Cache-Control header, you’re making it harder for users’ browsers to cache content locally. That means more requests for page components than is necessary.

12. Forgetting to Gzip it up

If your server isn’t configured to apply Gzip compression to HTML, CSS and JavaScript, you’re probably transferring a meaningfully larger amount of data than you have to.

13. Poorly-written server side code

You can do everything right when it comes to serving a rendered web page to a browser but if it takes forever to generate that web page because the web application behind your website is not performant, all of your efforts on the front end are for naught.

14. SQL queries from hell

If your web application isn’t blazing fast, there’s a decent chance that the problem might be a SQL query. From less-than-efficient joins to selects that involve large numbers of rows and no indexes, there are plenty of ways to poorly implement an SQL query.

15. Old versions of server-side software

From PHP to Java, popular server-side software on which many websites run has historically improved over time, so if you’re stuck on older versions, there’s a good chance you’re not taking advantage of performance gains that could be realized with little effort beyond an upgrade.

16. The wrong web server

Web servers such as Apache and IIS may be mature, viable options for hosting a website. But when it comes to scaling and speed, many of the world’s biggest sites turn to speed demons like Nginx and lighttpd — web servers you hosting company or sysadmin is probably less likely use by default.

17. Flash and Java

While the number of sites requiring the use of third party browser plug-ins like Flash and Java has decreased significantly over the years, Flash and Java aren’t dead and they still deserve a place on this list.

18. Shared web hosts

Thanks to the ever-decreasing cost of hardware, purchasing or leasing powerful servers no longer has to be a bank-breaker. But even so, many companies continue to host their websites in shared environments where somebody else’s poorly-performing application turns your application into a poorly-performing application. Worth noting: this also includes cloud environments, where disk IO in particular has been an area of concern.

19. Public networks for private data transfer

One of the first things many publishers do when they need to start to scale is to split their web and database servers. But many don’t connect the two using a private network, creating a huge bottleneck and point of failure that can easily impact website performance.

20. Inefficient server-side caching

Thanks to open source tools like Memcached and Redis, many publishers employ server-side caching, one of the most effective ways of improving web application performance. But not all cache implementations are created equal, and a poorly thought out cache invalidation strategy can render caching entirely useless.