<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The BrowserMob Blog &#187; Uncategorized</title>
	<atom:link href="http://blog.browsermob.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.browsermob.com</link>
	<description>All about browsers, performance testing, and load testing</description>
	<lastBuildDate>Tue, 13 Jul 2010 15:31:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Advanced handling of page timeouts in Selenium</title>
		<link>http://blog.browsermob.com/2010/06/advanced-handling-of-page-timeouts-in-selenium/</link>
		<comments>http://blog.browsermob.com/2010/06/advanced-handling-of-page-timeouts-in-selenium/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 21:44:08 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[Timeouts]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2010/06/advanced-handling-of-page-timeouts-in-selenium/</guid>
		<description><![CDATA[
Because both our load testing and website monitoring services are based on Selenium, we have a unique ability to measure the performance of things like page load times, AJAX timings, and other in-browser interactions.


Selenium has both a setTimeout command and a waitForPageToLoad command. Both can be given a timeout value, which will control how long [...]]]></description>
			<content:encoded><![CDATA[<p>
Because both our <a href="http://browsermob.com/website-load-testing">load testing</a> and <a href="http://browsermob.com/website-monitoring">website monitoring</a> services are based on Selenium, we have a unique ability to measure the performance of things like page load times, AJAX timings, and other in-browser interactions.
</p>
<p>
Selenium has both a setTimeout command and a waitForPageToLoad command. Both can be given a timeout value, which will control how long Selenium waits for a given page to load or element to appear. When it comes to using our services, most people stick with the default time of 30 seconds. If the timeout is reached, an error is thrown, the script aborts, and the transaction is recorded.
</p>
<p>
However, sometimes people want to know when pages take more than X seconds to load, but don&#8217;t want to necessarily interrupt the flow of the script. In fact, just last week we got this request from a customer:
</p>
<blockquote style="padding: 10px; border: 1px solid #ddd; background-color: #eee"><p>
Ability to trigger an alert based on a set threshold (by the user) – not using the timeout.  This basically came from the performance issues we are experiencing.  Here’s the scenario:</p>
<ul>
<li>We have a specific page that takes 2+ minutes to load.</li>
<li>The page load timeout in the Selenium script was set to 60s.</li>
<li>BMob properly reported the &#8220;timeout&#8221; error but when this error happens, BMob quits the script.</li>
<li>This is not ideal for me since I want to still be able to see how long the page takes to load.</li>
<li>Increasing the page load timeout for the page in question works, but now I don’t have a way (that I know of) to still trigger an alert after 60s.</li>
</ul>
<p>I should be able to set a threshold for any page I choose that would then send a notification alert.
</p></blockquote>
<p>
In other words, this customer wanted for a way to still report a transaction as a failure and receive an alert, but also still allow the script to continue. Fortunately, our support for JavaScript as a scripting language provides the answer:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> timeout <span style="color: #339933;">=</span> <span style="color: #CC0000;">90000</span><span style="color: #339933;">;</span>
...
<span style="color: #006600; font-style: italic;">// start of script</span>
...
<span style="color: #003366; font-weight: bold;">var</span> start <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
selenium.<span style="color: #660066;">waitForPageToLoad</span><span style="color: #009900;">&#40;</span>timeout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> end <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
...
<span style="color: #006600; font-style: italic;">// rest of script</span>
...
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>end <span style="color: #339933;">-</span> start<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">45000</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">throw</span> <span style="color: #3366CC;">&quot;An important page took longer than 45 seconds to load&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>
What this script does is sets the timeout to a very long amount (1.5 minutes) but will still report an error if a specific page takes longer than 45 seconds. This allows the remainder of the script to execute even when the page takes more than a specified 45-second threshold.
</p>
<p>
The only problem with this script is that if the page takes longer than 90 seconds, then the rest of the script will still not run because waitForPageToLoad will throw an exception. You can solve that too with a little code:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> start <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    selenium.<span style="color: #660066;">waitForPageToLoad</span><span style="color: #009900;">&#40;</span>timeout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">// this will happen after 90 seconds</span>
    <span style="color: #006600; font-style: italic;">// todo: recover and send the browser to the the next URL</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">var</span> end <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getTime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
The only thing that is important to remember with this use of try/catch is that you&#8217;ll need to properly recover from the error. Simply catching the error and trying to continue may not work. For example, if the next Selenium command requires clicking on a button that should have loaded from the last page, there may be no way to recover. However, if the next step is simply visiting a new URL, you could possibly get away with a simple open() command in the catch block.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Advanced+handling+of+page+timeouts+in+Selenium+http://yp2im.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Advanced+handling+of+page+timeouts+in+Selenium+http://yp2im.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2010/06/advanced-handling-of-page-timeouts-in-selenium/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>dynaTrace shows how to track AJAX performance with Selenium</title>
		<link>http://blog.browsermob.com/2010/05/dynatrace-shows-how-to-track-ajax-performance-with-selenium/</link>
		<comments>http://blog.browsermob.com/2010/05/dynatrace-shows-how-to-track-ajax-performance-with-selenium/#comments</comments>
		<pubDate>Tue, 25 May 2010 18:26:24 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dynaTrace]]></category>
		<category><![CDATA[Selenium]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2010/05/dynatrace-shows-how-to-track-ajax-performance-with-selenium/</guid>
		<description><![CDATA[
dynaTrace just posted a really nice tutorial showing how to track client-side performance (JavaScript, DOM, render times, etc) automatically using Selenium. They do this by using their super-cool free AJAX edition of their product.
 Tweet This Post&#160; ]]></description>
			<content:encoded><![CDATA[<p>
dynaTrace just posted a <a href="http://blog.dynatrace.com/2010/05/21/how-to-use-your-selenium-tests-for-automated-javascriptajax-performance-analysis/">really nice tutorial</a> showing how to track client-side performance (JavaScript, DOM, render times, etc) automatically using Selenium. They do this by using their super-cool <a href="http://ajax.dynatrace.com/">free AJAX edition</a> of their product.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+dynaTrace+shows+how+to+track+AJAX+performance+with+Selenium+http://xc64g.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+dynaTrace+shows+how+to+track+AJAX+performance+with+Selenium+http://xc64g.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2010/05/dynatrace-shows-how-to-track-ajax-performance-with-selenium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcement: New free plans and lower pricing</title>
		<link>http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/</link>
		<comments>http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 23:49:55 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Load Testing]]></category>
		<category><![CDATA[Non-profit]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[Pricing]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/</guid>
		<description><![CDATA[
Today we launched a brand new pricing structure for both our website load testing and website monitoring service. When coming up with new pricing for both our products, we set out do to four things:


Make it simpler and easier for anyone to quickly understand.
Make our advanced products (ie: our real browser services) more affordable.
Give a [...]]]></description>
			<content:encoded><![CDATA[<p>
Today we launched a brand new pricing structure for both our <a href="http://browsermob.com/load-testing">website load testing</a> and <a href="http://browsermob.com/monitoring">website monitoring</a> service. When coming up with new pricing for both our products, we set out do to four things:
</p>
<ol>
<li>Make it simpler and easier for anyone to quickly understand.</li>
<li>Make our advanced products (ie: our real browser services) more affordable.</li>
<li>Give a better value by reducing our pricing across the board.</li>
<li>Provide a <em>free offering</em> that never expires.</li>
</ol>
<h2>Load Testing Pricing</h2>
<p>
Our load testing service now has two types of fees:
</p>
<ul>
<li>A base fee to use the software.</li>
<li>A &#8220;cloud fee&#8221; for each test that gets run.</li>
</ul>
<p>
The base fee is where BrowserMob makes money as a company. We offer a weekly, monthly, or annual price &#8211; with significant discounts for annual purchases. We also offer three levels of service: Basic, Advanced, and Professional. Each package includes enough &#8220;cloud dollars&#8221; (see below) to complete most testing projects.
</p>
<p>
The cloud fee represents our raw costs to run in the cloud. This means after you pay the base fee, you are free to run as many tests as you&#8217;d like with no extra markup. For example, $15 in &#8220;cloud dollars&#8221; gets you a 100 browser test or a 1,000 virtual user test.
</p>
<p>
The most exciting thing about this model is that if your tests require no more than 25 browsers or 100 virtual users, <em>there is no base fee</em>. This means that after you use up the complementary 10 cloud dollars with each signup, you can keep using the service by simply covering the raw fees incurred with each test.
</p>
<p>
We&#8217;re also excited to offer any of our Basic, Advanced, or Professional packages to non-profits and open source organizations <em>free of charge</em>.
</p>
<p>
You can review all the load testing packages <a href="http://browsermob.com/load-testing">here</a>.
</p>
<h2>Monitoring Pricing</h2>
<p>
Our monitoring pricing is now based on a very predictable number of &#8220;monthly page views&#8221;. For example, if you want to check a page every 15 minutes from one location, you would require 2,880 page views:
</p>

<div class="wp_syntax"><div class="code"><pre class="none" style="font-family:monospace;">2,880 = 1 page view x 60 min / 15 min x 24 hrs x 30 days</pre></div></div>

<p>
The best part about this new model is that if you need 3,000 or fewer monthly page views, the service is 100% free. For more frequent monitoring, our monthly plans start at $49. You can review the monitoring pricing <a href="http://browsermob.com/pricing">here</a>.
</p>
<h2>Existing Customers</h2>
<p>
We will be posting a follow-up Q&amp;A for all of our existing customers shortly. It will explain the transition process and what options are available. At a high level, we expect 99% of our customers to immediately get a better value. However, if any existing customer prefers to stick with the old model, we will gladly honor it.
</p>
<p>
<strong>Update:</strong> Please see our <a href="http://blog.browsermob.com/2010/02/new-pricing-faq-for-existing-customers/">FAQ entry</a> that discusses the changes for existing customers.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Announcement%3A+New+free+plans+and+lower+pricing+http://ai6pm.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Announcement%3A+New+free+plans+and+lower+pricing+http://ai6pm.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2010/02/announcement-new-free-plans-and-lower-pricing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google search results to favor sites with better performance?</title>
		<link>http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/</link>
		<comments>http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 18:07:31 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Public DNS]]></category>
		<category><![CDATA[Page Speed]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[YSlow]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/</guid>
		<description><![CDATA[
Over the last few months Google has continued to focus on performance as a key message to developers. From their &#8220;Let&#8217;s make the web faster&#8221; initiative on Google Code, to their public DNS service, to the constant focus on performance by their Chief Performance guru, Steve Souders, it&#8217;s clear that Google wants people to have [...]]]></description>
			<content:encoded><![CDATA[<p>
Over the last few months Google has continued to focus on performance as a key message to developers. From their <a href="http://code.google.com/speed/">&#8220;Let&#8217;s make the web faster&#8221;</a> initiative on Google Code, to their <a href="http://blog.browsermob.com/2009/12/google-public-dns-vs-opendns-vs-your-isps-dns-measuring-performance/">public DNS service</a>, to the constant focus on performance by their Chief Performance guru, <a href="http://www.stevesouders.com/blog/2010/01/15/jquery-14-performance/">Steve Souders</a>, it&#8217;s clear that Google wants people to have a faster experience on the web.
</p>
<p>
This makes sense: the faster the web, the more people will use it and be more likely to search and click on ads. In fact, in an <a href="http://videos.webpronews.com/2009/11/13/matt-cutts-interview/">interview with Web Pro News</a> in November last year, Matt Cutts (head of Google&#8217;s webspam team) casually mentioned that in 2010 Google may give search ranking preference to sites that load faster. <a href="http://gigaom.com/2009/11/22/should-web-page-speed-influence-google-pagerank/">Om Malik</a> went on to discuss whether this was a good idea or not.
</p>
<p>
More recently, Google opened up a new &#8220;Labs&#8221; feature in their <a href="https://www.google.com/webmasters/tools/">Google Webmaster Tools</a> that actually shows you the performance of your site as measured by the Googlebot. This move is further evidence that Google is indeed going to shift to making performance part of it&#8217;s ranking routine if it hasn&#8217;t already. See a screenshot of what you can expect to see:
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2010/01/201001190952.jpg" width="480" height="194" alt="201001190952.jpg" /></p>
<p>
In addition to the above chart, there is also some basic analysis and recommendations on how to improve performance, similar to what <a href="http://code.google.com/speed/page-speed/">Page Speed</a> and <a href="http://developer.yahoo.com/yslow/">YSlow</a> recommend. While it is a good start and provides the clearest view of how Google perceives your site&#8217;s performance, the data is still rather basic.
</p>
<p>
As such, when measuring and optimizing page load times we&#8217;d still recommend you work with a more in-depth tool such as <a href="http://code.google.com/speed/page-speed/">Page Speed</a> and <a href="http://developer.yahoo.com/yslow/">YSlow</a>. And, of course, for <a href="http://browsermob.com/monitoring">website monitoring</a> and <a href="http://browsermob.com/load-testing">website load testing</a>, we&#8217;d have to recommend BrowserMob <img src='http://blog.browsermob.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Google+search+results+to+favor+sites+with+better+performance%3F+http://wg8fy.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Google+search+results+to+favor+sites+with+better+performance%3F+http://wg8fy.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2010/01/google-search-results-to-favor-sites-with-better-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Computing&#8230; in 1963</title>
		<link>http://blog.browsermob.com/2010/01/cloud-computing-in-1963/</link>
		<comments>http://blog.browsermob.com/2010/01/cloud-computing-in-1963/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 18:14:41 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloud Computing]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2010/01/cloud-computing-in-1963/</guid>
		<description><![CDATA[
Brad Feld, an early stage investor and entrepreneur who runs the popular blog Feld Thoughts, recently dug up an old video showing how things have come almost completely full circle in the world of computing.


The video is embedded below for your convenience. It&#8217;s a bit long (~30 minutes), but if you&#8217;re interested in today&#8217;s cloud [...]]]></description>
			<content:encoded><![CDATA[<p>
Brad Feld, an early stage investor and entrepreneur who runs the popular blog <a href="http://www.feld.com/wp/">Feld Thoughts</a>, <a href="http://www.feld.com/wp/archives/2010/01/cloud-computing-circa-1963.html">recently dug up an old video</a> showing how things have come almost completely full circle in the world of computing.
</p>
<p>
The video is embedded below for your convenience. It&#8217;s a bit long (~30 minutes), but if you&#8217;re interested in today&#8217;s cloud computing, it&#8217;s pretty entertaining to watch. It definitely gives you a good perspective on the evolution of computing:
</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Q07PhW5sCEk&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Q07PhW5sCEk&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Cloud+Computing...+in+1963+http://95wre.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Cloud+Computing...+in+1963+http://95wre.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2010/01/cloud-computing-in-1963/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bypassing analytics, advertisements, and other third parties in BrowserMob</title>
		<link>http://blog.browsermob.com/2009/12/bypassing-analytics-advertisements-and-other-third-parties-in-browsermob/</link>
		<comments>http://blog.browsermob.com/2009/12/bypassing-analytics-advertisements-and-other-third-parties-in-browsermob/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 18:13:05 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[3rd party widgets]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google Analytics]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2009/12/bypassing-analytics-advertisements-and-other-third-parties-in-browsermob/</guid>
		<description><![CDATA[
Often when it&#8217;s time to run a load test or turn on website monitoring, you don&#8217;t necessarily want the transaction hitting all your third party components on the page.  

For example, you don&#8217;t want your analytics software to record the visits as real visitors, since that would skew your marketing metrics. Likewise, you don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>
Often when it&#8217;s time to run a load test or turn on website monitoring, you don&#8217;t necessarily want the transaction hitting all your third party components on the page.  </p>
<p>
For example, you don&#8217;t want your <strong>analytics software</strong> to record the visits as real visitors, since that would skew your marketing metrics. Likewise, you don&#8217;t necessarily want <strong>advertisements</strong> served up, especially if the ad vendor uses &#8220;click-through rates&#8221; (CTR) to optimize ad prices and a load test would artificially drive down the CTR.
</p>
<p>
While there are vendor-specific actions you can take to deal with this problem (ie: we cover Google Analytics <a href="http://blog.browsermob.com/2009/09/filtering-browsermob-requests-from-google-analytics/">here</a>), sometimes the easiest solution is to modify your script so that the <em>request is never made in the first place</em>.
</p>
<p>
You can do this for both Real Browser User (RBU) and Virtual User (VU) scripts using some new APIs that we recently rolled out. They allow you to <strong>whitelist</strong> or <strong>blacklist</strong> certain hosts from having actual HTTP requests sent to them.
</p>
<p>
For example, suppose you want to exclude all requests to www.google-analytics.com from your website monitoring or website load test. Your script would need to do something like this:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> selenium <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">openBrowser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">getActiveHttpClient</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
c.<span style="color: #660066;">blacklistRequests</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://www<span style="color: #000099; font-weight: bold;">\\</span>.google-analytics<span style="color: #000099; font-weight: bold;">\\</span>.com/.*&quot;</span><span style="color: #339933;">,</span> 
                    <span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
browserMob.<span style="color: #660066;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
browserMob.<span style="color: #660066;">beginStep</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Step 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// rest of test...</span></pre></div></div>

<p>
This would ensure that any HTTP request to Google Analytics would be bypassed immediately and a fake 200 response code would be returned instead.
</p>
<p>
Sometimes it&#8217;s easier to whitelist &#8220;good&#8221; hosts instead of blacklisting specific ones. This is often the case for advertising networks, which tend to host content from dozens of different domains.
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> selenium <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">openBrowser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">getActiveHttpClient</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
c.<span style="color: #660066;">whitelistRequests</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;http://www<span style="color: #000099; font-weight: bold;">\\</span>.example<span style="color: #000099; font-weight: bold;">\\</span>.com/.*&quot;</span><span style="color: #339933;">,</span> 
                     <span style="color: #3366CC;">&quot;http://images<span style="color: #000099; font-weight: bold;">\\</span>.example.com<span style="color: #000099; font-weight: bold;">\\</span>.com/.*&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                    <span style="color: #CC0000;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
browserMob.<span style="color: #660066;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
browserMob.<span style="color: #660066;">beginStep</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Step 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// rest of test...</span></pre></div></div>

<p>
In this example, we are allowing all requests to www.example.com and images.example.com to go through, but faking any other request with an immediate 200 response code.
</p>
<p>
These whitelist and blacklist APIs are just one example of the powerful scripting you can do using the BrowserMob API and scripting environment. We encourage you to review the entire <a href="http://static.browsermob.com/api">API documentation</a> from time to time, as well as <a href="http://browsermob.com/contact">contact us</a> if you ever have questions about them.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Bypassing+analytics%2C+advertisements%2C+and+other+third+parties+in+BrowserMob+http://adns3.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Bypassing+analytics%2C+advertisements%2C+and+other+third+parties+in+BrowserMob+http://adns3.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2009/12/bypassing-analytics-advertisements-and-other-third-parties-in-browsermob/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FAQ: How do I run a load test against a website hosted in Amazon EC2?</title>
		<link>http://blog.browsermob.com/2009/12/faq-how-do-i-run-a-load-test-against-a-website-hosted-in-amazon-ec2/</link>
		<comments>http://blog.browsermob.com/2009/12/faq-how-do-i-run-a-load-test-against-a-website-hosted-in-amazon-ec2/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 17:56:44 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2009/12/faq-how-do-i-run-a-load-test-against-a-website-hosted-in-amazon-ec2/</guid>
		<description><![CDATA[
Often when someone wants to test a site that isn&#8217;t yet ready for public release, they will use various security measures to keep the general public from looking at it. Sometimes they will use BASIC authentication and other times they will use firewall rules to only allow certain IP addresses access to the site.


However, as [...]]]></description>
			<content:encoded><![CDATA[<p>
Often when someone wants to test a site that isn&#8217;t yet ready for public release, they will use various security measures to keep the general public from looking at it. Sometimes they will use <a href="http://blog.browsermob.com/2009/12/selenium-basic-authentication-and-how-to-get-it-to-work-in-browsermob/">BASIC authentication</a> and other times they will use firewall rules to only <a href="http://blog.browsermob.com/2008/12/faq-what-are-the-ip-addresses-of-your-browsers/">allow certain IP addresses</a> access to the site.
</p>
<p>
However, as we continue to see a growing trend of BrowserMob customers who are deploying websites in the Amazon cloud using EC2, we wanted to highlight that the firewall technique <strong>does not work</strong> using our service.
</p>
<p>
The reason is that BrowserMob also runs in the Amazon cloud and as such is able to access the customer website across it&#8217;s private network. Because of this, the incoming IP address is not one of the ones <a href="http://blog.browsermob.com/2008/12/faq-what-are-the-ip-addresses-of-your-browsers/">we have documented</a>, but a random internal-only IP that we do not know about ahead of time.
</p>
<p>
Fortunately, there is an easy solution: set up your EC2 network security to allow our Amazon &#8220;user ID&#8221; direct access through the port your website is hosted on. Simply authorize the User ID <strong>581518868128</strong> in the appropriate EC2 Security Group.
</p>
<p>
For example, If you are using Elasticfox, go to the Security tab and add a new permission for the appropriate Security Group. It should look like this:
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2009/12/200912160952.jpg" width="480" height="391" alt="200912160952.jpg" /></p>
<p>
Once done, you should be able to run your load test just fine. We do recommend running a small scale test first to confirm it works before running the larger test. If it&#8217;s not working, every request will result in a timeout.
</p>
<p>
We hope that helps, and we look forward to continuing to work with more companies making the transition to the cloud!</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+FAQ%3A+How+do+I+run+a+load+test+against+a+website+hosted+in+Amazon+EC2%3F+http://ypi8n.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+FAQ%3A+How+do+I+run+a+load+test+against+a+website+hosted+in+Amazon+EC2%3F+http://ypi8n.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2009/12/faq-how-do-i-run-a-load-test-against-a-website-hosted-in-amazon-ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tom Pinckney on how to survive the Slashdot effect</title>
		<link>http://blog.browsermob.com/2009/12/tom-pinckney-on-how-to-survive-the-slashdot-effect/</link>
		<comments>http://blog.browsermob.com/2009/12/tom-pinckney-on-how-to-survive-the-slashdot-effect/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 18:47:37 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Digg]]></category>
		<category><![CDATA[Slashdot]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2009/12/tom-pinckney-on-how-to-survive-the-slashdot-effect/</guid>
		<description><![CDATA[
Tom Pinckney, co-founder of Hunch, recently prescribed some tips on how to survive being Slashdotted. While Slashdot is no longer the biggest online driver of spikes of traffic, there was a time when it was the king of bringing down sites: a simple mention of a URL on the home page would crush most servers.


These [...]]]></description>
			<content:encoded><![CDATA[<p>
Tom Pinckney, co-founder of Hunch, recently prescribed some tips on <a href="http://www.tompinckney.com/2009/12/how-to-survive-being-slashdotted.html">how to survive being Slashdotted</a>. While Slashdot is no longer the biggest online driver of spikes of traffic, there was a time when it was <a href="http://en.wikipedia.org/wiki/Slashdot_effect">the king of bringing down sites</a>: a simple mention of a URL on the home page would crush most servers.
</p>
<p>
These days sites like Yahoo, Digg, and Drudge Report often carry much more weird, but Tom&#8217;s lessons apply to any situation where you are going to get a huge spike in traffic (expected or otherwise). There&#8217;s a lot of good stuff in Tom&#8217;s post, as well as previous one about <a href="http://www.tompinckney.com/2009/10/consistent-performance.html">achieving &#8220;consistent performance&#8221;</a> that are well worth a read.
</p>
<p>
Perhaps the best advice Tom gives is:
</p>
<blockquote><p>
If using Apache, use worker MPM with MaxClients and ServerLimit as high as you have RAM for. Better to cap max # of threads and reject some users than let the whole machine go down.
</p></blockquote>
<p>
This is an important point people often forget: eventually you will fail, so better plan to <a href="http://blog.browsermob.com/2009/12/cyber-monday-final-results-amazon-the-big-winner-borders-and-kohls-stumble/">fail gracefully</a>.
</p>
<div class="note">
Note: Hunch is a customer of ours, and Tom recently wrote up his thoughts on the BrowserMob service and how we help him <a href="http://www.tompinckney.com/2009/11/load-testing-ajax-websites.html">load test AJAX websites</a>. I&#8217;d recommend that article as well as our Ajaxian article on <a href="http://ajaxian.com/archives/why-load-testing-ajax-is-hard">Why Load Testing Ajax is Hard</a> if you&#8217;re interested in learning more.
</div>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Tom+Pinckney+on+how+to+survive+the+Slashdot+effect+http://nqza9.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Tom+Pinckney+on+how+to+survive+the+Slashdot+effect+http://nqza9.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2009/12/tom-pinckney-on-how-to-survive-the-slashdot-effect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium, BASIC authentication, and how to get it to work in BrowserMob</title>
		<link>http://blog.browsermob.com/2009/12/selenium-basic-authentication-and-how-to-get-it-to-work-in-browsermob/</link>
		<comments>http://blog.browsermob.com/2009/12/selenium-basic-authentication-and-how-to-get-it-to-work-in-browsermob/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 17:43:54 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Basic Authentication]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Selenium 2]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2009/12/selenium-basic-authentication-and-how-to-get-it-to-work-in-browsermob/</guid>
		<description><![CDATA[
BASIC authentication is used to provide minimal, low-security protection from anonymous visitors hitting your website. It is frequently used by companies to ensure that their staging or development environments are not accessibly by the general public prior to pushing the changes to production. Typical authentication dialog prompts look like so:



The challenge here is that this [...]]]></description>
			<content:encoded><![CDATA[<p>
BASIC authentication is used to provide minimal, low-security protection from anonymous visitors hitting your website. It is frequently used by companies to ensure that their staging or development environments are not accessibly by the general public prior to pushing the changes to production. Typical authentication dialog prompts look like so:
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2009/12/basic-auth.jpg" width="480" height="219" alt="200912080850.jpg" /></p>
<p>
The challenge here is that this dialog box is the kind of dialog that Selenium cannot automate. You cannot issue &#8220;type&#8221; or &#8220;click&#8221; commands on it. In fact, if this box comes up, your script is guaranteed to time out because Selenium will continue to wait for the page to load, not realizing a login is required and unable to populate it.
</p>
<p>
Traditionally Selenium users have worked around this problem by using a URL pattern in which the username and password was encoded:
</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://username:password@example.com</pre></div></div>

<p>
Recently, however, this is not working across all browsers. IE no longer supports it and recent versions of Firefox add a confirmation box that breaks the automation with a slightly different popup. And while we&#8217;re working on as solution for Selenium 2.0, there aren&#8217;t a lot of options for Selenium today.
</p>
<p><img src="http://blog.browsermob.com/wp-content/uploads/2009/12/200912080944.jpg" width="480" height="203" alt="200912080944.jpg" /></p>
<p>
But when it comes to BrowserMob, we do have a solution available today, which will be soon back-porting to the Selenium 2 codebase. Simply edit your script to look like the following:
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> selenium <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">openBrowser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> browserMob.<span style="color: #660066;">getActiveHttpClient</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
c.<span style="color: #660066;">autoBasicAuthorization</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;example.com&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;username&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;password&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
browserMob.<span style="color: #660066;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
browserMob.<span style="color: #660066;">beginStep</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Step 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
selenium.<span style="color: #000066;">open</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://example.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// rest of script...</span></pre></div></div>

<div class="note">
Important: the first argument to autoBasicAuthorization is <strong>not</strong> a URL, but rather a domain name. Make sure the argument does not start with &#8220;http://&#8221; or include any parts of a URL.
</div>
<p>
This code tells BrowserMob to automatically put in the required Authorization headers for any HTTP request issued to example.com. And soon this capability will be added to Selenium 2 (after we get the first alpha out in time for the holidays).</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Selenium%2C+BASIC+authentication%2C+and+how+to+get+it+to+work+in+BrowserMob+http://mg699.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Selenium%2C+BASIC+authentication%2C+and+how+to+get+it+to+work+in+BrowserMob+http://mg699.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2009/12/selenium-basic-authentication-and-how-to-get-it-to-work-in-browsermob/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Public DNS vs OpenDNS vs Your ISP&#8217;s DNS &#8211; measuring performance</title>
		<link>http://blog.browsermob.com/2009/12/google-public-dns-vs-opendns-vs-your-isps-dns-measuring-performance/</link>
		<comments>http://blog.browsermob.com/2009/12/google-public-dns-vs-opendns-vs-your-isps-dns-measuring-performance/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 22:29:39 +0000</pubDate>
		<dc:creator>Patrick Lightbody</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Google Public DNS]]></category>
		<category><![CDATA[OpenDNS]]></category>

		<guid isPermaLink="false">http://blog.browsermob.com/2009/12/google-public-dns-vs-opendns-vs-your-isps-dns-measuring-performance/</guid>
		<description><![CDATA[
Like many in the industry, we were surprised and intrigued by the announcement yesterday that Google would be entering the DNS business. The basic logic was clear: Google has a vested interest in the internet being fast, and so they want to offer a free public utility to help it be faster.


Of course, some were [...]]]></description>
			<content:encoded><![CDATA[<p>
Like many in the industry, we were surprised and intrigued by the announcement yesterday that Google would be entering the <a href="http://googleblog.blogspot.com/2009/12/introducing-google-public-dns.html">DNS business</a>. The basic logic was clear: Google has a vested interest in the <a href="http://code.google.com/speed/">internet being fast</a>, and so they want to offer a free public utility to help it be faster.
</p>
<p>
Of course, some were doubtful. OpenDNS, probably the company that has the most to lose by this decision, <a href="http://blog.opendns.com/2009/12/03/opendns-google-dns/">responded quickly</a>. Some <a href="http://blog.internetnews.com/skerner/2009/12/is-google-public-dns-safe-look.html">questioned its security</a>, while others pointed out that Google gains a lot more than you might think by serving DNS: it would now know <em>everywhere</em> you were going, regardless of whether you went through Google Search or whether the site had Google Analytics installed.
</p>
<p>
While we&#8217;re not going to get in to the broader debate of whether this move is Good or Evil, we were curious if their service really offered significant performance benefits. So we extracted the DNS code from our <a href="http://browsermob.com/monitoring">BrowserMob website monitoring service</a> (which itself is based on the fantastic <a href="http://www.xbill.org/dnsjava/">xbill Java DNS library</a>), and built a quick-n-dirty tool to measure exactly that.
</p>
<h2>The results</h2>
<p>
Here&#8217;s how it works: our tool queries the Alexa worldwide top 1000 sites. It does it against Google Public DNS, OpenDNS, and (optionally) the DNS servers of your choosing. Since we&#8217;re located in Portland, OR and have a Qwest internet connection, we used Qwest&#8217;s DNS servers in our test. The results surprised us:
</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Starting test...
&nbsp;
Test 1: Google
85109 ms for 1000 records
Test 2: Google
67586 ms for 1000 records
Test 3: Google
67318 ms for 1000 records
Test 1: OpenDNS
92521 ms for 1000 records
Test 2: OpenDNS
45793 ms for 1000 records
Test 3: OpenDNS
47899 ms for 1000 records
Test 1: Your DNS
62541 ms for 1000 records
Test 2: Your DNS
25561 ms for 1000 records
Test 3: Your DNS
25879 ms for 1000 records</pre></div></div>

<p>
Taking the <strong>lowest time</strong> and dividing by 1000 tells us the average DNS lookup times from our location in Portland, OR:
</p>
<ul>
<li>Google &#8211; 67.3 ms</li>
<li>OpenDNS &#8211; 45.8 ms</li>
<li>Qwest DNS &#8211; 25.6 ms</li>
</ul>
<p>
What this told us was that despite all the hoopla about performance, our trusty old DNS server we&#8217;ve always been using is <strong> still the fastest</strong>. And when you think about it, it shouldn&#8217;t be a surprise: there are fewer hops from the computer to the DNS server because it&#8217;s the same ISP.
</p>
<p>
We were very surprised, however, to see how much faster OpenDNS was compared to Google. While both are slower than your local ISP&#8217;s, OpenDNS promises a bunch of features which might help make up for the performance difference. While Google isn&#8217;t promising any features right now, they are, as always, pledging to not be evil. Considering that some ISPs have in the past redirect DNS lookups to serve their commercial interests, Google&#8217;s pledge is worth noting.
</p>
<h2>Running your own test</h2>
<p>
These results were from a Qwest DSL connection in Portland, OR. We&#8217;re curious what your results are, so we&#8217;ve made the test <strong><a href="http://browsermob.s3.amazonaws.com/browsermob-dns-perf.jar">available for everyone</a></strong>. It requires Java and can be run like so:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">java -jar browsermob-dns-perf.jar</pre></div></div>

<p>
If you wish to test your ISP&#8217;s DNS, just add to the command line one or more IPs:
</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">java -jar browsermob-dns-perf.jar 123.456.789.012</pre></div></div>

<p>
We hope that you will comment on this blog with the results you get. We&#8217;re very curious to see what the worldwide performance results are.
</p>
<h2>A note about the test</h2>
<p>
DNS is somewhat hard to test for performance, since there are many moving pieces. The results can depend on whether the server has a cached entry, how far you are from the DNS server, how far the DNS server is from the other servers, etc. This is why we run the test three times for each service an why we think the right approach here is to take the best score.
</p>
<p>
However, we do understand one could easily argue that the <em>first</em> result is much more critical. We sort of agree, but the problem is that because these are public services you can&#8217;t tell how &#8220;fresh&#8221; the cache is on the servers you are testing against.
</p>
<p>
In fact, we should note that Google&#8217;s FAQ argues that cache <em>misses</em> are <a href="http://code.google.com/speed/public-dns/docs/performance.html">big performance issue</a> and the main benefit they bring to the table. Unfortunately, this is extremely difficult, if not impossible, for us to independently test. As such, we decided that the most consistent and useful result would be the faster time for each service, even if that means it was faster due to 100% cache <em>hits</em>.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Google+Public+DNS+vs+OpenDNS+vs+Your+ISP%27s+DNS+--+measuring+performance+http://8atmq.th8.us" title="Post to Twitter"><img class="nothumb" src="http://blog.browsermob.com/wp-content/plugins/tweet-this/icons/tt-twitter.png" alt="[Post to Twitter]" border="0" /></a> <a class="tt" href="http://twitter.com/home/?status=BrowserMob:+Google+Public+DNS+vs+OpenDNS+vs+Your+ISP%27s+DNS+--+measuring+performance+http://8atmq.th8.us" title="Post to Twitter">Tweet This Post</a>&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://blog.browsermob.com/2009/12/google-public-dns-vs-opendns-vs-your-isps-dns-measuring-performance/feed/</wfw:commentRss>
		<slash:comments>124</slash:comments>
		</item>
	</channel>
</rss>
