<?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>Paradigm.ru &#187; javascript</title>
	<atom:link href="http://paradigm.ru/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://paradigm.ru</link>
	<description>Блог Александра Мусаева</description>
	<lastBuildDate>Wed, 23 Nov 2011 19:10:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>JavaScript фреймворки теперь можно хостить на Google</title>
		<link>http://paradigm.ru/google-ajax-libraries-ap</link>
		<comments>http://paradigm.ru/google-ajax-libraries-ap#comments</comments>
		<pubDate>Wed, 28 May 2008 13:03:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[фреймворки]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=350</guid>
		<description><![CDATA[В&#160;блоге AJAX Search API вчера был проанонсирован AJAX Libraries API. Суть состоит в&#160;том, что Google теперь позволяет всем желающим использовать JavaScript фреймворки, размещенные на&#160;их&#160;серверах. Сам API представляет собой простой в&#160;использовании механизм для подключения к&#160;НТМL-документам наиболее популярных JS-библиотек, среди которых jQuery, prototype, script.aculo.us, MooTools и&#160;dojo. Список, по&#160;всей видимости, будет расширяться. Подключить необходимую библиотеку можно двумя способами. [...]]]></description>
			<content:encoded><![CDATA[<p>В&nbsp;блоге <a href="http://googleajaxsearchapi.blogspot.com/" rel="nofollow">AJAX Search API</a> вчера был проанонсирован <a href="http://code.google.com/apis/ajaxlibs/" rel="nofollow">AJAX Libraries API</a>. Суть состоит в&nbsp;том, что Google теперь позволяет всем желающим использовать JavaScript фреймворки, размещенные на&nbsp;их&nbsp;серверах. Сам API представляет собой простой в&nbsp;использовании механизм для подключения к&nbsp;НТМL-документам наиболее популярных JS-библиотек, среди которых jQuery, prototype, script.aculo.us, MooTools и&nbsp;dojo. Список, по&nbsp;всей видимости, будет расширяться.</p>

<p>Подключить необходимую библиотеку можно двумя способами. Первый&nbsp;&#8212; тривиальный, с&nbsp;помощью HTML-элемента script.</p>

<p><pre><code class="html">&lt;script src="http://ajax.googleapis.com/
&nbsp;&nbsp;&nbsp;&nbsp;ajax/libs/prototype/1.6.0.2/prototype.js"&gt;&lt;/script&gt;</code></pre><br /><br /></p>

<p>Как не&nbsp;сложно догадаться, вместо <code>prototype/1.6.0.2</code>&nbsp;можно указать название любого другого фреймворка и&nbsp;его версии.</p>

<p>Второй способ более гибок. С&nbsp;помощью специального JS-метода <code>google.load()</code> можно задавать версию библиотеки не&nbsp;точно, а&nbsp;по&nbsp;первым цифрам.</p>

<p><pre><code class="html">&lt;script src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
&lt;script&gt;
google.load("prototype", "1.6");
// &#8230;
&lt;/script&gt;</code></pre></p>

<p>Заданное в&nbsp;примере значение &laquo;1.6&raquo; означает то,&nbsp;что будет автоматически выбрана самая свежая версия prototype в&nbsp;ветке 1.6. Таким образом, AJAX Libraries API может обеспечить автообновление JS-библиотек без каких-либо изменений в&nbsp;вызывающем скрипте (естветсственно, такое обновление ограничивается пределами нужной ветки).</p>

<p>К&nbsp;основным плюсам использования AL&nbsp;API можно отнести следующие:</p>

<ul><li>Хранение скриптов на&nbsp;Google в&nbsp;некоторой степени снижает нагрузку на&nbsp;собственный веб-сервер.</li>
<li>Скорость загрузки страниц увеличивается, благодаря <a href="http://paradigm.ru/2008/05/11/circumventing-browser-connection-limits/">переносу части запросов на&nbsp;другой хост</a> и&nbsp;поддержке gz-сжатия.</li>
<li>При массовом использовании централизованно-хранимых фреймворков, кэш браузеров используется эффективнее. Файл, загруженный для одного веб-приложения, может быть повторно использован при работе с&nbsp;другим, использующим тот&nbsp;же фреймворк. Пока это лишь потенциальный бенефит сервиса, но,&nbsp;тем не&nbsp;менее, приятный.</li>
<li>Кроме того, благодаря Google можно облегчать дистрибутивы веб-приложений, использующих JS-фреймворки.</li></ul>

<h3>Ссылки по&nbsp;теме</h3>

<ul><li><a href="http://googleajaxsearchapi.blogspot.com/" rel="nofollow">Официальный анонс</a> AJAX Search API.</li>
<li><a href="http://code.google.com/apis/ajax/documentation/" rel="nofollow">Подробное описание</a> метода google.load().</li>
<li><a href="http://code.google.com/apis/ajaxlibs/documentation/" rel="nofollow">Developer&#8217;s&nbsp;Guide</a>, содержащий список поддерживаемых фреймворков с&nbsp;номерами версий.</li>
<li><a href="http://ajaxian.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-googles-infrastructure" rel="nofollow">Announcing AJAX Libraries API</a>: Speed up&nbsp;your Ajax apps with Google&#8217;s infrastructure @ <a href="http://ajaxian.com/" rel="nofollow">ajaxian.com</a></li></ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/google-ajax-libraries-ap/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Приручаем Орфус</title>
		<link>http://paradigm.ru/orphus</link>
		<comments>http://paradigm.ru/orphus#comments</comments>
		<pubDate>Sun, 11 May 2008 12:53:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[orphus]]></category>
		<category><![CDATA[баги]]></category>
		<category><![CDATA[проверка орфографии]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=325</guid>
		<description><![CDATA[Развлечением вчерашнего вечера (а&#160;заодно и&#160;информационным поводом для этого поста) стала имплантация в&#160;paradigm.ru системы выявления ошибок Orphus. Процесс прошел успешно, хотя и&#160;не&#160;так гладко, как предполагалось. В&#160;последней версии Орфуса появилась возможность комментировать найденные ошибки, для чего по&#160;нажатию Ctrl-Enter в&#160;середине страницы появляется форма с&#160;текстовым полем. И&#160;все&#160;бы хорошо, но&#160;она позиционируется не&#160;в&#160;середине клиентской области окна браузера, а&#160;в&#160;геометрическом центре страницы. Соответственно, [...]]]></description>
			<content:encoded><![CDATA[<p>Развлечением вчерашнего вечера (а&nbsp;заодно и&nbsp;информационным поводом для этого поста) стала имплантация в&nbsp;paradigm.ru <a href="http://orphus.ru/" rel="nofollow">системы выявления ошибок Orphus</a>. Процесс прошел успешно, хотя и&nbsp;не&nbsp;так гладко, как предполагалось.</p>

<p>В&nbsp;последней версии Орфуса появилась возможность комментировать найденные ошибки, для чего по&nbsp;нажатию Ctrl-Enter в&nbsp;середине страницы появляется форма с&nbsp;текстовым полем. И&nbsp;все&nbsp;бы хорошо, но&nbsp;она позиционируется не&nbsp;в&nbsp;середине клиентской области окна браузера, а&nbsp;в&nbsp;геометрическом центре страницы. Соответственно, если страница длинная, вертикальный скролл неуместно передергивается при передаче фокуса в строку ввода.</p>

<div class="i"><a href='http://b23.ru/p2c' rel="nofollow"><img src="http://paradigm.ru/;-)/2008/05/orphus.png" alt="" title="orphus" width="500" height="304" /></a><br /><small>Скриншот с&nbsp;форума, на&nbsp;котором окно орфуса появилось за&nbsp;пределами видимой области страницы</small></div>

<p>Глюк описан на&nbsp;форуме и,&nbsp;по&nbsp;всей видимости, происходит не&nbsp;всегда, а&nbsp;только при наличии каких-то особенностей в&nbsp;коде страницы. Готового решения там я&nbsp;не&nbsp;нашел, поэтому пришлось ковырять код самому (при всей моей нелюбви к&nbsp;JavaScript).</p>

<p>По&nbsp;ходу дела выяснилось, что Орфус&nbsp;&#8212; совсем даже не&nbsp;опен сорс и&nbsp;его код обфусцирован до&nbsp;почти полной нечитаемости. В&nbsp;результате, вместо того чтобы все по-человечески исправить, моего терпения хватило только на&nbsp;quick and dirty patch: добавил в&nbsp;начало две функции для правильного определения координат и&nbsp;использовал их&nbsp;при позиционировании.</p>

<p>На&nbsp;мой взгляд, если уж&nbsp;с&nbsp;позиционированием div возникают такие сложности, более простым и&nbsp;переносимым решением было&nbsp;бы использование popup окон браузера&nbsp;&#8212; так ведь тоже можно отправлять сообщения об&nbsp;ошибках без перезугрузки страницы.</p>

<p>Не&nbsp;имею понятия, можно&nbsp;ли распространять видоизмененный Орфус, поэтому <a href="http://paradigm.ru/;-)/orphus.js" rel="nofollow">ссылку на&nbsp;починенную версию</a> приведу здесь только для демонстрации (: (все права <a href="http://dklab.ru" rel="nofollow">разработчика</a> сохранены). В&nbsp;ближайшее время отпишу автору. Будем надеяться, в&nbsp;следующей версии доработка надфилем уже не&nbsp;понадобится.</p>

<h3>Ссылки по&nbsp;теме</h3>

<ul><li><a href="http://b23.ru/p2s" rel="nofollow">Грамотность on-line</a>, или Использование системы Orphus&nbsp;&#8212; статья про Орфус в&nbsp;&laquo;Куроводстве&raquo; Дмитрия Котерова.</li>
<li><a href="http://b23.ru/pu5" rel="nofollow">Cross Browser Window Size And Centering</a>&nbsp;&#8212; две неплохие функции на&nbsp;JavaScript, одна из&nbsp;которых определяет размеры окна, а&nbsp;другая&nbsp;&#8212; находит координаты центра. Работают вроде&nbsp;бы во&nbsp;всех актуальных версиях главных браузеров.</li></ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/orphus/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Color Picker для веб-приложений</title>
		<link>http://paradigm.ru/javascript-color-picker</link>
		<comments>http://paradigm.ru/javascript-color-picker#comments</comments>
		<pubDate>Fri, 09 May 2008 14:45:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Дизайн интерфейсов]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[дизайн]]></category>
		<category><![CDATA[дизайн интерфесов]]></category>
		<category><![CDATA[цвета]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=313</guid>
		<description><![CDATA[Когда-то давным-давно в&#160;застенках Adobe изобрели простой и&#160;удобный интерфейс инструмента, выбирающего цвета из&#160;палитры. Интерфейс получился настолько удачным, что почти без изменений пережил множество версий Photoshop и&#160;другого ПО&#160;этого производителя. Кроме того, он&#160;превратился в&#160;&#171;народное достояние&#187; и&#160;стал использоваться сторонними разработчиками, как решение де-факто. Одной из&#160;значимых характеристик интерфейса любого правильного приложения является неспособность &#171;удивлять&#187; пользователя, ставя его перед необходимостью думать [...]]]></description>
			<content:encoded><![CDATA[<p>Когда-то давным-давно в&nbsp;застенках Adobe изобрели простой и&nbsp;удобный интерфейс инструмента, выбирающего цвета из&nbsp;палитры. Интерфейс получился настолько удачным, что почти без изменений пережил множество версий Photoshop и&nbsp;другого ПО&nbsp;этого производителя. Кроме того, он&nbsp;превратился в&nbsp;&laquo;народное достояние&raquo; и&nbsp;стал использоваться сторонними разработчиками, как решение де-факто.</p>

<div class="i"><img src="http://paradigm.ru/;-)/2008/05/00photoshop-cp.jpg" alt="" title="photoshop color picker" width="548" height="364" /></div>

<p>Одной из&nbsp;значимых характеристик интерфейса любого правильного приложения является неспособность &laquo;удивлять&raquo; пользователя, ставя его перед необходимостью думать не&nbsp;только о&nbsp;выполняемой работе, но&nbsp;и&nbsp;об&nbsp;инструменте. Это одно из&nbsp;обоснований унификации UI&nbsp;и&nbsp;применения общепринятых решений (конечно, не&nbsp;стоит интерпретировать такое утверждение, как пропаганду консерватизма и&nbsp;унылого ретроградства, просто любое решение, в&nbsp;том числе отклонение от&nbsp;стандартов, должно быть осмыслено и&nbsp;обосновано).</p>

<p>Описанные выше доводы, по&nbsp;всей видимости, стали одной из&nbsp;причин реализации photoshop-style color picker для веб-приложений. И&nbsp;не&nbsp;просто какой-то отдельно взятой реализации, а&nbsp;целой толпы JavaScript-аналогов.</p>

<p>Один из&nbsp;хороших примеров CP&nbsp;сделан на&nbsp;основе уже упоминавшейся раньше библиотеки <a href="/tag/mootools">Mootools</a>. Окошко с&nbsp;палитрой появляется прямо внутри страницы:</p>

<div class="i"><img src="http://paradigm.ru/;-)/2008/05/01mootools-cp.jpg" alt="" title="mootools color picker" width="431" height="355" /></div>

<p>На&nbsp;странице проекта продемонстрированы разные варианты внедрения color picker-а. Например, еще есть вот такой миниатюрный:</p>

<div class="i"><img src="http://paradigm.ru/;-)/2008/05/02mootools-cp.jpg" alt="" title="mootools color picker" width="431" height="151" /></div>

<p>Вариант на&nbsp;базе Mootools ине понравился больше других, но&nbsp;если кому-то противит использование JS-фреймворков (по&nbsp;религиозным причинам или по&nbsp;причине 90&nbsp;килобайт, на&nbsp;которые несжатый MT&nbsp;утяжеляет первую загрузку), можно отдать предпочтение &laquo;независимому&raquo; скрипту.</p>

<p><a href="http://b23.ru/pqu">Один из&nbsp;них</a> отличается тем, что появляется в&nbsp;виде отдельного popup окна и&nbsp;имеет дополнительную возможность ограничения выбора только из&nbsp;палитры <a href="http://b23.ru/pqx">безопасных цветов</a>:</p>

<div class="i"><img src="http://paradigm.ru/;-)/2008/05/03js-cp.jpg" alt="" title="advance color picker that handles rgb, hsl, and hexadecimal values" width="471" height="399" /></div>

<p>А&nbsp;<a href="http://b23.ru/pq7">другой</a>&nbsp;&#8212; тем, что дружит не&nbsp;только с&nbsp;цветовой моделью RGB, но&nbsp;и&nbsp;HSB:</p>

<div class="i"><img src="http://paradigm.ru/;-)/2008/05/04imageaxd.jpg" alt="" title="PhotoShop-like JavaScript Color Picker by John Dyer" width="450" height="300" /></div>

<h3>Ссылки по&nbsp;теме</h3>

<ul><li>&laquo;<a href="http://b23.ru/pq6">How to&nbsp;Create a&nbsp;Color Picker in&nbsp;JavaScript</a>&raquo; by&nbsp;Mark Kahn&nbsp;&#8212; большое и&nbsp;подробное описание того, как написать color picker самостоятельно.</li>
<li><a href="http://b23.ru/pq2">Mootools</a>&nbsp;&#8212; упомянутый выше фреймворк Mootools, предназначение которого отнюдь не&nbsp;ограничено описанным в&nbsp;данной заметке применением.</li>
<li><a href="http://b23.ru/pqd">Yahoo! UI&nbsp;Library: Color Picker Control</a>&nbsp;&#8212; еще одно заслуживающее и&nbsp;внимание решение с&nbsp;поддержкой RGB и&nbsp;HSV.</li></ul>

<p>PS:&nbsp;А&nbsp;вы&nbsp;знаете, что Миша Квакин бесплатно рисует всем желающим <a href="http://www.design-freak.com/2008/05/06/rss-icons-campaign/">прикольные оранжевые иконы</a> для RSS-фидов? RSS-кружка, в&nbsp;левом верхнем углу этой страницы&nbsp;&#8212; его творчество (она видна, если вы&nbsp;читаете заметку на&nbsp;сайте, а&nbsp;не&nbsp;в&nbsp;каком-нибудь Гуглридере). И&nbsp;если он&nbsp;нарисует для меня за&nbsp;этот анонс что-то совсем бесподобно-потярсающее, буду ему премного благодарен. Кстати, да,&nbsp;это был неприкрытый&nbsp;PR.</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/javascript-color-picker/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>«Резиновость» в рамках разумного</title>
		<link>http://paradigm.ru/max-width-for-ie</link>
		<comments>http://paradigm.ru/max-width-for-ie#comments</comments>
		<pubDate>Thu, 27 Dec 2007 22:10:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-дизайн]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[браузеры]]></category>

		<guid isPermaLink="false">http://www.paradigm.ru/2007/12/28/max-width-for-ie/</guid>
		<description><![CDATA[Как известно, для определения минимального и&#160;максимального значения размеров &#171;резиновых&#187; блоков в&#160;(X)HTML, предусмотрены свойства CSS max-width и&#160;max-height. Все браузеры уже года полтора правильно их&#160;интерпретируют. Кроме IE,&#160;разработчики которого по&#160;каким-то умным маркетинговым причинам клали болт на&#160;многие детали стандартов. Тем не&#160;менее, возможность задавать предельные значения для масштабируемых блоков очень полезна. Например, для того чтобы &#171;резиновая&#187; верстка не&#160;теряла товарный вид [...]]]></description>
			<content:encoded><![CDATA[<p>Как известно, для определения минимального и&nbsp;максимального значения размеров &laquo;резиновых&raquo; блоков в&nbsp;(X)HTML, предусмотрены свойства CSS <code>max-width</code> и&nbsp;<code>max-height</code>. Все браузеры уже года полтора правильно их&nbsp;интерпретируют. Кроме IE,&nbsp;разработчики которого по&nbsp;каким-то умным маркетинговым причинам клали болт на&nbsp;многие детали стандартов.</p>

<p>Тем не&nbsp;менее, возможность задавать предельные значения для масштабируемых блоков очень полезна. Например, для того чтобы &laquo;резиновая&raquo; верстка не&nbsp;теряла товарный вид при максимизации окна браузера на&nbsp;большом мониторе, заставляя пользователя читать полуметровые строки текста.</p>

<p>Раньше я&nbsp;решал этот вопрос с&nbsp;помощью JavaScript: небольшая функция автоматически корректировала ширину &laquo;резиновых&raquo; контейнеров при изменении размера окна браузера. Вчера был найден довольно более красивый способ заставить IE&nbsp;ограничивать масштабируемые блоки. Тоже на&nbsp;основе&nbsp;JS. <span id="more-137"></span></p>

<p>В&nbsp;имлементации CSS IE&nbsp;есть своя-собственная конструкция&nbsp;&#8212; <code>expression</code>, чье значение может вычисляться с&nbsp;помощью client-side скрипта. Например, так:</p>

<div><pre><code class="css">div {
   width: expression(750 + "px");
}</code></pre></div>

<p>Что эквивалентно:</p>

<div><pre><code class="css">div {
   width: 750px;
}</code></pre></div>

<p>Используя expression в&nbsp;сочетании со&nbsp;стандартными свойствами CSS, можно добиться необходимого эффекта в&nbsp;отношении масштабируемых блоков:</p>

<div><pre><code class="html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;

&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Limiting width&lt;/title&gt;
&lt;style type="text/css"&gt;
div#cont { 
// min-width и max-width для IE
   width:expression(document.body.clientWidth &gt; 776 ? 
      "777px" : (document.body.clientWidth &lt; 334 ? "333px" : "auto"));
// то же, для всех остальных
   max-width: 777px;
   min-width: 333px;

   height:320px;
   text-align:center;
   color:black;
   background:#f5f5f5;
}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div id="cont"&gt;Hello World!&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre></div>

<p>Файл лежит здесь: <a href="http://things.paradigm.ru/limited-width.html">http://things.paradigm.ru/limited-width.html</a>. Я&nbsp;проверил работоспособность этого кода в&nbsp;IE&nbsp;5.55, 6,&nbsp;7,&nbsp;Firefox и&nbsp;Opera. Теоретически, должно работать и&nbsp;в&nbsp;IE&nbsp;5.01, т.к. expression появился именно в&nbsp;ней, но&nbsp;проверить не&nbsp;начем&nbsp;&#8212; эта версия на&nbsp;моем компьютере почему-то не&nbsp;уживается с&nbsp;пятью другими инсталяциями IE&nbsp;(:</p>

<p>Точно таким&nbsp;же образом, как и&nbsp;ширину, можно контролировать высоту блоков. Разница в&nbsp;том, что вместо параметра <code>document.body.clientWidth</code>, потребуется использовать <code>this.scrollHeight</code>, а&nbsp;изменять, вместо <code>width</code>, CSS свойство <code>height</code>.</p>

<p>Основано на&nbsp;<a href="http://b23.ru/clx">материалах</a> perishablepress.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/max-width-for-ie/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Два хороших способа предзагрузки графики</title>
		<link>http://paradigm.ru/img-preloading</link>
		<comments>http://paradigm.ru/img-preloading#comments</comments>
		<pubDate>Wed, 26 Dec 2007 21:17:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-дизайн]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[дизайн]]></category>

		<guid isPermaLink="false">http://www.paradigm.ru/2007/12/27/img-preloading/</guid>
		<description><![CDATA[Скорость отображения страниц&#160;&#8212; один из&#160;важных показателей общего впечатления от&#160;сайта, которое возникает у&#160;его посетителей. Существенное влияние на&#160;этот показатель оказывает количество графики на&#160;веб-страницах, а&#160;так&#160;же оптимальность ее&#160;использования. Одним из&#160;распространенных способов увеличения скорости открытия страниц является предзагрузка графикических файлов. Это полезно, когда на&#160;сайте используются типовые элементы дизайна (например, навигационные меню c&#160;ролловерами), для которых имеет смысл за&#160;один раз загрузить всю [...]]]></description>
			<content:encoded><![CDATA[<p>Скорость отображения страниц&nbsp;&#8212; один из&nbsp;важных показателей общего впечатления от&nbsp;сайта, которое возникает у&nbsp;его посетителей. Существенное влияние на&nbsp;этот показатель оказывает количество графики на&nbsp;веб-страницах, а&nbsp;так&nbsp;же оптимальность ее&nbsp;использования.</p>

<p>Одним из&nbsp;распространенных способов увеличения скорости открытия страниц является предзагрузка графикических файлов. Это полезно, когда на&nbsp;сайте используются типовые элементы дизайна (например, навигационные меню c&nbsp;<a href="http://b23.ru/clr">ролловерами</a>), для которых имеет смысл за&nbsp;один раз загрузить всю графику, чтобы она осталась в&nbsp;кэше браузера.</p>

<p>В&nbsp;блоге Perishable Press я&nbsp;нашел два способа реализации предзагрузки, чье описание со&nbsp;своими изменениями и&nbsp;комментариями привожу ниже. <span id="more-136"></span></p>

<h3>Предзагрузка веб-графики с&nbsp;помощью CSS</h3>

<p>Этот метод особенно понравился минимализмом и&nbsp;очевидностью. Его суть заключается во&nbsp;вставке в&nbsp;HTML код перечня всех картинок, подлежащих единовременной загрузке. При этом для всех тегов img, описывается специальный CSS класс, благодаря которому соответствующие им&nbsp;картинки не&nbsp;будут отображаться.</p>

<p>CSS:
<pre><code class="css">img.preload { display: none; }</code></pre></p>

<p>(X)HTML:
<pre><code class="html">&lt;img src="image1.jpg" alt="" class="preload" /&gt;
&lt;img src="image2.jpg" alt="" class="preload" /&gt;
&lt;img src="image3.jpg" alt="" class="preload" /&gt;
&lt;img src="image4.jpg" alt="" class="preload" /&gt;</code></pre></p>

<p>Обратите внимание на&nbsp;набор атрибутов img: width и&nbsp;height отсутствуют, т.к. в&nbsp;отличии от&nbsp;обычной вставк графики, в&nbsp;данном случае нет смысла задавать размеры. Картинки все равно не&nbsp;будут отображены, поэтому и&nbsp;опциональные атрибуты можно отбросить. Обязательному атрибуту alt задано пустое значение, т.к. функциональной нагрузки он&nbsp;не&nbsp;несёт и&nbsp;никакой текстовой замены для него предусматривать не&nbsp;нужно.</p>

<p>Теги размещаются в&nbsp;самом конце кода страницы, непосредственно перед </body>. Это вынудит браузер загрузить вначале содержательную часть веб-документа, а&nbsp;предзагрузку дополнительной графики оставить &laquo;на&nbsp;постом&raquo;. Благодаря этому, скорость отображения страницы не&nbsp;пострадает, увеличится только время первой загрузки.</p>

<p>Предзагрузка с&nbsp;помощью JavaScript
Недостаток предыдущего способа состоит в&nbsp;том, что если в&nbsp;браузере нет поддержки CSS или она намеренно выключена, кэшируемые картинки дружно отобразятся в&nbsp;виде бесформенной кучи.</p>

<p>Альтернативный способ основан на&nbsp;JavaScrpt. Он&nbsp;тоже достаточно прост, и&nbsp;при том никак не&nbsp;повредит внешнему виду сайта, даже если у&nbsp;пользователя по&nbsp;какой-то причине отключен JS&nbsp;(правда, в&nbsp;таком предзагрузка не&nbsp;произойдет вообще).</p>

<p>Код приведенного ниже скрипта можно вставить в&nbsp;любую часть страницы, например в&nbsp;контейнер head.</p>

<p><pre><code class="javascript">&lt;script type="text/javascript"&gt;
if (document.images) {</p>

<p>img1 = new Image();
   img2 = new Image();
   img1.src = "/img/image01.gif";
   img2.src = "/img/image02.gif";</p>

<p>}
&lt;/script&gt;</code></pre></p>

<p>Имена перечисленных файлов, конечно&nbsp;же, необходимо заменить актуальными значениями, после чего они будут загружены в&nbsp;кэш при первом открытии страницы в&nbsp;браузере и&nbsp;в&nbsp;дальнейшем станут доступны без временн<em>ы</em>х затрат на&nbsp;обращение к&nbsp;серверу.</p>

<p>Ссылки по&nbsp;теме:</p>

<ul>
<li><a href="http://perishablepress.com/press/2006/11/14/preloading-images-with-css-and-javascript/">Оригинальная статья</a> на&nbsp;Perishable Press</li>
<li><a href="http://b23.ru/clr">Rollover</a> @ Wikipedia</li></ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/img-preloading/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

