Performance of 3rd Party Content

February 17, 2010 5:17 pm | 55 Comments

Last month Jesse Robbins and I co-hosted the Velocity Summit. For the last three years we’ve gathered 30-40 industry gurus in the area of web performance and operations to help identify important topics to highlight at Velocity.

One session at this year’s Velocity Summit was called “Performance for the Masses.” It was led by Pat Meenan of WebPagetest.org fame. The discussion focused on the question “what improvements can we make in the world of web performance that will have a big impact for a lot of people?” The performance problems of ads came up, and everyone in the room got pretty excited. I might even say incensed.

From the beginning of my work in web performance back in 2004, web site owners have cited ads as the cause of web sites being slow. Embedding third party content in a web page is a performance challenge. In the best of situations, it’ll have some performance impact. In the worst of situations, third party content can make your page unusable. JavaScript errors, blocked rendering, HTTP timeouts, numerous resources, and just plain huge files can prevent users from seeing the main content of your page.

The problem of third party content is even more complicated for today’s web sites. In addition to ads, there are also widgets and analytics. I had a concall last month with Mashable to talk about performance. Their page has 40+ widgets including TweetMeme, Facebook, and Digg. Talk about a performance challenge! In the world of analytics the biggie is Google Analytics. That’s why I was so psyched to see them release their async snippet. Loading the GA code asynchronously reduces its impact on the main page’s performance.

During the Velocity Summit discussion, Alex Russell (Dojo, ChromeFrame) suggested creating a new tag that could wrap 3rd party code snippets and make them perform better. Alex called this the FRAG tag since it would be like creating a document fragment. The biggest performance gain this tag would support is asynchronous document.write. Many (most?) 3rd party snippets use document.write to modify the main page, which blocks the page from rendering and downloading further resources. Figuring out a way that the browser could continue to load the main page in parallel with 3rd party content containing document.write would be a big win. Jonas Sicking (Firefox), Alex, and I have had some follow-up discussion. We’ve also been looking at the proposed changes to IFRAME for HTML5, including the seamless and sandbox attributes. This might be a possible path, although we’d have to figure out how to make it degrade gracefully in older browsers, something a new tag would do nicely.

To help ground the discussion and make sure any proposal solves what’s wrong, I promised to review a dozen or so examples of popular ads, widgets, and analytics. Over the next month I’ll publish a series of posts that looks at specific code snippets. Some that I’m thinking about: Google AdSense, TweetMeme, Facebook Sharer, Digg, Meebo, Google Analytics, and Quantcast. Let me know what other popular 3rd party content snippets you think I should look at.

OK. Time to go look at snippets…

