<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Torbit</title>
	
	<link>http://torbit.com/blog</link>
	<description>Making the web faster</description>
	<lastBuildDate>Mon, 10 Jun 2013 17:31:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/torbit" /><feedburner:info uri="torbit" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>The New Torbit Insight API</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/wb39tlzuhGA/</link>
		<comments>http://torbit.com/blog/2013/06/10/torbit-insight-api/#comments</comments>
		<pubDate>Mon, 10 Jun 2013 17:31:36 +0000</pubDate>
		<dc:creator>Jon Fox</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=4146</guid>
		<description><![CDATA[At Torbit we&#8217;re always looking for ways to make performance data more accessible, easier to use, and more integrated. Performance monitoring is a critical component to ensuring a useful site and happy customers. RUM data is the ultimate source of truth for that. We increasingly hear from our customers that they are integrating performance data [...]]]></description>
			<content:encoded><![CDATA[<p>At Torbit we&#8217;re always looking for ways to make performance data more accessible, easier to use, and more integrated. Performance monitoring is a critical component to ensuring a useful site and happy customers. RUM data is the ultimate source of truth for that. We increasingly hear from our customers that they are integrating performance data into SLA&#8217;s for their teams and locking releases until a performance threshold is met. We want to encourage more of our clients to use their performance data to make decisions about their sites and businesses and because of this we&#8217;re proud to announce the new Torbit Insight API.</p>
<p>The Insight API is a simple REST API that returns JSON results. Any of the data you see in the reports on <a href="http://torbit.com">Torbit.com</a> can also be accessed via the API (in fact we use the API ourselves to generate those reports). This makes it possible to pull your Torbit Insight data into your own reporting tools and monitoring systems. Now you can integrate performance monitoring even deeper into your development workflow and business tracking.</p>
<p>So whether you just want to have access to your data outside of the Torbit.com interface or you want truly deep integration of the performance metrics of your site into other systems, the Torbit Insight API makes it all simple and easy. If you&#8217;d like to start diving into your data via the API just let us know at <a href="mailto:sales@torbit.com">sales@torbit.com</a> and we can get you started today.</p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/wb39tlzuhGA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2013/06/10/torbit-insight-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2013/06/10/torbit-insight-api/</feedburner:origLink></item>
		<item>
		<title>Track Custom Events in Torbit Insight</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/ykkqIuJ8Ins/</link>
		<comments>http://torbit.com/blog/2013/05/20/track-custom-events-in-torbit-insight/#comments</comments>
		<pubDate>Mon, 20 May 2013 21:23:30 +0000</pubDate>
		<dc:creator>Jon Fox</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=4124</guid>
		<description><![CDATA[Tracking your website performance with a RUM (Real User Measurement) tool like Torbit Insight is a critical first step for all websites. It&#8217;s impossible to know how your site is performing without tracking it regularly and RUM is one of the best ways to do this. Once you have a baseline idea of how your [...]]]></description>
			<content:encoded><![CDATA[<p>Tracking your website performance with a RUM (Real User Measurement) tool like <a href="http://torbit.com/insight">Torbit Insight</a> is a critical first step for all websites.  It&#8217;s impossible to know how your site is performing without tracking it regularly and RUM is one of the best ways to do this.</p>
<p>Once you have a baseline idea of how your site is performing using the standard metrics like Page Ready and Page Load it can be extremely valuable to start using your own site specific events to track performance.  For instance, maybe &#8220;Above the fold&#8221; time or the time that it takes for users to be able to interact with the sidebar navigation is actually a more significant performance metric to track with your visitors.  Steve Souders recently posted about the importance of <a href='http://www.stevesouders.com/blog/2013/05/13/moving-beyond-window-onload/'>moving beyond &#8220;window.onload()&#8221;</a> and we couldn&#8217;t agree more.  This is why we&#8217;re proud to announce the addition of custom event tracking in Torbit Insight.</p>
<p>With custom events, you can instrument your page to track any relevant timing metric and see all the same reports you know and love in Torbit Insight.  The simplest example is tracking a different load time metric (something other than Page Load or Page Ready, which are included by default) &#8211; for example &#8220;Sidebar loaded&#8221;.  To add tracking for this custom event, you&#8217;d simply need to add the following code snippet at the point in the page where you consider the sidebar to be fully loaded.</p>
<pre>
&lt;script type='text/javascript'&gt;
	var TBRUM=TBRUM||{};TBRUM.q=TBRUM.q||[];
	TBRUM.q.push(['measure','sidebarLoaded','starttime',(new Date).getTime()]);
&lt;/script&gt;
</pre>
<p>
Once you have your site instrumented with the above JavaScript snippet, the only thing left to do is add the new custom event on your Torbit Insight settings page on your account for that site.  Then you&#8217;ll be able to start viewing your new metric &#8220;sidebarLoaded&#8221; in the Torbit Insight dashboard just like the default &#8220;Page loaded&#8221; and &#8220;Page ready&#8221; events we track by default.</p>
<div style="float: center; text-align: center">
<a href="http://torbit.com/blog/wp-content/uploads/2013/05/Screenshot_5_19_13_5_28_PM1.png"><img align="center" src="http://torbit.com/blog/wp-content/uploads/2013/05/Screenshot_5_19_13_5_28_PM1-300x179.png" title="Torbit Insight Custom Events" /></a>
</div>
<p>So start tracking your own custom events and get an even better view into your site&#8217;s performance and how it&#8217;s impacting your business.  Contact us at <a href='mailto:sales@torbit.com'>sales@torbit.com</a> to get custom events added to your Insight account.</p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/ykkqIuJ8Ins" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2013/05/20/track-custom-events-in-torbit-insight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2013/05/20/track-custom-events-in-torbit-insight/</feedburner:origLink></item>
		<item>
		<title>Behind the Scenes: Big Data at Torbit</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/B2QV0olBmLw/</link>
		<comments>http://torbit.com/blog/2013/02/19/big-data-at-torbit/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 16:00:17 +0000</pubDate>
		<dc:creator>Tylor Arndt</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=4044</guid>
		<description><![CDATA[A Trillion Queryable Performance Metrics (and Counting) An ever increasing torrent of data flows into the analytical engines of Torbit. The pageviews represented by Real User Measurement (RUM) data are the life-blood of the internet. Helping our customers deeply understand their users&#8217; experiences through their RUM data is a core component of our mission to [...]]]></description>
			<content:encoded><![CDATA[<h2>A Trillion Queryable Performance Metrics (and Counting)</h2>
<p>An ever increasing torrent of data flows into the analytical engines of Torbit. The pageviews represented by Real User Measurement (RUM) data are the life-blood of the internet. Helping our customers deeply understand their users&#8217; experiences through their RUM data is a core component of our mission to make the internet faster.</p>
<p><a href="http://torbit.com/insight">Torbit Insight</a> generates a mind-boggling amount of data each day. The increasing volume of RUM beacon data can be attributed to our existing customers&#8217; increased success and to strong continued customer growth. We process over 6 billion performance metrics a day and our goal is to keep our customers&#8217; data safe forever. The volume of this data is a core metric of our success. Every success has a price to be paid; in this case, the price of Torbit&#8217;s continued success is an ever increasing volume of data to store, analyze and present to our customers.</p>
<h2>Alternative Solutions</h2>
<p>At Torbit, we evaluated a number of the standard industry tools in the big data toolbox such as Hadoop, Riak, MySQL cluster and Google&#8217;s BigQuery. All of these tools fell short in one respect or another for our specific use case and goals.</p>
<p>We wanted:</p>
<ul>
<li>Multi-host, MapReduce or similar support</li>
<li>Minimal query latency</li>
<li>High throughput</li>
<li>Minimal possible infrastructure changes</li>
<li>Low recurring cost outside of growth related costs</li>
<li>Scalable growth</li>
<li>Independence from third party service providers</li>
</ul>
<p><br class="clear" />No solution came close to meeting all these requirements, and we wanted as many as we could get, if not all of them. In the graph below, you will see that our final solution was able to out-perform Google BigQuery with common queries being about 3 times faster.</p>
<p style="text-align: center"><img class="aligncenter size-full wp-image-4070" src="http://torbit.com/blog/wp-content/uploads/2013/02/Performance1.png" alt="" width="570" height="317" /></p>
<p>Since most off the shelf solutions are general purpose, these solutions often sacrifice performance, storage efficiency or both to provide extra features that are superfluous to our needs. For example, most of the data we process fits into the paradigm of a fixed-schema keyed time-series database. This means that any storage engine with a relational or variable schema support will have made structural compromises to enable functionality that our narrow use case does not benefit from.</p>
<p>After considering our goal of a high performance, highly scalable, fixed-purpose clustered data-store, we ran a short-term R&amp;D project to determine if this might be one of those rare cases where developing our own solution was the best path. Reinventing the wheel is not to be undertaken lightly, so we wanted to be confident that our use case was sufficiently specific to warrant it.</p>
<p>After evaluating our unoptimized prototype and discovering it was simple, extensible and had performance competitive with some of the off-the-shelf solutions on our evaluation list, we decided to commit. Additionally, a peripheral benefit of building our own solution was that we were able to write our implementation in <a href="http://golang.org/" target="_blank">Go</a> (Also known as <a href="http://en.wikipedia.org/wiki/Go_(programming_language)">Golang</a>). We find that Go is very well suited for this kind of development, and has become Torbit&#8217;s preferred back-end development language.</p>
<h2>Big Wins Processing Big Data</h2>
<p><img class="alignnone" style="float: right;margin-left: 16px" src="http://theatlasoflife.com/wp-content/uploads/2010/12/atlas2.jpg" alt="" width="315" height="368" /></p>
<p class="float:left">As is common in many large scale data crunching systems, our solution starts with a MapReduce library. For this purpose we created a MapReduce implementation that we call Atlas. Atlas not only supports local and multi-host (network) MapReduce Jobs, it supports external mappers written in Go (which is important because Go is statically linked). Since Cgo can be used to mix C and Go in the same project, it would be trivial to write most of a mapper in C if that was desired. Go&#8217;s support for functions as first class citizens, as well as built-in serialization from “encoding/gob” in the standard library, made this task much more pleasant than it would have been in many other languages.</p>
<p>To abstract the underlying details and complexity involved with invoking the MapReduce jobs, we created a web-service to act as an arbiter between the data cluster and the consuming external front-end client systems.</p>
<h2>Introducing Atlas</h2>
<p>&nbsp;</p>
<p style="text-align: center"><img class="size-full wp-image-4061" src="http://torbit.com/blog/wp-content/uploads/2013/02/AtlasFlow1.png" alt="Graph" width="435" height="200" /></p>
<p>Atlas is a general purpose MapReduce library that can be used for everything from crunching log files to optimizing user content; however, we still need a highly efficient way to store our analytics data for the Atlas mappers to leverage. With the prerequisite of a solid MapReduce library behind us, the next component we needed was a data-store.</p>
<p>When creating a fixed schema data-store is warranted, one of the most visible benefits to be gained is the extreme efficiency with which you can store your data. Techniques such as careful binary encoding and field de-duplication can massively reduce data size. We saw significant savings, and we know we have further headroom to greatly reduce our storage usage.</p>
<p style="text-align: center"><img class="size-full wp-image-4058 aligncenter" src="http://torbit.com/blog/wp-content/uploads/2013/02/EncodingSize2.png" alt="Graph" width="550" height="329" /></p>
<p>While there is always a CPU utilization versus storage capacity trade-off to be had in any compression scheme, when CPU capacity is sufficiently abundant, a more compact data format means less I/O. This almost always results in better data-store performance.</p>
<p>Since our data-store is fundamentally a time-series database, we were able to structure our data in such a manner to ensure that most read and write operations were sequential. SSDs are fantastic drop-in tools for increasing I/O performance, and when they are used in random workloads SSDs are often an order of magnitude faster than traditional disk. However, in sequential workloads SSDs are often only 1.5-3x faster than much larger traditional disks and are much more expensive per unit of capacity. In sequential I/O workloads it is not uncommon to discover that a RAID array of spinning disks at the same price point is actually much faster than SSD, as well as having the expected benefit of greater capacity.</p>
<p style="text-align: center"><img class="size-full wp-image-4055 aligncenter" src="http://torbit.com/blog/wp-content/uploads/2013/02/SsdSeqEconomics.png" alt="Graph" width="546" height="319" /></p>
<h2>System Outline</h2>
<p>The final system begins with a web-service against which client systems interface. To ensure resiliency, an instance of the web-service runs on each cluster host. When a client request arrives the web-service creates a MapReduce job to fulfill client requests. The reducer function component of the MapReduce job runs within the web-service handling the request.</p>
<p>The Atlas library code running in the web-service communicates with the remote Atlas function servers on each host, invoking the specified Mapper function. The function server’s mappers then communicate with their local data-store to gather their sub-set of data and proceed to perform their processing task.</p>
<p>After processing, the mappers send their results back to the reducer running within the web-service via Atlas. The reducer proceeds to format and return it&#8217;s response to the external client.</p>
<p>Here is an example of how a small two node cluster might be configured:</p>
<p style="text-align: center"><img class="size-full wp-image-4063" src="http://torbit.com/blog/wp-content/uploads/2013/02/ExampleSystem.png" alt="" width="519" height="473" /></p>
<p>We’re a data-driven company and we’re dedicated to building the tools we need to better understand what makes websites fast. Atlas is just one of the tools we’ve built at Torbit. If you have an interest and passion for big data processing, making the internet faster and solving interesting problems you should <a href="http://torbit.com/contact">send us a note</a>. We always enjoy talking to other people who get excited about the power of big data to transform businesses.</p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/B2QV0olBmLw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2013/02/19/big-data-at-torbit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2013/02/19/big-data-at-torbit/</feedburner:origLink></item>
		<item>
		<title>10 things to consider when choosing your RUM provider</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/AL7rl8G0A3Q/</link>
		<comments>http://torbit.com/blog/2013/01/01/rum-providers/#comments</comments>
		<pubDate>Tue, 01 Jan 2013 16:00:25 +0000</pubDate>
		<dc:creator>Josh Fraser</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=3988</guid>
		<description><![CDATA[It wasn&#8217;t that long ago when anyone looking for Real User Measurement (RUM) had to implement it themselves. Thankfully, that is no longer the case. As the RUM space gets more crowded, I thought it might be valuable to make a list of 10 things you should consider when choosing a RUM provider. 1: Ability [...]]]></description>
			<content:encoded><![CDATA[<p>It wasn&#8217;t that long ago when anyone looking for Real User Measurement (RUM) had to implement it themselves.  Thankfully, that is no longer the case.  As the RUM space gets more crowded, I thought it might be valuable to make a list of 10 things you should consider when choosing a RUM provider.</p>
<h2>1: Ability to correlate your site speed with revenue</h2>
<p></p>
<p><strong>Site speed = $$.</strong>  One of the most powerful things you can do with RUM is show the correlation between your site speed and your business metrics like your bounce rate, conversion rate and revenue.  No RUM product is complete without the ability to go to your boss with a case study showing how much performance matters for your business.</p>
<h2>2: 100% sampling rate</h2>
<p></p>
<p><strong>Every pageview matters.</strong>  Processing data from billions of pageviews is hard.  Many people don&#8217;t want to deal with that much data and choose to sample instead.  Google Analytics collects some limited performance data, but their default sampling rate is 1%!  Behind every pageview statistic is a story &#8211; a story of a potential customer, on the brink of clicking away because your site is too slow!  You want a RUM provider that understands that every pageview matters and will track you performance data across 100% of your visitors.</p>
<h2>3: Percentiles and histograms</h2>
<p></p>
<p><strong>Averages lie.</strong>  <a href="http://highscalability.com/blog/2012/5/23/averages-web-performance-data-and-how-your-analytics-product.html">Averages can be very misleading</a> when looking at performance data.  I regularly see websites with an average load time of 4 seconds, while 10% of their visitors are experiencing 20 second load times!  If you believe every pageview matters, you&#8217;ll probably agree that 20 second load times aren&#8217;t okay.  To really understand what is happening on your site, you need to be analyzing your top percentiles and looking at a histogram breakdown.</p>
<h2>4: Realtime</h2>
<p></p>
<p><strong>Live in the moment.</strong>  It&#8217;s not very helpful if you find our tomorrow that your site was slow today. I recently talked to a top news site that used our realtime feature to catch a bad deploy. They didn’t have synthetic tests set up on the affected page, so Keynote reported that everything was fine. Only because they had our real time graph on a wall monitor were they able to catch the issue right away and revert the slow code.</p>
<h2>5: Total browser coverage</h2>
<p></p>
<p><strong>Accuracy counts.</strong>  <a href="http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html">Navigation Timing</a> is a great technology that allows for the collection of more detailed timing data than is available with raw JavaScript.  Your RUM provider should use Nav Timing when available, but should also be smart enough to fall back to other techniques so you can still collect data for older browsers.  At Torbit, we use Navigation Timing whenever it is available, but we also collect the data using several other creative techniques to make sure we have 100% browser coverage.</p>
<h2>6: Drilldown capabilities</h2>
<p></p>
<p><strong>Actionable data.</strong>  Our slowest pages tab not only gives developers a prioritized todo list, but also gives actionable suggestions on what to fix.  Want to know how fast your site loads in IE 6?  Or compare your site speed in NY to your speed in SF?  Drilldown capabilities are crucial for doing in-depth analysis.  We&#8217;ve actually had customers build new data centers after digging into their performance data and realizing how much even a 1-second speed up was worth to them.  RUM is great as an analytics tool.  It&#8217;s best when it drives actionable decisions. </p>
<h2>7: Long term data retention</h2>
<p></p>
<p><strong>Commitment.</strong>  At Torbit, we&#8217;ll keep your data safe forever.  Believe it or not, some analytics tools actually throw your data away over time.  The data gets expensive to store over time, so they just toss it out.  But what if you want to compare your site speed today to your site speed a year ago?  Personally, I want to know that my data is being stored securely and will be available, no matter how far in the future I end up needing it.</p>
<h2>8: Support for A/B testing</h2>
<p></p>
<p><strong>Measure then optimize.</strong>  It&#8217;s very powerful to be able to test the performance implications of a new feature with your actual visitors.  One of the most common uses of Torbit Insight is to evaluate CDN performance.  Wayfair used Torbit Insight to discover that Akamai was not delivering a meaningful improvement to their site speed and <a href="http://engineering.wayfair.com/measuring-cdn-performance-benefits-with-real-users/">shared the results on the Wayfair blog</a>.</p>
<h2>9: Affordable price</h2>
<p></p>
<p><strong>How about free?</strong>  At Torbit, we&#8217;re really passionate about making the web faster.  We believe the first step in achieving our mission is to help people get their hands on accurate performance data.  We&#8217;ve worked hard to make sure our free plan includes tons of useful functionality.  If at some point, you choose to upgrade to a paid plan, great!  If not, that&#8217;s fine too.</p>
<h2>10: Proven team and proven product</h2>
<p></p>
<p><strong>Don&#8217;t get left behind.</strong>  The idea of RUM has been around for a while, but adoption has only recently started to pick up. We live in a fast changing environment.  I personally believe we have only scratched the surface of what is possible with RUM.  <a href="http://www.w3.org/TR/resource-timing/">Resource Timing</a> is already available in IE 10 and will be rolling out to other browsers soon.  Make sure you pick a product built by a proven team that you can trust to stay on the cutting edge as new technology is available. </p>
<p>Torbit is used by hundreds of sites including multi-billion dollar corporations, top retailers and leading media properties.  Our Insight product has been battle tested with billions of performance metrics.  We started Torbit with an audacious mission and we&#8217;re dedicated to seeing it through. We live to make the web faster. In spite of all the improvements in browser technology and faster connection speeds, websites are slower than ever.  As we head into 2013, I hope you&#8217;ll join us in pursing a faster internet for everyone.  </p>
<p><a href="https://secure.torbit.com/insight/register" class='button'>Give your website a shot of RUM today</a></p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/AL7rl8G0A3Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2013/01/01/rum-providers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2013/01/01/rum-providers/</feedburner:origLink></item>
		<item>
		<title>Speed Up Your Site Using Prefetching</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/uNVy1KwXZY8/</link>
		<comments>http://torbit.com/blog/2012/12/31/prefetching/#comments</comments>
		<pubDate>Mon, 31 Dec 2012 16:00:28 +0000</pubDate>
		<dc:creator>Josh Fraser</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=3942</guid>
		<description><![CDATA[Our CTO, Jon Fox wrote an article for the Performance Calendar yesterday on how to Speed Up Your Site Using Prefetching. I think the content will be interesting to our readers too so I&#8217;ve reproduced it here. The concept of prefetching is pretty simple. We often know about resources the browser is likely to need [...]]]></description>
			<content:encoded><![CDATA[<p><em>Our CTO, <a href="http://twitter.com/jfox85">Jon Fox</a> wrote an article for the Performance Calendar yesterday on how to <a href="http://calendar.perfplanet.com/2012/speed-up-your-site-using-prefetching/">Speed Up Your Site Using Prefetching</a>.  I think the content will be interesting to our readers too so I&#8217;ve reproduced it here.</em></p>
<p>The concept of prefetching is pretty simple. We often know about resources the browser is likely to need before the browser does. Prefetching involves either giving the browser hints of pages or resources it is likely to need so that it can download them ahead of time, or actually downloading resources into the browser cache before needed so that the overhead of requesting and downloading the object can be preemptively handled or done in a non-blocking way.</p>
<p>There are many ways to prefetch content, but here are 3 simple options.</p>
<h2>DNS Prefetching</h2>
<p></p>
<p>DNS is the protocol that converts human readable domains (mysite.com) into computer readable IPs (123.123.123.123). DNS resolution is generally pretty fast and measured in 100′s of milliseconds, but because it must happen before any request to the server can be made it can cause a cascade effect that has a real impact on the overall load time of a page. Often we know about several other domains that will need to be loaded for resources later in the page or user session, such as subdomains for static content (images.mydomain.com) or domains for 3rd party content. Some browsers support a meta tag that identifies these domains that need to be resolved so the browser can resolve them ahead of time. The tag to do this is pretty straight forward:<br />
<blockquote>
<pre><xmp>
<link href="//my.domain.com" rel="dns-prefetch" />
<link href="http://my.domain.com/" rel="prefetch" /><!– IE9+ –></xmp></pre>
</blockquote>
<p>Adding this tag causes the browser to do the DNS resolution ahead of time, instead of waiting until a resource requires it later. This technique is probably most valuable to preload DNS for content on other pages on your site that visitors are likely to go to. This feature is supported in Chrome, Firefox, and IE9+.</p>
<p>Although shaving a few hundred milliseconds might seem trivial, in aggregate this can be a measurable gain. It’s also a safe optimization and easy to implement. I was curious to see how often this technique is used, so I crawled the top 100K Alexa sites. It turns out only 552 sites (0.55%) are currently using DNS prefetching. This is a cheap win, and something more sites should leverage.</p>
<h2>Resource Prefetching</h2>
<p></p>
<p>Images make up a large portion of the overall bytes of many major websites today. Often the overhead of making the requests and downloading images can have a significant performance impact. In many cases, though, the site developer knows when an image will be needed that won’t be detected early by the browser, such as an image loaded from an ajax request or other user action on the page. Resource prefetching is when you load an image, script, stylesheet, or other resource into the browser preemptively. This is most often done with images, but can be done with any type of resource that can be cached in the browser.</p>
<p>Of the three techniques I’m covering here, this is by far the oldest and the most used. Unfortunately I can’t give a concrete number about adoption because there are too many ways to implement this to detect in my Alexa crawl. Still, many sites don’t properly leverage this technique and even just preloading a few images can make a huge difference for the user experience.</p>
<h2>Page Prefetching / Prerendering</h2>
<p></p>
<p>Page prefetching is very similar to resource prefetching, except that we actually load the new page itself preemptively. This was first made available in Firefox. You can hint to the browser that a page (or an individual resource) should be prefetched by including the following tag:</p>
<blockquote><pre><xmp>
<link rel="prefetch" href="/my-next-page.htm"></xmp></pre>
</blockquote>
<p>In the case of prerendering, the browser not only downloads the page, but also the necessary resources for that page. It also begins to render the page in memory (not visible to the user) so that when the request for the page is made it can appear nearly instantaneous to the user. Prerendering was first added in Chrome. You can hint that a page should be prerendered by including the following tag:<br />
<blockquote>
<pre><xmp>
<link rel="prerender" href="http://mydomain.com/my-next-page.htm"></xmp></pre>
</blockquote>
<p>This technique is by far the most controversial and the riskiest of the three. Prerendering a page should only be done when there is a high confidence that the user will go to that page next. The most well known example of this is Google Search, which will prerender the first result of the page if the confidence is high enough. I found only 95 examples of this in my crawl of the Alexa Top 100k sites. Although this technique is clearly not for every use case, I think many more sites could leverage this to improve the user experience.</p>
<h2>The Downsides</h2>
<p></p>
<p>Prefetching in general is often a controversial topic. Many people argue that it is not efficient and leads to a waste in bandwidth. It also uses client resources unnecessarily (most notably on mobile devices). Also worth mentioning is that in some cases prefetching or prerendering of pages can have adverse effects on analytics and log tracking since there is no obvious way to discern a user visiting the page (and seeing it) or simply the browser prerendering without the user’s knowledge.</p>
<h2>Conclusion</h2>
<p></p>
<p>Despite all of these cautions, prefetching can be a huge win. The fastest request is always the one we never have to make and getting as much into the cache as possible is the best way to make that happen. By making these expensive requests when the user is not waiting on them, we can greatly improve the perceived performance of even the slowest sites on the slowest networks. If you’re not already doing so, it’s worth trying these techniques on your site. The results will vary, so be sure to use Real User Measurement (e.g. Torbit) to find out how much of an improvement prefetching makes for you.</p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/uNVy1KwXZY8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2012/12/31/prefetching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2012/12/31/prefetching/</feedburner:origLink></item>
		<item>
		<title>Motivation and Incentive</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/ZMrhundIleA/</link>
		<comments>http://torbit.com/blog/2012/12/28/motivation-and-incentive/#comments</comments>
		<pubDate>Sat, 29 Dec 2012 07:33:15 +0000</pubDate>
		<dc:creator>Josh Fraser</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=3933</guid>
		<description><![CDATA[Today, Patrick Meenan (the mastermind behind WebPagetest) wrote a great blog post titled Motivation and Incentive. In this post, Patrick discussed his favorite performance article from 2012 &#8211; an article by Kyle Rush about the A/B testing that took place on Obama&#8217;s campaign site during the 2012 election. Patrick went on to talk about the [...]]]></description>
			<content:encoded><![CDATA[<p>Today, <a href="https://twitter.com/patmeenan">Patrick Meenan</a> (the mastermind behind <a href="http://www.webpagetest.org/">WebPagetest</a>) wrote a great blog post titled <a href="http://blog.patrickmeenan.com/2012/12/motivation-and-incentive.html">Motivation and Incentive</a>.  In this post, Patrick discussed his favorite performance article from 2012 &#8211; <a href="http://kylerush.net/blog/meet-the-obama-campaigns-250-million-fundraising-platform/">an article by Kyle Rush</a> about the A/B testing that took place on Obama&#8217;s campaign site during the 2012 election.  Patrick went on to talk about the importance of having the right incentives in place to make change happen.  </p>
<p>I&#8217;ve been <a href="http://torbit.com/blog/2012/12/27/is-your-cdn-intentionally-hurting-your-performance/">talking a lot lately</a> about the misaligned incentives of CDNs.  I was pleased to see Patrick agrees:</p>
<blockquote><p>
Maybe it&#8217;s my tinfoil hat getting a bit tight, but given that CDNs usually bill you for the number of bits they serve on your behalf, it doesn&#8217;t feel like they are particularly motivated to make sure you are only serving as many bits as you need to.  Things like always gzipping content where appropriate is one of the biggest surprises.  It seems like a no-brainer but most CDN&#8217;s will just pass-through whatever your server responds with and won&#8217;t do the simple optimization of gzipping as much as possible (most of them have it as an available setting but it is not enabled by default).</p>
<p>Certainly you don&#8217;t want to be building your own CDN but you should be paying very careful attention to the configuration or your CDN(s) to make sure the content they are serving is optimized for your needs.</p></blockquote>
<p>If you haven&#8217;t read his post yet, be sure to <a href="http://blog.patrickmeenan.com/2012/12/motivation-and-incentive.html">check it out</a>.  He hits on a lot of important topics as he explores the root motivations behind providers across the entire tech stack.</p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/ZMrhundIleA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2012/12/28/motivation-and-incentive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2012/12/28/motivation-and-incentive/</feedburner:origLink></item>
		<item>
		<title>Is your CDN intentionally hurting your performance?</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/CeI_8ZjIaCg/</link>
		<comments>http://torbit.com/blog/2012/12/27/is-your-cdn-intentionally-hurting-your-performance/#comments</comments>
		<pubDate>Thu, 27 Dec 2012 16:00:34 +0000</pubDate>
		<dc:creator>Josh Fraser</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=3927</guid>
		<description><![CDATA[Over the last few years, I&#8217;ve heard countless stories from customers who have been surprised to learn that their CDN didn&#8217;t have Gzip enabled. It sounds crazy since Gzip is one of the simplest tricks to make your site load faster. CDNs promise to make your site faster, but they also charge by the byte. [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last few years, I&#8217;ve heard countless stories from customers who have been surprised to learn that their CDN didn&#8217;t have Gzip enabled.  It sounds crazy since Gzip is one of the simplest tricks to make your site load faster. CDNs promise to make your site faster, but they also charge by the byte.  </p>
<p>Think about that.  </p>
<p>CDNs make more money when they serve larger files, more frequently.  </p>
<p>Why are CDNs not doing more to enable compression for their customers?  Sadly, as it often turns out, to find the answer you simply need to follow the money. The larger the files you send, the more money your CDN makes. This puts their business goals directly at odds with their marketing that says they want to help make your website fast. </p>
<p>I decided to dig into the data to see how wide-spread the problem is.   I recently <a href="http://calendar.perfplanet.com/2012/is-your-cdn-intentionally-hurting-your-performance/">shared the results</a> on the <a href="http://calendar.perfplanet.com/2012/">Performance Calendar</a> which is a great resource for anyone who cares about performance.  If you use a CDN or have ever questioned if you&#8217;re getting the performance you&#8217;re paying for, I hope you&#8217;ll <a href="http://calendar.perfplanet.com/2012/is-your-cdn-intentionally-hurting-your-performance/">check out the full article</a>.  </p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/CeI_8ZjIaCg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2012/12/27/is-your-cdn-intentionally-hurting-your-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2012/12/27/is-your-cdn-intentionally-hurting-your-performance/</feedburner:origLink></item>
		<item>
		<title>Now everyone in your company can use Torbit</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/cYKQQRowLjM/</link>
		<comments>http://torbit.com/blog/2012/11/16/multiuser-support/#comments</comments>
		<pubDate>Sat, 17 Nov 2012 02:06:44 +0000</pubDate>
		<dc:creator>Jon Fox</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=3907</guid>
		<description><![CDATA[Here at Torbit we&#8217;re always working to make our Insight tool more useful and more accessible. The performance of your site is critical for your site&#8217;s success as we&#8217;ve seen time and again the strong correlation between speed and user engagement. Knowing just how important speed is to your business has always been a core [...]]]></description>
			<content:encoded><![CDATA[<p>Here at Torbit we&#8217;re always working to make our Insight tool more useful and more accessible.  The performance of your site is critical for your site&#8217;s success as we&#8217;ve seen time and again the strong correlation between speed and user engagement.  Knowing just how important speed is to your business has always been a core part of our product.  Tracking your performance is critical for everyone in the organization from the frontend developers to the CEO, and now we&#8217;ve made it easier than ever to have everyone involved in monitoring your site&#8217;s performance.</p>
<p>We&#8217;re happy to announce that you can now have multiple users in your Torbit account.  This allows everyone in the company to have their own login and still access all the critical performance data Torbit provides.  To add new users to your account simply click Account -> Manage Accounts -> Settings and find the &#8220;Add a User&#8221; section.  Here you simply provide the new user&#8217;s email address and, optionally, their job title. They&#8217;ll then be invited to create a Torbit account or immediately added to your account if they&#8217;re already a Torbit user.  You can see what this looks like in the screen shot below.</p>
<p><a href="http://torbit.com/blog/wp-content/uploads/2012/11/torbit-multi-user21.png"><img src="http://torbit.com/blog/wp-content/uploads/2012/11/torbit-multi-user21.png" alt="" title="Torbit Multi-user" width="738" height="346" class="aligncenter size-full wp-image-3924" /></a></p>
<p>This has been one of our most requested features and we&#8217;re excited to make it available.  We hope you&#8217;ll take this chance to share your performance data with your entire team.</p>
<p>Just one more step towards making the web faster.</p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/cYKQQRowLjM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2012/11/16/multiuser-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2012/11/16/multiuser-support/</feedburner:origLink></item>
		<item>
		<title>Happy Birthday Torbit</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/YxDduUcoXXk/</link>
		<comments>http://torbit.com/blog/2012/10/10/happy-birthday-torbit/#comments</comments>
		<pubDate>Wed, 10 Oct 2012 22:50:58 +0000</pubDate>
		<dc:creator>Josh Fraser</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=3899</guid>
		<description><![CDATA[Two years ago today, Jon and I met at Old Chicago and committed to each other to start Torbit. It was a few weeks later when we formally signed the paperwork, but we think of October 10th as our company birthday. Our founding date has special significance to us. We started the company on 10/10/10. [...]]]></description>
			<content:encoded><![CDATA[<p>Two years ago today, Jon and I met at Old Chicago and committed to each other to start Torbit.  It was a few weeks later when we formally signed the paperwork, but we think of October 10th as our company birthday.  Our founding date has special significance to us.  We started the company on 10/10/10.  In binary, that&#8217;s 42.  If you don&#8217;t get the significance, just Google &#8220;the answer to life, the universe and everything&#8221;. </p>
<p>We&#8217;ve come a long way over the last two years.  We&#8217;ve moved the company from Boulder, Colorado to Sunnyvale, California.  And more recently, we&#8217;ve found a home in San Mateo.  The team has grown.  We&#8217;ve launched new products.  We&#8217;ve raised money from some incredible investors.  More importantly, we&#8217;ve helped thousands of websites measure and improve their site speed.  We&#8217;ve worked with everyone from multi-billion dollar corporations to top internet retailers to top 100 sites.</p>
<p>In April this year, we launched Torbit Insight.  For the first time we made it possible for any website to quickly find out how much website performance is impacting their revenue.  In the last few months we&#8217;ve seen website performance change from being a technical metric to a business metric.  Our users are not just developers and operations guys (although we have plenty of those too!).  We have C-level execs and VPs using our data to drive real business decisions for their companies.  With Torbit Insight, we&#8217;ve helped our customers evaluate their CDN, pick locations for their next data center, catch issues when they deployed bad code and finally quantify how much speed matters for their business.  Torbit is used by hundreds of brands you know and we measure billions of pageviews every month.  In fact, if you look at our ratio of pageviews per engineer it&#8217;s at over 2 billion!  Not even the internet giants have a ratio that high.</p>
<p>To appreciate this milestone, it&#8217;s good to revisit why we built Torbit in the first place.  We started out with an audacious goal.  We wanted to make the web faster.  We have a clearer sense of purpose today than when we started.  In spite of all the improvements in browser technology and higher connection speeds, websites are slower than ever.  We&#8217;re passionate about making the web faster and it&#8217;s that motivation that drives everything we do.     </p>
<p>The last two years have been amazing.  I am privileged to get to come to work everyday with the best team in the world.  I couldn&#8217;t be more proud of our team and what they have accomplished.  I also know that we&#8217;re just getting started.  Our best days are ahead of us and I couldn&#8217;t be more excited to see what the coming years have in store for us.  Thanks for tagging along as we do what we love most &#8212; helping people go fast!  </p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/YxDduUcoXXk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2012/10/10/happy-birthday-torbit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2012/10/10/happy-birthday-torbit/</feedburner:origLink></item>
		<item>
		<title>Saving lives</title>
		<link>http://feedproxy.google.com/~r/torbit/~3/4RsQoZYZ4i8/</link>
		<comments>http://torbit.com/blog/2012/09/24/saving-lives/#comments</comments>
		<pubDate>Mon, 24 Sep 2012 09:00:35 +0000</pubDate>
		<dc:creator>Josh Fraser</dc:creator>
		
		<guid isPermaLink="false">http://torbit.com/blog/?p=3890</guid>
		<description><![CDATA[I finally got around to reading the Steve Jobs biography by Walter Isaacson that&#8217;s been sitting on my bookshelf for months. It&#8217;s a great read and I&#8217;ve found myself captivated by the stories and lessons that can be found in Steve Jobs&#8217; life. One story in particular jumped out at me: One day Jobs came [...]]]></description>
			<content:encoded><![CDATA[<p>I finally got around to reading the <a href="http://www.amazon.com/Steve-Jobs-Walter-Isaacson/dp/1451648537">Steve Jobs biography by Walter Isaacson</a> that&#8217;s been sitting on my bookshelf for months.  It&#8217;s a great read and I&#8217;ve found myself captivated by the stories and lessons that can be found in Steve Jobs&#8217; life.  One story in particular jumped out at me:</p>
<blockquote><p>One day Jobs came into the cubicle of Larry Kenyon, an engineer who was working on the Macintosh operating system, and complained that it was taking too long to boot up. Kenyon started to explain, but Jobs cut him off. “If it could save a person’s life, would you find a way to shave ten seconds off the boot time? he asked. Kenyon allowed that he probably could. Jobs went to a whiteboard and showed that if there were five million people using the Mac, and it took ten seconds extra to turn it on every day, that added up to three hundred million or so hours per year that people would save, which was the equivalent of at least one hundred lifetimes saved per year. “Larry was suitably impressed, and a few weeks later he came back and it booted up twenty-eight seconds faster,” Adkinson recalled. “Steve had a way of motivating by looking at the bigger picture.”</p></blockquote>
<p>At Torbit, we believe that speed really matters.  We have a simple, but audacious goal.  We think the internet is too slow and we&#8217;re doing our best to fix it.  It&#8217;s humbling to think about the collective amount of time (and lives) we&#8217;ve already helped save.  It&#8217;s the reason why we founded this company.  It&#8217;s the motivation behind what we do every day.</p>
<img src="http://feeds.feedburner.com/~r/torbit/~4/4RsQoZYZ4i8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://torbit.com/blog/2012/09/24/saving-lives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://torbit.com/blog/2012/09/24/saving-lives/</feedburner:origLink></item>
	</channel>
</rss>
