How to make a site really freaking fast
portent.com
portent.com
curl -w "\nTotal time: %{time_total}\nTime pretransfer: %{time_pretransfer}\nTime starttransfer: %{time_starttransfer}\nSize download: %{size_download}\nSpeed download: % {speed_download}\n" http://www.portent.com/
Total time: 2.629
Time pretransfer: 0.375
Time starttransfer: 1.400
Size download: 32730
Speed download: 12449.000
Ok. Not bad. Backend seems to be fine. But then I did the profiling in chrome. Some cdn requests are well past 25 seconds in the timeline. For a user, the site load takes more than 25 seconds. Your cdn is the bottleneck - you should work on fixing the cdn first.curl -w "\nTotal time: %{time_total}\nTime pretransfer: %{time_pretransfer}\nTime starttransfer: %{time_starttransfer}\nSize download: %{size_download}\n Speed download: %{speed_download}" www.example.com
So a syntax error is now a "crash?". Web developers...
Why go ghetto? You should be doing something like "/sbin/service httpd restart".
For this reason, there's zero excuse for ever having an Apache install crash from a typo.
service httpd configtest
I.e run the proper init script (which might also do other checks), not just test the apache config, as you wouldn't also just start apache with apachectl.Even if you have your own version of apache compiled, you should still provide your own init script, and write in in the standard service way.
The 'service' equivalent is: service httpd configtest
> Why go ghetto?
What does 'going ghetto' mean exactly?
Yep, typo-ed it.
>What does 'going ghetto' mean exactly?
The slang meaning of the term in this case: a low level, jury rigged solution.
Note that systemd makes it a lot cleaner and simpler to supply your own service definitions, so eventually your intuition will probably be right, and systemctl will be the proper interface to everything.
There are still quite a few external scripts loading in the head that have the potential to block the page. The waterfall diagram from a test at webpagetest.org [1] shows a pretty dramatic example. It's not hard to load the Google PlusOne script async [2], and most of the other social network widgets can be lazy-loaded the same way.
[1] http://i.imgur.com/niDK1.png http://i.imgur.com/MLdj8.png [2] https://developers.google.com/+/plugins/+1button/#async-load
- Write compact efficient CSS (arguably the current CSS file is far too big)
- Combine all CSS files
- Don't use question marks in a resource URL (.css?v=234)
- Write valid compact efficient HTML (duplicate meta tags like: ICBM, unnecessary tags like Google verify, inline CSS, depricated HTML: align="left")
- Dont use spacer divs (div clear="all" style="padding-top: 5px") for a better render flow
- Delay loading javascript to the body of your site.
- Combine javascript files
- Compress javascript and CSS files.
- asynchronous loading of web fonts and analytics code.
- Load all CSS files before JS files.
For the unoptimized 1000 images you can use a Wordpress plugin or roll your own batch script.
why? if you get the cache headers right, this is the way to go to let it cache forever. that's a nice thing.
(i don't really get why they do not use a caching proxy in front, there even is a wordpress plugin for varnish, so wordpress behind a caching proxy does not suck that much.)
unfortunately some suggestions are not possible with wordpress, so that alone could be a thing worth replacing.
one funny thing pagespeed tells me is that google's own analytics ga.js needs a longer expire time than 2hrs, they should fix that especially for scripts loaded from common cdns (especially their own) since web authors have no control over this.
That cool curl command against rakeroutes.com:
Total time: 0.439
Time pretransfer: 0.175
Time starttransfer: 0.270
Size download: 17506
Speed download: 39888.000
That's off a regular ol' shared Dreamhost account.Aaaaand I think we're done here.
We've had situations where a site appeared broken to a subset of end users for weeks because we tweaked the look and feel, and the new logo (different size and look) was named logo.png just like the old logo...which had an "expires" header of about one month.
So even after clearing all local and server-side caches, some users were getting our new HTML with our old logo horribly jammed into it--dutifully being served from some unknown cache somewhere until it hit the "expires" time.