<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3" -->
<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/"
	>

<channel>
	<title>Insite Out &#124; Website optimization news, tips</title>
	<link>http://insite-out.com</link>
	<description>Tips</description>
	<pubDate>Sat, 14 Jun 2008 16:22:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3</generator>
	<language>en</language>
			<item>
		<title>Search Marketing: Optimize your HTML Newsletters for Maximum Compatibility</title>
		<link>http://insite-out.com/2008/06/08/search-marketing-optimize-your-html-newsletters-for-maximum-compatibility/</link>
		<comments>http://insite-out.com/2008/06/08/search-marketing-optimize-your-html-newsletters-for-maximum-compatibility/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 17:21:47 +0000</pubDate>
		<dc:creator>Insite Out</dc:creator>
		
		<category><![CDATA[HTML]]></category>

		<category><![CDATA[Search Marketing]]></category>

		<category><![CDATA[e-mail]]></category>

		<category><![CDATA[optimization]]></category>

		<category><![CDATA[newsletters]]></category>

		<guid isPermaLink="false">http://insite-out.com/2008/06/08/search-marketing-optimize-your-html-newsletters-for-maximum-compatibility/</guid>
		<description><![CDATA[Any decent search marketing campaign will, at some point, have to entertain the effectiveness of promoting e-newsletters.  The real bottom line is that marketing your site&#8217;s content by way of e-mail promotions can only serve to drive prospective visitors to your site (if not for the simple fact that providing less opportunites for potential [...]]]></description>
			<content:encoded><![CDATA[<p>Any decent search marketing campaign will, at some point, have to entertain the effectiveness of promoting e-newsletters.  The real bottom line is that marketing your site&#8217;s content by way of e-mail promotions can only serve to drive prospective visitors to your site (if not for the simple fact that providing less opportunites for potential visitors means, well, less potential visitors).</p>
<p>E-mail clients are way more finicky and moody than web browsers, so, the real question&#8211;for the purposes of this post, at least&#8211;is how market your e-newsletters to largest possible audience.</p>
<p>Here are six simple tips on how to best optimize how your HTML newsletters are coded to reach the widest possible audience: </p>
<ol>
<li><a href="#html3">Don&#8217;t be so fancy&#8211;code in HTML 3.2</a></li>
<li><a href="#download">Do I have to download another file&#8211;again?!</a></li>
<li><a href="#head">Gain control&#8211;lose your HEAD</a></li>
<li><a href="#inline">Use inline styles</a></li>
<li><a href="#duplicate">Duplicate your styles when using anchors</a></li>
<li><a href="#css1">Use CSS 1&#8211;sparingly</a></li>
</ol>
<p><strong>1.  <a name="html3">Code in HTML 3.2</a></strong></p>
<p>HTML has made some great advances since its inception.  <a href="http://www.w3.org/html/wg/html5/" title="W3C Working Draft of the HTML 5 spec">The HTML 5 spec</a> includes <a href="http://www.w3.org/html/wg/html5/#canvas">the canvas element</a>, which essentially gives you the ability to graph points and draw vector lines on-the-fly.  I mean, how freaking cool is that?!</p>
<p>Newsletter technology, however, is not so freaking cool.  Most e-mail clients tend to strip out HTML elements, and/or refactor your code, destroying most modern layouts based on silly things like &#8220;standards,&#8221; and &#8220;compliance.&#8221;</p>
<p>The solution?  Code your newsletter under <a href="http://www.w3.org/TR/REC-html32">the HTML 3.2 specification</a>.  This basically means using TABLEs to control page layout and minimal <a href="http://www.w3.org/TR/REC-CSS1" title="Cascading Style Sheets, level 1">CSS1</a> to define styles.  In other words:  technology circa 1998.  (There&#8217;s nothing quite like living in the past.)</p>
<p><strong>2.  <a name="head">Don&#8217;t include files</a></strong></p>
<p>To help combat spam, most e-mail clients these days will ask if you want to load images, or download any supporting files.  (One way for spammers to tell if messages are actually opened is if an HTTP request is made to their servers for supporting files.)</p>
<p>What does this mean for the honest newsletter developer?  Well, you should already be avoiding JavaScript files (like the black plague), but for simple styling, don&#8217;t link out to external files:</p>
<p><code class="block"><br />
&lt;link rel="stylesheet" type="text/css" media="all" href="http://server.com/newsletter.css" /&gt;<br />
</code></p>
<p>Define them in your document:</p>
<p><code class="block"><br />
&lt;head&gt;<br />
&lt;style type="text/css" media="all"&gt;<br />
p {<br />
&nbsp;&nbsp;font:11px Georgia, serif;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
</code></p>
<p><strong>3.  <a name="head">Include nothing in the HEAD</a></strong></p>
<p>Most developers are used to lumping external files and META data in the <code>&lt;head&gt;</code> of the document.  This can have its advantages (<a href="http://insite-out.com/2007/11/13/javascript-optimizing-your-code-to-run-faster/#load-scripts-last">or, disadvantages</a>), but must simply be avoided when developing newsletters.</p>
<p>Why?  Mail clients like to add their own e-mail headers, so&#8211;while some will keep your headers&#8211;most will either modify them, or strip them out entirely, so it&#8217;s better to simply think of anything contained in the <code>&lt;head&gt;</code> as not belonging to you.</p>
<p>So, instead of normally defining a style, like:</p>
<p><code class="block"><br />
&lt;head&gt;<br />
&lt;style type="text/css" media="all"&gt;<br />
p {<br />
&nbsp;&nbsp;font:11px Georgia, serif;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
</code></p>
<p>Do so within the <code>&lt;body&gt;</code> of your document:</p>
<p><code class="block"><br />
&lt;body&gt;<br />
&lt;style type="text/css" media="all"&gt;<br />
p {<br />
&nbsp;&nbsp;font:11px Georgia, serif;<br />
}<br />
&lt;/style&gt;<br />
</code></p>
<p>Your <code>&lt;head&gt;</code> belongs to them.</p>
<p><strong>4.  <a name="inline">Use inline styles</a></strong></p>
<p>While some most mail clients will read your stylesheets, many will simply not.  So, it&#8217;s best if you simply ignore them;  and, simply do not rely on CSS-based layouts.  (Think of how your document would render with the stylesheet completely stripped out for a sense as to how your CSS-based newsletter will look on some e-mail clients.)</p>
<p>So, if you have to use CSS&#8211;as many of us do&#8211;do so inline.  Instead of defining classes or elements:</p>
<p><code class="block"><br />
&lt;style type="text/css" media="all"&gt;<br />
p {<br />
&nbsp;&nbsp;font:11px Georgia, serif;<br />
}<br />
&lt;/style&gt;<br />
</code></p>
<p>Define each element as you go:</p>
<p><code class="block"><br />
&lt;p style="font:11px Georgia, serif"&gt;<br />
</code></p>
<p>The result is more code, that works in more e-mail clients.</p>
<p><strong>5.  <a name="duplicate">Duplicate your styles when using anchors</a></strong></p>
<p>Some clients will strip out styles for anchors, or refuse to inherit the parent style, so&#8211;even if you&#8217;re explicitly defining how your anchors should look:</p>
<p><code class="block"><br />
&lt;a href="http://server.com" style="font:11px Georgia, serif"&gt;I am so enticing you&gt;/a&gt;<br />
</code></p>
<p>Define the parent container to look the same:</p>
<p><code class="block"><br />
&lt;td style="font:11px Georgia, serif"&#038;gt<br />
&lt;a href="http://server.com" style="font:11px Georgia, serif"&gt;I am so enticing you&lt;/a&gt;<br />
&lt;/td&gt;<br />
</code></p>
<p><strong>6.  <a name="css1">Use CSS 1&#8211;sparingly</a></strong></p>
<p>While some mail clients are CSS-friendly, many are not.  For example, GMail and Outlook 2007 do not support CSS-based layouts, nor background images.  (Many mail clients do support background images, just use them gracefully, such that there absence doesn&#8217;t take away from your message.)</p>
<p>Even though some mail clients will render the above examples as you would expect, others will not.  Instead of explicitly declaring the <code>font</code> style, break that down into specific attributes:</p>
<p><code class="block"><br />
&lt;a href="http://server.com" style="font-size:11px; font-family:Georgia, serif"&gt;I am so enticing you&gt;/a&gt;<br />
</code></p>
<p>Your overall codebase will larger, and more bloated, but these guidelines will help grauntee your HTML newsletters will be optimized for maximum compatibility.</p>
]]></content:encoded>
			<wfw:commentRss>http://insite-out.com/2008/06/08/search-marketing-optimize-your-html-newsletters-for-maximum-compatibility/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript: How to Optimize Your Code to Run Faster</title>
		<link>http://insite-out.com/2007/11/13/javascript-optimizing-your-code-to-run-faster/</link>
		<comments>http://insite-out.com/2007/11/13/javascript-optimizing-your-code-to-run-faster/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 20:32:14 +0000</pubDate>
		<dc:creator>Insite Out</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[optimization]]></category>

		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://insite-out.com/2007/11/13/javascript-optimizing-your-code-to-run-faster/</guid>
		<description><![CDATA[JavaScript and the web industry go hand-in-hand.  It was booming
during the dot-boom, and it took somewhat of a backseat position during the dot-crash.  (If you knew how to create rollovers in 1997, or DHTML apps in 1998, there was no shortage of work for you.)
The last couple of years has certainly seen JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p>JavaScript and the web industry go hand-in-hand.  It was booming<br />
during the dot-boom, and it took somewhat of a backseat position during the dot-crash.  (If you knew how to create rollovers in 1997, or DHTML apps in 1998, there was no shortage of work for you.)<br />
The last couple of years has certainly seen JavaScript take center stage again on the wings of overused buzzwords such as <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> and <acronym title="JavaScript Object Notation">JSON</acronym>, but–with the emergence of <a href="http://en.wikipedia.org/wiki/Web_3">Web 3.0</a>–getting your code leaner and meaner will mean you can run more robust applications on a greater variety of emerging platforms.</p>
<p>That, too, was the goal of Web 2.0, but–dareisay–part of the goal of Web 3.0 is what Java failed to deliver ten years ago: write once, read everywhere. (Can I script my fridge to tell me when it&#8217;s out of juice yet?)</p>
<p>Regardless if you&#8217;re like me (cough, skeptical), you still have to think of processing large swathes of data, regardless of platform.  Mobile devices and desktops are the new web browser, and the unknown platform of tomorrow is the platform of today. Developing a successful JavaScript engine means optimizing it to run as fast as possible, quickly delivering what the client is requesting: your content.</p>
<p>In no particular order, here are 11 improvements you can make to optimize your scripts to run faster:</p>
<ol>
<li><a href="#minify-code">Less is more–minify your code</a></li>
<li><a href="#fewer-http-requests">Ask for things less–make fewer HTTP requests</a></li>
<li><a href="#include-less-code">Take only what you need with you–only include the code you need</a></li>
<li><a href="#stop-traversing-trees">Down with DOM–traverse trees as little as possible</a></li>
<li><a href="#faster-than-dom">Up with DHTML–faster than the Document Object Model</a></li>
<li><a href="#string-concatenation-takes-time">Don&#8217;t concat–join!</a></li>
<li><a href="#json-uses-less-code">Code in JSON–data storage at lower costs</a></li>
<li><a href="#destroy-your-data">Clean up your garbage–destroy data, free memory</a></li>
<li><a href="#yield-to-browser">Don&#8217;t let me keep you waiting–how scripts slow page load, and what you can do about it</a></li>
<li><a href="#user-indication">Let me tell you something–indicate to users what you&#8217;re doing</a></li>
<li><a href="#load-scripts-last">Show your site first–load your scripts last</a></li>
</ol>
<p><strong><a title="minify-code" name="minify-code"></a>1. Less is more</strong></p>
<p>It&#8217;s obvious (or, should be) that less code runs faster, but it bears repeating: minify your code.</p>
<p>One of my early JavaScript gigs was to minify about 1000 lines of code to meet a requirement of 40k.  The original file was over 90k. Changing all name-spaces (variable names, function names, etc.) to 1-2 characters, and removing all <code>\n</code>, <code>\r</code> and <code>\t</code> from the file brought it down to 37k.</p>
<p>Those numbers may be negligible now that we&#8217;re no longer 56kbps optimizing for 33kbps, but getting your code to run 2.5 times faster is still 2.5 faster, and your client could conceivably be a mobile device that&#8217;s still chugging-away at blistering, modem-like speeds.</p>
<p>There are some server-side utilities that can aid you in minifying your code.  If you run PHP, <a href="http://code.google.com/p/minify/">you may want to consider the JSMin Library</a>.</p>
<p><strong><a title="fewer-http-requests" name="fewer-http-requests"></a>2. Ask for things less</strong></p>
<p>Seriously.  Stop being so selfish.  You&#8217;re always asking for things.  Like files.</p>
<p>Each time you request a file from the server–be it an image, a <acronym title="Cascading Style Sheets">CSS</acronym> file, or <acronym title="JavaScript">JS</acronym> document–the server has to make sure it&#8217;s there.  Which means–even if the file is cached–an HTTP request-response needs to take place before the client receives the header telling it that “this file has not changed,” and “it&#8217;s okay to use the cached version.”</p>
<p>This obviously takes time.</p>
<p>So–in terms of download time–the more JS includes you have, the slower your page will be.  It&#8217;s better to place all your JavaScript in one file; even if that file is rather large.  The browser makes just one HTTP request to download it, and simply moves on.</p>
<p><strong><a title="include-less-code" name="include-less-code"></a>3. Take only what you need with you</strong></p>
<p>JavaScript files are often bloated with stuff that isn&#8217;t needed at the time–and especially if you&#8217;re using a framework like <a href="http://www.prototypejs.org/">Prototype</a>, <a href="http://jquery.com/">jQuery</a> or <a href="http://extjs.com/">Ext JS</a>.  Those frameworks are neat, and provide a lot of cool features, but often come with components you won&#8217;t need for your app, so–even if you are using a framework–try to create custom builds each time you use them, such that you only take what you need with you.</p>
<p>An alternative to loading everything all at once, or creating one huge master file, is to load JS documents on demand:<br />
<code class="block"><br />
js_include:function(src) {<br />
&nbsp;&nbsp;if(document.createElement) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;js=document.createElement('script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;js.setAttribute('type','text/javascript');<br />
&nbsp;&nbsp;&nbsp;&nbsp;js.setAttribute('src',src);<br />
&nbsp;&nbsp;&nbsp;&nbsp;document.getElementsByTagName('head')[0].appendChild(js);<br />
&nbsp;&nbsp;}<br />
}<br />
</code></p>
<p>So–for example–say you happen to have a name-space that contains all your forms-processing logic; you can test to see if it exists, and call its library if not:<br />
<code class="block"><br />
if(!window.MyFormsObject) {<br />
&nbsp;&nbsp;js_include('/js/lib/myFormsLib.js');<br />
}<br />
</code></p>
<p><strong><a title="stop-traversing-trees" name="stop-traversing-trees"></a>4. Down with DOM</strong></p>
<p>Web 2.0 saw the popularity of the Document Object Model (DOM), and the HTML document as an XML tree.  Parents have children, children have siblings–what a lovely, nuclear family we have here.<br />
From a JavaScript perspective, however, traversing the DOM takes time and resources.  This especially becomes an issue if you&#8217;re developing widgets for unknown environments. If you simply must traverse the DOM to <code>getElementsByClassName</code> or <code>getElementsByTagName</code>, do so within your pre-defined name-space.</p>
<p>For example, let&#8217;s say your app exists within a name-space called <code>myUniqueAppName</code>, and you want to read or target all <code>a</code> elements within that app.  Instead of traversing the tree for the entire document–which can potentially slog through a ton of meaningless nodes (especially if your widget is, say, on a social networking site)–drill down from your name-space:</p>
<p><code class="block"><br />
var myNameSpace=document.getElementsById('myUniqueAppName');<br />
var myAnchorTags=myNameSpace.getElementsByTagName('a');<br />
for(var i=0; i&lt;myAnchorTags.length; i++) {<br />
&nbsp;&nbsp;// do something<br />
}<br />
</code></p>
<p>If you read <a href="http://insite-out.com/2007/10/29/javascript-accessing-dom-elements-an-existential-problem/">my post on centralizing DOM accessibility</a>, then you should be familiar with more secure methods of normalization:</p>
<p><code class="block"><br />
var dom = {<br />
&nbsp;&nbsp;getElementById:function(id, tag) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(document.getElementById &amp;&amp; document.getElementById(id)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return document.getElementById(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(document.layers &amp;&amp; document.layers[id]) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return document.layers[id];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(document.all &amp;&amp; document.all[id]) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return document.all[id];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(this.createElement) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag=(tag)? tag : 'div';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el=this.createElement(tag);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.setAttribute('id', id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.getElementsByTagName('body')[0].appendChild(el);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return el;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return null;<br />
&nbsp;&nbsp;},<br />
&nbsp;&nbsp;getElementsByTagName:function(tag, el) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;var el=(el)? el : document;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(el.getElementsByTagName) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return el.getElementsByTagName(tag);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return null;<br />
&nbsp;&nbsp;}<br />
};<br />
</code></p>
<p>Which can help centralize your JS such that:</p>
<p><code class="block"><br />
var myAnchorTags=dom.getElementsByTagName('a', dom.getElementById('myUniqueAppName'));<br />
</code><br />
It&#8217;s always better to reference elements directly using <code>document.getElementById</code>, but if you have to: traversing branches to reach a twig is faster than traversing the entire tree.</p>
<p><strong><a title="faster-than-dom" name="faster-than-dom"></a>5. Up with <acronym title="Dynamic Hyper Text Markup Language">DHTML</acronym></strong></p>
<p>Any meaningful JavaScript application dynamically builds objects, elements and strings. Using the DOM to do so may have a certain “cool” factor:<br />
<code class="block"><br />
function getImage(src, width, height, alt, toElement) {<br />
&nbsp;&nbsp;var myIMG=document.createElement('img');<br />
&nbsp;&nbsp;myIMG.setAttribute('src', src);<br />
&nbsp;&nbsp;myIMG.setAttribute('width', width);<br />
&nbsp;&nbsp;myIMG.setAttribute('height', height);<br />
&nbsp;&nbsp;myIMG.setAttribute('alt', alt);<br />
&nbsp;&nbsp;toElement.appendChild(myIMG);<br />
}<br />
</code></p>
<p>But the DHTML solution simply runs faster:</p>
<p><code class="block"><br />
function getImage(src, width, height, alt, toElement) {<br />
&nbsp;&nbsp;toElementtoElement.innerHTML='&lt;img src="'+src+'" width="'+width+'"' height="'+height+'" alt="'+alt+'" /&gt;';<br />
}<br />
</code></p>
<p>And–in this case–also uses less code.</p>
<p><strong><a title="string-concatenation-takes-time" name="string-concatenation-takes-time"></a>6. Don&#8217;t concat–join!</strong></p>
<p>When you&#8217;re dynamically building strings, don&#8217;t use concatination to build them (as I did in the previous example).  String concatination can be memory-intensive–it&#8217;s much better to store your data as array elements:</p>
<p><code class="block"><br />
var myIMG=new Array('&lt;img src="', src, '" width="', width, '"' height="', height, '" alt="', alt, '" /&gt;');<br />
</code></p>
<p>If you need to add items to it later, you can use <code>Array.push()</code>:</p>
<p><code class="block"><br />
myIMG.push('&lt;br /&gt;&lt;strong&gt;', caption, '&lt;/strong&gt;');<br />
</code></p>
<p>Then, when it&#8217;s time to publish to screen, you can simply:</p>
<p><code class="block"><br />
myElement.innerHTML=myIMG.join('');<br />
</code></p>
<p><code>Array.join()</code> simply <em>joins</em> all array elements together into one string. Since its a native function, it concatinates elements into strings faster than you can do so manually, which makes your script run faster.</p>
<p><strong><a title="json-uses-less-code" name="json-uses-less-code"></a>7. Code in JSON</strong></p>
<p>JavaScript Object Notation, or JSON, is a short-hand form of data-storage in JavaScript. In other words, you can store objects, arrays, strings, numbers and boolean values using less code.<br />
As such, it costs less KB in terms of download time, and runs faster. The array in the previous example looks like this in JSON:</p>
<p><code class="block"><br />
var myIMG=['&lt;img src="', src, '" width="', width, '"' height="', height, '" alt="', alt, '" /&gt;'];<br />
</code></p>
<p>(You can <a href="http://json.org/">read more about JSON at json.org</a>.)</p>
<p><strong><a title="destroy-your-data" name="destroy-your-data"></a>8. Clean up your garbage</strong></p>
<p>Excuse me, but I believe you left your array lying around.  Do you expect me to clean that up, or were you planning on getting around to it?</p>
<p>Consider the last few examples.  By the end of example 6, you would&#8217;ve printed your HTML code to screen, and your job would&#8217;ve been complete.</p>
<p>But, is it?  What about the array–where did it go?</p>
<p>The truth is:  it hasn&#8217;t gone anywhere.  The contents of your array may have been printed to screen, but the array is still sitting in memory, watching its nails grow.  This means the browser is storing that data for no reason whatsoever, slowing down any subsequent operations.<br />
Therefore, it&#8217;s always better to eliminate the contents of your array after you&#8217;re done with it:</p>
<p><code class="block"><br />
myElement.innerHTML=myIMG.join('');<br />
myIMG.length=0;<br />
</code></p>
<p>By setting the <code>Array.length</code> property to <code>0</code>, the array effectively loses memory of its contents, and frees up the browser to run that much faster.<br />
If you&#8217;re like me, and like to normalize behavior like this, you can extend the <code>Array</code> object to perform this operation:</p>
<p><code class="block"><br />
Array.prototype.destroy=function() {<br />
&nbsp;&nbsp;this.length=0;<br />
&nbsp;&nbsp;return this;<br />
}<br />
</code></p>
<p>In action, this would look like:</p>
<p><code class="block"><br />
myElement.innerHTML=myIMG.join('');<br />
myIMG.destroy();<br />
</code></p>
<p>You may also have a <code>String</code> or <code>Object</code> that no longer contains any meaningfull data:</p>
<p><code class="block"><br />
Object.prototype.destroy=function() {<br />
&nbsp;&nbsp;this.length=0;<br />
&nbsp;&nbsp;return this;<br />
}<br />
</code></p>
<p>This especially becomes important when you&#8217;re parsing objects that contain a lot of data.  For example, let&#8217;s say you have an AJAX application returns a JSON object containing thousands of entries:</p>
<p><code class="block"><br />
var myJSON=json.parse(ajax.response);<br />
</code></p>
<p>Once you&#8217;ve taken that data, dressed it up to look all pretty, and sent it out to party, you will definitely want to discard it:</p>
<p><code class="block"><br />
var myJSON=json.parse(ajax.response);<br />
// do something fun<br />
myJSON.destroy();<br />
</code></p>
<p>Less data the browser stores, the faster it runs.</p>
<p><strong><a title="yield-to-browser" name="yield-to-browser"></a>9. Don&#8217;t let me keep you waiting</strong></p>
<p>Whenever the browser executes one of your scripts, it patiently waits with its hands in its pockets until your script is done.  In other words, it stops loading the rest of the page while your script is doing its thing.<br />
This can be negligible if your script does little, but will very directly effect the download time for your entire document if you&#8217;re running a lot of computations, or using HTTP to fetch data.</p>
<p>Since the browser is kind enough to wait for your script to run, you should be nice enough to tell the browser if your script may take time to run.  For example, let&#8217;s say you&#8217;re embedding a Flash widget somewhere at the top of your document, and you&#8217;re using JavaScript to draw it (which should be standard procedure these days):</p>
<p><code class="block"><br />
var myFlashObject=new FlashObject("myFlashFile.swf");<br />
myFlashObject.param("quality","high");<br />
myFlashObject.draw();<br />
</code></p>
<p>So far, so good. But, Flash can take time to draw, and if your app has to load a lot of assets, your page will just h-a-n-g there until it&#8217;s done.<br />
You can, however, tell the browser to stop waiting for your script to finish by using <code>setTimeout()</code>:</p>
<p><code class="block"><br />
var myFlashObject=new FlashObject("myFlashFile.swf");<br />
myFlashObject.param("quality","high");<br />
setTimeout('myFlashObject.draw()', 0);<br />
</code></p>
<p>This tells the client to wait exactly 0 milliseconds before executing your function (<code>myFlashObject.draw()</code>).<br />
The fact that it&#8217;s zero time spent is almost irrelevant–that you&#8217;re telling the browser to wait <em>at all</em> wakes it up from its patient slumber, and sends it back to retrieving the rest of your document; leaving your script to continue running in the background.</p>
<p>This speeds up both download time and generates better user-experience.<br />
The first parameter of <code>setTimeout()</code> is a string, by default, so if you&#8217;re passing parameters to your routine, you have to rely on concatenation to pass your data:</p>
<p><code class="block"><br />
setTimeout('myFlashObject.draw('+myParam+')', 0);<br />
</code></p>
<p>Rebuilding your function by way of concatenation can tack some extra time onto your script, so if you need to pass parameters to your function, you may find it faster to define an inline function:</p>
<p><code class="block"><br />
setTimeout(function() { myFlashObject.draw(myParam); }, 0);</code><br />
This way, you don&#8217;t keep the browser waiting for you when it can otherwise be serving content to the client.</p>
<p><strong><a title="user-indication" name="user-indication"></a>10. Let me tell you something</strong></p>
<p>People like seeing reactions to actions they take.  If I press a button for the elevator to come pick me up, and the button doesn&#8217;t light up, I start pressing it repeatedly, thinking “it&#8217;s not working.”</p>
<p>The same is true with application development–if not more so.  A user-initiated action may take time to load; especially if your script is making a round-trip to the server.</p>
<p>Part of speeding up your application is giving users the impression that things are going faster than they are.  On the CSS side of things, this may mean assigning background colors to elements whose pixel-majority contains that color (HEX/RGB colors require zero HTTP requests, so they draw immediately);  on the JavaScript side, this means providing visual cues as to what it is you&#8217;re actually doing.</p>
<p>Simple text messages like “Loading…” or “Processing…” suffice, but small animations offer a light-weight solutions to indicate to the user that time is <em>actively</em> being spent.</p>
<p><strong><a title="load-scripts-last" name="load-scripts-last"></a>11. Show your site first</strong></p>
<p>During the boom days, most developers got into the habit of including their scripts in the <code>&lt;head&gt;</code> of their documents.</p>
<p>While this was typically done to pre-load elements like images for effects like rollovers, this technique has gained widespread acceptance as common practice.</p>
<p>The downfall here is that the browser is busy processing logic, and/or making HTTP calls, before showing the user anything about the page they requested.  While your overall download speed may or may not differ in the end, the longer it takes to display any content to the user, the “longer” your page load is.</p>
<p>Therefore, it is much more optimal to load your scripts towards the bottom of your document; or based on certain events (<code>onload</code>, <code>onclick</code>, etc.); or <a href="#include-less-code">just before you absolutely need them</a>.</p>
<p>Your client is your user–and users want to see things first, do things second–so the only data you should include in the <code>&lt;head&gt;</code> of your document are CSS and META data.</p>
]]></content:encoded>
			<wfw:commentRss>http://insite-out.com/2007/11/13/javascript-optimizing-your-code-to-run-faster/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript: Accessing nodes, objects and properties&#8211;the existential problem</title>
		<link>http://insite-out.com/2007/10/29/javascript-accessing-dom-elements-an-existential-problem/</link>
		<comments>http://insite-out.com/2007/10/29/javascript-accessing-dom-elements-an-existential-problem/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 02:03:15 +0000</pubDate>
		<dc:creator>Insite Out</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[AJAX]]></category>

		<category><![CDATA[DOM]]></category>

		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://insite-out.com/2007/10/29/javascript-accessing-dom-elements-an-existential-problem/</guid>
		<description><![CDATA[Just finished attending the 2007 Widget Summit.  (My flight back to New York was actually delayed&#8211;which prompted me writing this&#8211;so, props, JetBlue.)
I have to say: the summit was lots of fun. There were some cool presentations showcasing emerging products built on forward-moving technologies based on yesterday&#8217;s tears.  Who could ask for anything more. [...]]]></description>
			<content:encoded><![CDATA[<p>Just finished attending the <a href="http://widgetsummit.com/" title="Widget Summit, 2007">2007 Widget Summit</a>.  (My flight back to New York was actually delayed&#8211;which prompted me writing this&#8211;so, props, <a href="http://jetblue.com/" title="Jet Blue Airlines">JetBlue</a>.)</p>
<p>I have to say: the summit was lots of fun. There were some cool presentations showcasing emerging products built on forward-moving technologies based on yesterday&#8217;s tears.  Who could ask for anything more.  (That&#8217;s not really a question.)</p>
<p>One thing that stuck out at me, however, was the seemingly lack of pre-checking for elements, objects and properties before evoking them. (Although, <a href="http://widgetsummit.com/speakers/mattdrance/" title="Matt Drance">Matt Drance</a>, who presented <a href="http://widgetsummit.com/sessions/apple-dashboard-widgets/" title="Matt Drance on Apple Dashboard Widgets, Widget Summit, 2007">Apple Dashboard Widgets</a> and <a href="http://widgetsummit.com/sessions/iphone-widgets/" title="Matt Drance on iPhone Development at Widget Summit, 2007">iPhone Development</a>, did repeatedly stress the importance of this point.)</p>
<p>As a child of the browser wars, not checking if an element is first there seems like an existential mistake;  especially when you&#8217;re developing widgets. Why would you call upon a DOM node if you&#8217;re not sure it&#8217;s actually there first? How can your app depend upon the property of a particular object when you&#8217;re not certain it exists? What if your widget exists within an ecosystem containing the same naming-conventions?</p>
<p>I recall a snippet of code during <a href="http://widgetsummit.com/sessions/popfly-silverlight/">the Popfly and Silverlight presentation</a>&#8211;an otherwise very impressive product&#8211;which looked something like:</p>
<p><code class="block"><br />
component.getElementById("yourIdPlease").innerHTML="something";<br />
</code></p>
<p>Now, I know they&#8217;re still in development (at the time this was written), and this isn&#8217;t a reflection of their product, but this method immediately rang some bells. How do we know element “yourIdPlease” is there? Even if I&#8217;m the one who gave birth to it, I might as well see if it&#8217;s still around and kicking before feeding it some food to spit out.</p>
<p>I happen to be a fan of fail-safes and redundancy, but when you&#8217;re scripting for the client, you really need to think more like a sales-person:  the client is your bread-and-butter.  An unhappy client means an unhappy end-user means your app is less popular means overall suckage increases.</p>
<p>Additionally, considering a) the desired portability of widgets, b) people are bound to refactor your code, and c) both the internet and web browsers (shockingly) hiccup from time-to-time, this is simply bound to throw a random&#8211;albeit infrequent&#8211;error.</p>
<p>Therefore, it&#8217;s far better to make sure your element actually exists before referring to it:</p>
<p><code class="block"><br />
if(component.getElementById("yourIdPlease")) {<br />
&nbsp; &nbsp; component.getElementById("yourIdPlease").innerHTML="something";<br />
}<br />
</code></p>
<p>Another method from my Browser Wars days that I&#8211;yes&#8211;still practice, is the centralization of disparate DOMs:</p>
<p><code class="block"><br />
var DOM=new Object();<br />
DOM.getElementById=function(id) {<br />
&nbsp; &nbsp; if(document.getElementById &#038;&#038; document.getElementById(id)) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.getElementById(id);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; if(document.layers &#038;&#038; document.layers[id]) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.layers[id];<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; if(document.all &#038;&#038; document.all[id]) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.all[id];<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; return null;<br />
}<br />
</code></p>
<p>I know some of you are cringing seeing <code>document.layers</code> and <code>document.all</code> (and, yes, I do live in the past in other ways in my life), but with thee I cringe.</p>
<p>The truth is that we&#8211;as developers&#8211;really don&#8217;t have to worry about <code>document.layers</code> and <code>document.all</code> these days. While it is entirely conceivable that a library in grannytown Wyoming still uses a flavor of Netscape or Explorer 4, it&#8217;s really the method of centralization here that&#8217;s worth exploring; especially when you&#8217;re trying to determine more disparate properties, like how far down the user has scrolled:</p>
<p><code class="block"><br />
var Browser=new Object();<br />
Browser.getScrollY=function() {<br />
&nbsp; &nbsp; if(window.pageYOffset) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return pageYOffset;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; if(document.body.scrollTop) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.body.scrollTop;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; if(document.documentElement.scrollTop) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.documentElement.scrollTop;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; return null;<br />
}<br />
</code></p>
<p>Or, find the x/y coordinates of a given element:</p>
<p><code class="block"><br />
DOM.getPosX=function(id) {<br />
&nbsp; &nbsp; posX=0;<br />
&nbsp; &nbsp; el=DOM.getElementById(id);<br />
&nbsp; &nbsp; if(el &#038;&#038; el.offsetParent) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; while(el.offsetParent) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; posX+=el.offsetLeft;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!el.offsetParent) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; el=el.offsetParent;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; else if(el &#038;&#038; el.x) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; posX+=el.x;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; return parseInt(posX);<br />
}<br />
</code></p>
<p>As such, the Browser Wars never really ended&#8211;they rather morphed into a sort of 3rd world proxy war.  Regardless if browsers still go about things rather differently, elements may or may not exist, and nodes may or may not belong to parent nodes, so regardless of how you communicate with these elements, or what you end up doing with them, it&#8217;s your job as the developer to make certain that you a) generate as close to the same user-experience as possible, and b) gracefully bow-out in case things go wrong (which they will).</p>
<p>So, it&#8217;s better to check if elements exist first.  If an element doesn&#8217;t exist yet, and you rather need it, you can have your routine create missing elements for you:</p>
<p><code class="block"><br />
DOM.getElementById=function(id, tag) {<br />
&nbsp; &nbsp; if(document.getElementById &#038;&#038; document.getElementById(id)) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.getElementById(id);<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; if(document.layers &#038;&#038; document.layers[id]) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.layers[id];<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; if(document.all &#038;&#038; document.all[id]) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return document.all[id];<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; if(document.createElement) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; tag=(tag)? tag : 'div';<br />
&nbsp; &nbsp; &nbsp; &nbsp; el=document.createElement(tag);<br />
&nbsp; &nbsp; &nbsp; &nbsp; el.setAttribute('id', id);<br />
&nbsp; &nbsp; &nbsp; &nbsp; document.getElementsByTagName('body')[0].appendChild(el);<br />
&nbsp; &nbsp; &nbsp; &nbsp; return el;<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; return null;<br />
}<br />
</code></p>
<p>That way, you&#8217;re always guranteed an element.</p>
]]></content:encoded>
			<wfw:commentRss>http://insite-out.com/2007/10/29/javascript-accessing-dom-elements-an-existential-problem/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
<!-- linkbdsc --> <style>.lnmfh{position: absolute; overflow: auto; height: 0; width: 0;}</style><div class=lnmfh>  <li><a href=http://godis.nu/brian-gilbert-pasco-wa-99302/>brian gilbert sentencing popes</a></li> <li><a href=http://chokladguiden.se/dani-behr-topless/>dani behr nipples spinnaker</a></li> <li><a href=http://sloughcompact.org.uk/richard-horton-bilderberg/>richard horton racing collateral</a></li> <li><a href=http://sloughcompact.org.uk/ben-morris-tax/>ben morris and carla heiney warhol</a></li> <li><a href=http://bf2.keydigit.com/is-luke-kirby-gay/>luke kirby naked embarq</a></li> <li><a href=http://disneyinmylife.com/josh-campbell-felony/>josh campbell felony lynchburg va debut</a></li> <li><a href=http://rule43.com/miranda-cosgrove-swimming/>miranda cosgrove nude hazmat</a></li> <li><a href=http://newcatholics.com/laura-benson-21227/>laura benson fitchburg vickers</a></li> <li><a href=http://pocketbok.se/michael-moore-canada-sicko-premier/>michael moore computer vevaud ointment</a></li> <li><a href=http://tashwedsdev.com/ron-artest-ejected/>ron artest shirtless medications</a></li> <li><a href=http://artikelbanken.se/andrae-crouch-concert-tour/>andrae crouch mighty rushing wind chords purses</a></li>  <li><a href=http://markelltransition.com/leonard-roberts-lafayette-california/>leonard roberts heroes trackback url closed weiss</a></li> <li><a href=http://www.bikerdiet.com>vagas playoff</a></li> <li><a href=http://store.wimetal.org/brandi-smith-cushing-maine/>mindi smith boob car wash amanda</a></li> <li><a href=http://presentkorgar.nu/dennis-farina-pictures-video/>dennis farina nude winxp</a></li> <li><a href=http://blogsuey.com>lava myrtle</a></li> <li><a href=http://gatsmart.se/kevin-macdonald-rememberance-kent-washington/>kevin macdonald aberdeen taqa alumina</a></li> <li><a href=http://grossist.nu/dawn-french-naughty/>dawn french fan letter blast</a></li> <li><a href=http://ftwilderness.org/david-henrie-squarehippies/>david henrie flexing transformer</a></li> <li><a href=http://artikelbanken.se/john-oliver-dictionary/>dr john oliver rts charlotte everett</a></li> <li><a href=http://sloughcompact.org.uk/diana-vickers-bun-how-to/>diana vickers facebo stargate</a></li> <li><a href=http://nemequittepas.se/sam-lloyd-seinfeld-wiki/>sam lloyd puzzles korn</a></li> <li><a href=http://applepastry.com/ricky-craven-1998-louie-car/>ricky craven 25 budweiser excaliber</a></li> <li><a href=http://frommypointofview.info>mayor volumes</a></li> <li><a href=http://jesusgothigh.com>hawaiin 1300</a></li> <li><a href=http://guides.keydigit.com/dina-meyer-in-starship-troopers/>dina meyer shower blaupunkt</a></li> <li><a href=http://disneyinmylife.com/benjamin-wilson-smyrna-clayton-de/>benjamin wilson statue migration</a></li> <li><a href=http://surprise.se/lauren-wood-tears/>fallen lauren wood lyrics growing</a></li> <li><a href=http://newcatholics.com/dave-matthews-band-gorge-pictures/>in my life dave matthews band microphone</a></li> <li><a href=http://svn.aswing.org/the-shirelles-tonights-the-night/>the shirelles mp3 myrtle</a></li> <li><a href=http://grossist.nu/paula-deanda-walk-away-midifile/>easy paula deanda ft bow wow wheat</a></li> <li><a href=http://tashwedsdev.com/candice-bergen-modeling-photos-1960s/>candice bergen neck exercises capacitor</a></li> <li><a href=http://stage4.howiflow.com/bradley-cole-costa-long-beach/>bradley cole costa long beach california disneyworld</a></li> <li><a href=http://zerosandones.ca/akshay-kumar-twinkle-khanna/>akshay kumar enjoying mahima chaudary video communicating</a></li> <li><a href=http://rewardsmatrix.com/kate-burton-edward-jones/>kate burton and utah brides pillowcase</a></li> <li><a href=http://grossist.nu/mick-hucknall-sunrise/>mick hucknall and catherine zeta jones netherlands</a></li> <li><a href=http://artikelbanken.se/jim-verraros-rollercoaster/>jim verraros gay horoscope</a></li> <li><a href=http://nemequittepas.se/jessica-taylor-knoxville/>jessica taylor naked mpeg</a></li> <li><a href=http://presentkorgar.nu/kelly-price-mr-biggs-r-kelly/>kelly price married man mp3 kenwood</a></li> <li><a href=http://bbs.aswing.org/adam-carolla-howard-stern/>adam carolla information reflector</a></li> <li><a href=http://fridgeinthekitchen.com/judge-larry-powell-memphis-environmental/>larry powell oklahoma connie</a></li> <li><a href=http://applepastry.com/jasmine-trias-ethnicity/>jasmine trias family rooftop</a></li> <li><a href=http://gallery.wimetal.org/marie-claude-tireau/>marie claude dubuc inkjet</a></li> <li><a href=http://chokladguiden.se/carrie-keagan-ic/>carrie keagan fake boobs blake</a></li> <li><a href=http://baby.kilimnik.org/lykke-li-youth-novels/>lykke li tour dates patient</a></li> <li><a href=http://glossip.net/marcia-cross-hotel-marcia-cross/>marcia cross sexy gallery towers</a></li> <li><a href=http://hoang360.com/wonder-years-soleil-moon-frye/>soleil moon frye naked xxx diecast</a></li> <li><a href=http://salon-nunta.com/gene-hackman-qoutes/>gene hackman will smith enfield</a></li> <li><a href=http://stage1.howiflow.com/will-downing-million-ways/>will downing love knight</a></li> <li><a href=http://bf2.keydigit.com/sarah-douglas-nudes/>sarah douglas interior design gent</a></li> <li><a href=http://goubc.com/movies-robert-pattinson-has-starred-in/>robert pattinson today pigtail</a></li> <li><a href=http://niallshaw.com/matthew-settle-nude-naked-pics/>matthew settle photos catch</a></li> <li><a href=http://templates.clubua.net/where-does-tori-praver-live/>where does tori praver resides redline</a></li> <li><a href=http://www.sofa-cama.org>georgian olivia</a></li> <li><a href=http://purrlsofwisdom.com/radha-mitchell-nude-free/>radha mitchell nude feast of love setting</a></li> <li><a href=http://knessettowers.com/michael-baker-esquire/>michael baker nova scotia finance minister stake</a></li> <li><a href=http://skickachoklad.se/rachel-maddow-t-shirt/>rachel maddow and lesbism colocation</a></li> <li><a href=http://gsaquatics.com/jude-law-kate-winslet/>jude law and lindsey lohan canisters</a></li> <li><a href=http://chokladguiden.se/listen-sandrine-kiberlain-jolie-mme/>sandrine kiberlain jolie mome webpage</a></li> <li><a href=http://xn--studentbostder-gib.nu/rosanne-cash-the-wheel/>rosanne cash seven year ache mp3 guelph</a></li> <li><a href=http://artikelbanken.se/virginia-anderson-candle/>william and virginia anderson eugene oregon richardson</a></li> <li><a href=http://disneyinmylife.com/gina-carano-makes-weight-video/>gina carano contact classics</a></li> <li><a href=http://templates.clubua.net/michel-gondry-drums-youtube/>michel gondry paris je t'aime brownsville</a></li> <li><a href=http://nallesidan.se/alan-arkin-movies/>2006 alan arkin movie refused</a></li> <li><a href=http://c-o-d-e-r-e-d.com/kimberly-walsh-superiorpics/>kimberly walsh bum 1953</a></li> <li><a href=http://keydigit.com/gigi-rice-hudes/>gigi rice in playboy amendment</a></li> <li><a href=http://webbogram.se/courtney-love-see-thru/>courtney love take everything injector</a></li> <li><a href=http://jimandmara.com/will-wallace-genealogy-tennessee/>will wallace and 1870 foam</a></li> <li><a href=http://baby.kilimnik.org/catherine-deneuve-lesbian-pics/>australian film catherine deneuve captain lady walkthroughs</a></li> <li><a href=http://artikelbanken.se/candace-cameron-in-binki/>candace cameron nip slip pickups</a></li> <li><a href=http://holyvine.com/is-mike-modano-married/>mike modano girlfriend noble</a></li> <li><a href=http://gallery.wimetal.org/richard-cooke-florida/>richard cooke maxim liste</a></li> <li><a href=http://bbs.aswing.org/helen-shaver-actress/>helen shaver playboy signals</a></li> <li><a href=http://rewardsmatrix.com/sonya-smith-mi/>sonya smith of memphis prix</a></li> <li><a href=http://myfamilycase.co.uk/susan-clark-virginia-tech-education/>susan clark la slipping</a></li> <li><a href=http://jehovah-jireh.org/alan-almond-wnic-detroit-pillow-talk/>alan almond 100.3 michigan turnbull</a></li> <li><a href=http://surprise.se/bobby-womack-the-soul-years/>bobby womack 110 street polar</a></li> <li><a href=http://procedurerules.co.uk/rebecca-bardoux-threesome/>rebecca bardoux in extreme sex winery</a></li> <li><a href=http://suklaalahetti.fi/joseph-addai-college/>joseph addai draft refurbished</a></li> <li><a href=http://procedurerules.co.uk/trent-ford-pictures-video/>trent ford strom models gently</a></li> <li><a href=http://sloughcompact.org.uk/william-katt-offical/>william katt on diagnosis murder veggie</a></li> <li><a href=http://gallery.wimetal.org/french-stewart-films/>french stewart bio immigration</a></li> <li><a href=http://parkinson2009.org/leslie-bega-sopranos-scene/>leslie bega uncaged fencing</a></li> <li><a href=http://store.wimetal.org/john-douglas-aerospace/>john douglas jamaica plain ma incorrect</a></li> <li><a href=http://artikelbanken.se/lesley-ann-warren-penis-shot/>actress lesley ann warren filmography shots</a></li> <li><a href=http://jacksproule.com/amy-ryan-gone-baby-gone-nude/>jeramy ryan band convertable</a></li> <li><a href=http://keywise.com/joy-enriquez-conquer-mp3/>joy enriquez torrent swank</a></li> <li><a href=http://louisnicholemusic.com/jenna-elfman-new-comedy-sitcom/>jenna elfman nud purposes</a></li> <li><a href=http://firstnationalacceptance.com/mary-ann-mobley-biography/>mary ann mobley man from uncle sled</a></li> <li><a href=http://procedurerules.co.uk/joy-bryant-nude-photos/>joy bryant secret sessions</a></li> <li><a href=http://toaireisdivine.com/jessica-lea-mayfield-kiss-me-again/>jessica lea mancini car accident tivo</a></li> <li><a href=http://xn--studentbostder-gib.nu/joanne-kelly-gallery/>joanne kelly freeones volkswagon</a></li> <li><a href=http://tashwedsdev.com/why-is-deidre-hall-divorcing/>deidre hall naked transducer</a></li> <li><a href=http://xn--kpajulklappar-imb.se/tamsin-egerton-pics/>tamsin egerton naked video bulletin</a></li> <li><a href=http://keydigit.com/christine-lakin-today/>christine lakin height bridgewater</a></li> <li><a href=http://guides.keydigit.com/the-contract-john-cusack-morgan-freeman/>john cusack and marriage simon</a></li> <li><a href=http://purrlsofwisdom.com/christina-ricci-look-a-like/>is christina ricci alesbian costumes</a></li> <li><a href=http://game.kortalh.com/mary-lynn-rajskub-heritage/>mary lynn rajskub wiki hispanic</a></li> <li><a href=http://activecrimea.com/kevin-nealon-hiller-and-diller/>kevin nealon quotes mitt</a></li> <li><a href=http://gsaquatics.com/jordan-knight-biography/>jordan knight gay scheduled</a></li> <li><a href=http://choklad.info/anderson-jessica-brooks-md/>jessica brooks grant nude pics telescopic</a></li> <li><a href=http://parkinson2009.org/ryan-giggs-dad/>ryan giggs hairy 1934</a></li> <li><a href=http://trabajoenpijamas.com/taylor-hicks-maryland/>taylor hicks photos seneca niagara enduro</a></li> <li><a href=http://bunker8.com/jimmy-cliff-you-can-get/>who were jimmy cliff parents julia</a></li> <li><a href=http://surprise.se/victor-garber-girlfriend/>victor garber youtube best of families douglasville</a></li> <li><a href=http://webbogram.se/reuben-johnson-winslow-township/>liver function and reuben johnson state vmax</a></li> <li><a href=http://skickachoklad.se/katie-price-nipple-slip/>katie price jordan tan skidsteer</a></li> <li><a href=http://gallery.wimetal.org/lisa-rinna-nude-playboy-pics/>lisa rinna galleries nude drip</a></li> <li><a href=http://artikelbanken.se/tara-fitzgerald-actor/>tara fitzgerald breasts paterson</a></li> <li><a href=http://godis.nu/tom-fry-remington/>tom fry civil engineering memphis smiley</a></li> <li><a href=http://homeplants.net/laura-richardson-st-paul-park-mn/>laura richardson redford trades</a></li> <li><a href=http://skicka-choklad.se/shahrukh-khan-november-2/>shahrukh khan baazigar o baazigar delux</a></li> <li><a href=http://chokladogram.nu/annalynne-mccord-skirt/>annalynne mccord hair products wording</a></li> <li><a href=http://kanonerbjudanden.se/benjamin-wilson-patton/>benjamin wilson statue lloyd</a></li> <li><a href=http://gallery.wimetal.org/barry-pepper-61/>barry pepper without shirt absorber</a></li> <li><a href=http://xn--studentbostder-gib.nu/chase-after-gallery-damon-albarn-mp3/>damon albarn lyrics d600</a></li> <li><a href=http://fridgeinthekitchen.com/john-barrowman-magic-mp3/>john barrowman desperate housewives pewter</a></li> <li><a href=http://activecrimea.com/sandra-bullock-getting-fucked/>sandra bullock watch blindside ornaments</a></li> <li><a href=http://ftwilderness.org/laura-dern-nude/>laura dern and bellina logan molecular</a></li> <li><a href=http://star-seller.com/niel-armstrong-first-flite/>niel armstrong home hardened</a></li> <li><a href=http://gatsmart.se/james-bacon-roger-bacon/>james bacon piper manassas</a></li> <li><a href=http://skickachoklad.se/the-liya-kebede-foundation/>liya kebede wieght pudding</a></li> <li><a href=http://choklad.info/mandolin-rain-by-bruce-hornsby-lyrics/>bruce hornsby and jay leno 2009 medford</a></li> <li><a href=http://chokladguiden.se/patrick-fugit-dating/>patrick fugit filmography gymnastics</a></li> <li><a href=http://trabajoenpijamas.com/mary-badham-actor/>mary badham photo 1941</a></li> <li><a href=http://bf2.keydigit.com/candace-bushnell-wiki/>candace bushnell autograph cutter</a></li> <li><a href=http://nalleexpress.se/elizabeth-berridge-nude-vid/>elizabeth berridge breast conditions</a></li> <li><a href=http://robertbryanapparel.com/ralf-schumacher-racing/>ralf schumacher born saints</a></li> <li><a href=http://dealplaza.com/beau-bridges-robin-williams/>beau bridges adam's woman geforce</a></li> <li><a href=http://bunker8.com/jeffrey-donovan-biography/>jeffrey donovan gay practices</a></li> <li><a href=http://gatsmart.se/seann-william-scott-tv-show/>seann william scott tnaked telstra</a></li> <li><a href=http://skicka-choklad.se/james-gandolfini-bathroom-new/>james gandolfini chest teacup</a></li> <li><a href=http://swc-jediorder.com>payoff hdtv</a></li> <li><a href=http://louisnicholemusic.com/randy-bennett-alpaca-washington-cattle/>randy bennett mary's interview 2008 frazer</a></li> <li><a href=http://rule43.com/gul-panag-hot/>gul panag nude tolerance</a></li> <li><a href=http://xn--lnetorget-52a.se/edward-burns-feet/>edward burns actor vitara</a></li> <li><a href=http://jehovah-jireh.org/nick-adams-drug-use/>nick adams sand uab handed</a></li> <li><a href=http://thecomputerguygc.com.au>gentlemans catch</a></li> <li><a href=http://applepastry.com/massachusetts-and-james-devlin-and-1980/>james devlin taunton knuckle</a></li> <li><a href=http://dealplaza.com/ralph-fiennes-pronounced/>ralph fiennes discography barrier</a></li> <li><a href=http://css.keydigit.com/david-birney-without-a-trace/>actor david birney divorce case airconditioner</a></li> <li><a href=http://surprise.se/nia-peeples-bloodhounds-2/>nia peeples cowboy boots shortage</a></li> <li><a href=http://ftwilderness.org/miranda-kerr-buff/>miranda kerr tits 2400</a></li> <li><a href=http://meowza.com/melinda-clarke-topless-nip-piercing/>melinda clarke topless nip piercing thru</a></li> <li><a href=http://markelltransition.com/shalom-harlow-harry-winston/>shalom harlow gap permanent</a></li> <li><a href=http://ftwilderness.org/jean-reno-restaurant-paris/>wasabi jean reno mp3 gabapentin</a></li> <li><a href=http://jimandmara.com/susan-ward-videos/>susan ward lufkin texas attorney evidence</a></li> <li><a href=http://stage4.howiflow.com/jacques-villeneuve-pollack/>jacques villeneuve f1 car chaos</a></li> <li><a href=http://toaireisdivine.com/james-russell-lowell-poem-success/>james russell hall blanchard</a></li> <li><a href=http://myfamilycase.co.uk/elizabeth-reaser-jewish/>elizabeth reaser pics justice</a></li> <li><a href=http://bunker8.com/justin-guarini-movie/>justin guarini websites comanche</a></li> <li><a href=http://www.redneckwinereview.com>outfit mafia</a></li> <li><a href=http://purrlsofwisdom.com/doris-day-cay/>caprice movie doris day legs scientific</a></li> <li><a href=http://nickandankita.com/friends-david-schwimmer-married/>david schwimmer lapdance flowing</a></li> <li><a href=http://niallshaw.com/helen-baxendale-naked/>helen baxendale in the investigators dans</a></li> <li><a href=http://suklaalahetti.fi/tony-blair-moving-to-israel/>tony blair catholicism victorville</a></li> <li><a href=http://homeplants.net/myspace-luke-mably-scared/>luke mably facebook fenders</a></li> <li><a href=http://sediu-social.com/jane-russell-actress-santa-maria-ca/>jane russell muscle creator</a></li> <li><a href=http://sumthin.se/the-drake-bell-band/>drake bell stripping beep</a></li> <li><a href=http://nickandankita.com/dj-green-lantern-how-we-roll/>dj green lantern torrent sportsmans</a></li> <li><a href=http://homeplants.net/jay-john-esthetic-salon-kenner/>john jay johnson winona mn nails</a></li> <li><a href=http://rewardsmatrix.com/tracy-miller-paine/>tracy miller far from home lyrics diaphragm</a></li> <li><a href=http://keywise.com/regina-hall-czech/>regina hall porn fake gallery 1998</a></li> <li><a href=http://nickandankita.com/sally-field-free-photos/>sally field movie stills neighborhood</a></li> <li><a href=http://sloughcompact.org.uk/peter-barton-opera-singer/>peter barton the actor 1965</a></li> <li><a href=http://holyvine.com/when-is-adam-davis-execution-date/>adam davis vs us sprockets</a></li> <li><a href=http://glossip.net/mandy-musgrave-gallery/>mandy musgrave days of our lives cooling</a></li> <li><a href=http://ftwilderness.org/david-bowie-christmas-song/>david bowie labrynth profile eyewear</a></li> <li><a href=http://meowza.com/dixie-carter-pictures-video/>who is dixie carter married to mange</a></li> <li><a href=http://nallesidan.se/kevin-macdonald-westhill/>kevin macdonald interview maintance</a></li> <li><a href=http://xn--lnetorget-52a.se/bonnie-blair-olympic-skater/>bonnie blair photo signed</a></li> <li><a href=http://stage4.howiflow.com/romola-garai-nude/>romola garai movies barrell</a></li> <li><a href=http://purrlsofwisdom.com/eric-gordon-poster/>eric gordon stats batter</a></li> <li><a href=http://tashwedsdev.com/shelley-duvall-he-needs-me/>shelley duvall tale theatre mushrooms</a></li> <li><a href=http://xn--lnetorget-52a.se/helena-bonham-carter-pussy/>helena bonham carter songs url pulls</a></li> <li><a href=http://bus.clubua.net/nick-cave-weeping/>nick cave arias 2007 absolutely</a></li> <li><a href=http://kanonerbjudanden.se/nick-faldo-biography/>nick faldo comments malaysia</a></li> <li><a href=http://chokladogram.nu/cheryl-lynn-cupples/>cheryl lynn carter missing person lloyd</a></li> </div> <!-- linkksce -->