55 Responses to Performance of 3rd Party Content

  1. I think OpenX is gaining a lot of popularity recently. And their code is literally awful in terms of snippet size and usage of document.write.
    Clicky has some popularity but I think you know it better than I do. They are working on adding async to the script though.

  2. While I like the idea of a FRAG tag, why couldn’t some ad networks like AdSense support a more advanced integration.

    Rather than just a script tag that uses document.write, it works more like Google Analytics and allows some settings then it loads async. One of the settings could be an element it can innerHTML to write the actual ad. That would improve performance at a cost of slightly more difficult integration. For those who prefer performance and are wiling to make the extra effort, it’s a win.

  3. Thanks for all your posts lately! The impacts of third party content on website performance is definitely top on my list. It would also be nice to have a better solution for tracking tags as well. Since the customer doesn’t benefit from these tags, why make them wait? Can we have a one-way request that does not require a response to be handled at all by the browser? Fire and forget.

  4. How about the Facebook Connect libraries? Facebook is currently working on a revampted, open-source version of their JavaScript SDK, so now is probably the best time to ensure it’s heading off in the right direction.

    Old version (FeatureLoader.js) is documented here:
    http://developers.facebook.com/connect.php
    http://wiki.developers.facebook.com/index.php/Connect/Setting_Up_Your_Site

    New version is documented here:
    http://wiki.developers.facebook.com/index.php/JavaScript_SDK_%28Open_Source%29

  5. Thanks for the effort, that would be a great progress for the web as a whole. However maybe that this time the solution could not be technical if we want to support the browsers that wont change during the coming years ( namely : IEs)
    It would probably be a harder but better idea to discuss with the main ads providers ( widget makers are probably quicker to change) isnt it ?

  6. Steve, please add Google Friend Connect to your list of widgets to look into.

  7. yes, well, this is what happens wen people use technology without real knowledge on how it works. instead of fixing the problem (and removing document.write completely), frag tag is basically a hack. a way prologing bad coding practices. not a proper solution. i hope it never sees the light of day.

    if ad-suppliers use awful tech, web sites (the market) should choose other ad-suppliers – those that use better code and take care of performance problems.

  8. And FarmVille! Whenever a farm is loaded, my connection (admittedly only ADSL1) grinds to a halt … I don’t think they have any caching!

    “77 minus for” \:)

  9. ShareThis and AddThis are all over the place.

    I’d second taking a look at Google Friend Connect. I don’t have numbers, but it felt like an anchor on the one site I experimented with it as a feature.

  10. I really like this idea. Thanks for all your work. I’d like to see ClickTale, AddThis, and ShareThis. With some concrete data of how all of these third party widgets perform, I’ll now have something to point to when I’m asked to ” just add this widget, it’s easy, they even give you the code”.

  11. I think we should also strive to hold these 3rd party services accountable for their performance and uptime. Something as simple as keeping track of the reliability and historical performance of every major provider, and making that data public, would give website owners more data to help decide which of the many options to choose, and the possible issues they should be aware of.

  12. Not sure if they fit into your category but any of the big 3 analytics providers – WebTrends, Omniture and CoreMetrics. Doubt they rewrite the page (no idea) but they certainly lead to javscript errors, http/https warnings etc etc…

  13. I agree that 3rd party content is slowing down most of webpages today.
    If you want to test the impact of a 3rd party contents in a website, you can use webpagetest.org and filter the desired domains. I tested it and in some cases it can raise the load time x3

  14. Load and Blocking Javascript(labjs.com) is a great tool for managing third party js files.

  15. Not just AdSense, please look at ads served by Google Ad Manager

  16. Please consider including at least one or two of the large display ad networks, like advertising.com, drivePM, collective media, glam, etc. These have far greater page impact than share widgets and have very large reach. Google AdSense is high-performance and not very representative of what these other networks deliver both in terms of performance and content (e.g., each ad network usually pulls in multiple javascript files for a single ad, etc).

  17. Please evaluate the performance of Ad networks such as Valueclick, TribalFusion, Burst Direct, Casale Media. They are used by practically all medium size website publishers. These publishers don’t have the clout necessary to force the Ad networks to optimize their incredibly inefficient and antique ad serving platforms. They need bad publicity to get their act together and speed up the web.

  18. I think another general way of improving performance is to add more static HTML to all those dynamic widgets.

    Many of these widgets have some static look&feel and only need JS for getting current data.

    JS often used simply for “easy” integration and not as the only possible solution.

    I think changing widget distribution workflow would be a good idea.

    This will minimize this blocking behavior and will simply remove the need for document.write and even for most of DOM building, but the challenge is organizational and not technical and might be tougher.

  19. yes, Steve, 3rd party content sucks. We are going to add strong caching algorithms to WEBO Site SpeedUp to provide the maximum performance here – because all these widgets eat up to 80% of actual website load time. It’s awful.

    + few more widgets to investigate:
    wibiya.com
    disqus.com
    vodpod.com
    adage.com

  20. All good 3rd parties listed above i’d like to see.

    More:
    Ad serving – Doubleclick/Dart

    3rd parties:
    Echo commenting – http://js-kit.com/
    Add this – http://www.addthis.com/

  21. Definitely should take a look at Omniture’s SiteCatalyst product, which I had to contend with at my last job. It’s trickier since it’s not hosted 3rd party (you host the script yourself) but it’s fully obfuscated and you have no visibility into what it’s doing. Normally the file will be named some variation of s_code.js. Many of the most popular sites on the web use their analytics and to give you an idea of its impact, here is a measurement of apple.com with and without Omniture included with a delta of 1.8 seconds.

    http://www.webpagetest.org/result/100218_594V/
    http://www.webpagetest.org/result/100218_595F/

    Facebook Connect is costing our site about 1.9 seconds per page and AddThis is costing our home page 1 second.

  22. The entire Google suite needs improving: seriously Google – YOU want a faster Internet, you empower us with awesome (and free) platforms to profit us both, yet you lumber us with scripts and systems that PageLoad Speed Nightmares are made of.

    I’m seconding the votes for Google Asense and Google Ad Manager. I can handle Google Analytics since we’re living in an asyncronous gAnalytics World.

    ps- thanks for the great information this website provides.

  23. steve, I’m excited to see what you publish on this in the coming weeks. the release of our async ad code was a bit rocky at first. we ran into plenty of edge cases, but for a few days of pain it has already paid dividends for our advertisers and publishers.

  24. You make some great points. CA has just conducted the world’s first neurological experiment into consumers reactions as they encounter, interact with and are stressed by poorly performing online services http://www.ca.com/gb/content/campaign.aspx?cid=229165. This unique look at the problems confirmed that slowly loading pages are indeed the biggest turn-off; reinforcing the results of an earlier survey of 2500 consumers across Europe. It is worth highlighting that poor download speeds (and poorly performing sites in general) can be the result of a number of factors – so in addition to the points you make; monitoring the whole application or service delivery environment is the smart play. The results of the web stress experiment provide empirical evidence of the seriousness of this problem, a deep insight into the root causes of it, and a wake-up call for business to future-proof mission-critical services now.

  25. I am looking forward to seeing Adsense numbers, because it appears to be very slow to me.

    Google Analytics with and without async tracking, presume?

    I would also like to see Statcounter, and some of the other web stats providers.

  26. Ideally, almost all parts of “widgets” could be part of the site back end, and not need separate javascript execution or to make requests to all kinds of random other servers.

    The really tricky part of this is ads– the most accurate way for an ad provider to track ad views and clicks is for the ad to be loaded of their servers, not the publisher’s. If there was a secure and reliable way for a web publisher to include third party ads in their back end, they could have full control their performance.

  27. Please research the performance of Google Friend Connect members widget!

  28. Something I come across all the time are embedded YouTube videos and Google Maps.

    I’d also be interested in the performance of generic widgets like Google Gadgets. Obviously, it will differ depending on the gadget, but a baseline vanilla gadget would be illustrative.

    This is a great initiative. I think you’ve really hit a nerve here.

  29. Clickable.com is another one to add to the list. They are an SEM analytics tool with hosted JavaScript. No gzip, inappropriate cache headers, no minification, document.write.

  30. @Griego

    After looking at your apple example… Any idead why Apple sets these Response Headers:

    Cneonction: close
    nnCoection: close

    Especially, as they set additionally set a Header

    Connection: Keep-Alive

    ???

  31. Another vote for ShareThis

  32. Another vote for DART (doubleclick) and one for GetSatisfaction (the annoying Feedback tabs all over the place). And, of course, the native twitter widgets.

  33. Not mentioned already, but I would love to see the impact of the self-hosted version of WordPress.com Stats (http://wordpress.org/extend/plugins/stats/). It’s been giving me headaches with its high latency (for me) lately and since it’s not asynchronous (yet) it’s slowing down the page rendering.

    I would also love to see OpenX measurements with HORRIBLE load performance (but it’s just the best out there, so we stick with it)

    BackType’s Tweetcount button is another one which we use and which I’d like to see, but maybe I’ll switch to Tweetmeme again.

  34. One of the strong new performers I have tested is “Webo Site Speedup”. It deals well enough with the bloated load penalty of WordPress with it’s huge number of Javascript libraries. All it needs is better static asset support.
    Truth be told I still prefer a flat static website – compared to any CMS!

  35. Can you please do an analysis on intellitext by Vibrant Media (http://www.vibrantmedia.com/). I’m trying to convince my boss to take it off our site.

  36. My wish list: Typekit, Chartbeat (async), Tweetmeme.

  37. I would like to see AddToAny analyzed. It’s the fastest sharing widget but I’d like to see it compared to all the other widgets.

  38. This Amazon Widget is a nightmare from the point of view of dynamic loading and performance:

    https://widgets.amazon.com/Amazon-My-Favorites-Widget/

  39. Please take a look at baynote – http://www.baynote.com/

    We get some pretty odd results in performance tests and a lot of it seems to be because of baynote.

  40. Votes for AddThis, AddToAny and ShareThis.

    I wrote something about these at Social Bookmarking/Sharing Buttons that don’t suck.

  41. It would be interesting to see Site Catalyst since it’s a commercial analytics tool.

  42. Hey there. Listening to your presentation. Wanted to see if you looked into Eyeblaster? I use them to serve my ads for Peek (getpeek.com)

  43. Have you tried this with the new Facebook Like? I imagine it’s not as light as the Facebook Sharer, and would be timely.

  44. I love the chart you included and would really like to see the other two blog ad options AdvertiseSpace.com and BlogAds.com compare to BuySellAds.com. Any chance you would update that and let us know?

    Is that math question supposed to be a trick? As a human how do I know if won = one or not and good luck to the non-native English speakers figuring that one out? I don’t even know. I’m going to have to guess.

  45. Hai, this is great article. All website owners need to think about various 3rd party content like widgets and ads. Website often burdened with many ads and widgets which slowing website loading time. But depend from our main purpose of making website, if you focus to the good performance, you should think to reduce 3rd party content, but if only to built experiences, relationships, or having fun, 3rd party help a lot. thats my guess..

  46. I’ve just been looking at a site that uses DART(doubleclick). The three calls to doubleclick block the site for ~1s.

    Some googling didn’t turn up any tips on improving this. Do you know where I can find some info?

  47. Another kind of 3rd part components that have big impact on performance are social widgets. I’m doing some tests about it, you can find my first results here: http://ir.pe/2sgu.

  48. Is there a group or forum set up for this topic somewhere? I’ve had problems with analytics, affiliate tracking scripts, tracking pixels/beacons and would like to discuss possible solutions:

    GoggleAnalytics (not that bad)
    Omniture
    CommissionJunction
    YieldManager (big problem)

  49. Would love to see an analysis of Tynt.

  50. How about Foresee?

  51. There is a webcast with Cars.com and Keynote which discusses the impact of third party content on website performance and how you can identify which 3rd party content is slowing down your site.

    You can access it via this link:
    http://event.on24.com/r.htm?e=267018&s=1&k=6DEDF503651004D270131EBB8235B366&partnerref=ss

  52. This is an important topic. 3rd party isn’t in focus that much. but all “free” internet is because of 3rd party content = advertising financed. there are up to 12 redirects to publish one banner – all various more or less performing and more or less good quality of content.
    I have posted some sightings and thoughts in my blog.

    Thanks for raising this topic

  53. How about TradeDoubler ? i would like to see how it performs against others.

  54. While it’s far from the most elegant solution….

    document.write=function(a) {
    var dest=document.getElementById(‘inserthere’);
    dest.innerHTML=dest.innerHTML + a;
    }

  55. (whoops – the site has filtered some of my markup)…

    [div id=’inserthere’][/div]
    [script]

    document.write=function(a) {
    var dest=document.getElementById(‘inserthere’);
    dest.innerHTML=dest.innerHTML + a;
    }

    [/script]
    [script src=’slow_with_document.write.js’ defer][/script]