Мой профиль...

Search This Blog

Showing posts with label разработка. Show all posts
Showing posts with label разработка. Show all posts

Friday, November 1, 2013

Здравствуй Windows - Новый Год! (с) Улучшаем shell

Для начала не стоит удивляться, да, сейчас я сижу на Винде.
Рядом тихо пылится MacAir, но...

Вернувшись в Виндовс, что обычно первым делом бросается в глаза?
Консоль! ДаДаДа! Консоль.
После удобной, отличной консоли на linux на cmd.exe смотреть без слез невозможно.


Давайте чуть ее улучшим.

Прежде всего, при переходе из bash в cmd.exe доставляет неудобства ограниченность самой командной оболочки. Чтоб вставить текст из буфера обмена нужно тянуться к мышке, не хватает возможностей автодополнения, история хранится только в пределах одной сессии, к тому же не работает Ctrl+R и другие возможности работы с историей команд в bash.

Исправить ситуацию нам поможет clink. Это Open Source утилита расширяющая возможности cmd.exe. Вот некоторые ее фичи:

  • Автодополнение по нажатию Tab. Возможности автодополнения могут быть расширены за счет пользовательских скриптов на Lua
  • Вставка текста из буфера по нажатию Ctrl-V (к сожалению Shift+Insert не работает)
  • Продвинутая работа с историей команд. Поиск по истории (Ctrl-R and Ctrl-S). Поддержка таких выражений как !!, ! и !$
  • Сохранение предыдущих сессий

Скачали. Установили. Стало лучше, теперь cmd себя ведет почти как bash. Но кое-чего по прежнему не хватает. А именно привычных unix-утилит. Таких как cat, ls, tail, diff, grep, less, sort, wget и т.д. Некоторые утилиты имеют свои Windows-аналоги, например, вместо grep можно использовать findstr, но к ним придется привыкать заново, другие же аналогов вообще не имеют.

Эту проблему нам поможет решить готовый набор программ UnxUtils. Набор включает в себя множество популярных в Unix и Linux инструментов командной строки (полный список можно посмотреть по этой ссылке) а так же несколько дополнительных программ.

В частности, к дополнительным программам относятся pclip.exe и gclip.exe предназначенные для работы с буфером обмена Windows. Например вот так: pclip | sed "s/string1/string2/g" | gclip можно заменить все вхождения string1 на string2 в тексте хранящемся в буфере обмена.

Для того чтоб получить всё это на свою Windows-машину нужно скачать архив UnxUtils.zip, распаковать его содержимое в какой-то каталог и добавить в переменную среды PATH путь к usr\local\wbin\, т.к. именно там хранятся исполняемые файлы.

Для самых ленивых есть способ еще проще: скопируйте содержимое каталога usr\local\wbin\ из архива в каталог %WINDIR%\system32\ на вашей машине.
Внимание! Если вы решили поступить именно так, то я не рекомендую заменять системные файлы на одноименные файлы из архива без четкого понимания того, что вы делаете.

Что нам осталось? Правильное выделение мышью? Нивапрос!

В реестр добавляем два параметра:
HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
MouseSelect DWORD 1
QuickEdit DWORD 1
Как теперь работает выделение мышью? Левой кнопкой выделяем, правой вставляем.

Удачной работы.

Friday, June 4, 2010

Миграция на php 5.3.x

Переход на PHP 5.3.x.


Устаревшие функции в PHP 5.3.x. Deprecated функции:


• call_user_method() - используем теперь call_user_func()
• call_user_method_array() - используем теперь call_user_func_array()
• define_syslog_variables() - по умолчанию и далее выключен
• dl()
• ereg() - используем теперь preg_match()
• ereg_replace() - используем теперь preg_replace()
• eregi() - используем теперь preg_match() с модификатором 'i'
• eregi_replace() - используем теперь preg_replace() с модификатором 'i'
• set_magic_quotes_runtime() / magic_quotes_runtime() - будут ликвидированы
• session_register() - используем суперглобальный массив $_SESSION
• session_unregister() - используем суперглобальный массив $_SESSION
• session_is_registered() - используем суперглобальный массив $_SESSION
• set_socket_blocking() - впредь используйте stream_set_blocking()
• split() - используем теперь preg_split()
• spliti() - используем теперь preg_split() с модификатором 'i'
• sql_regcase()
• mysql_db_query() - впредь используйте mysql_select_db() и mysql_query()
• mysql_escape_string() - впредь используйте mysql_real_escape_string()

E_DEPRECATED в php.ini

Кроме того, ряд директив в PHP.INI постигла такая же участь, они будут теперь выбрасывать E_DEPRECATED предупреждения при активировании:
• define_syslog_variables
• register_globals
• register_long_arrays
• safe_mode
• magic_quotes_gpc
• magic_quotes_runtime
• magic_quotes_sybase

Отключенные возможности

Так же больше не используются следующие возможности:
• Передача в переменную параметра по ссылке в new
• Вызов call-time (функцииб методы классов) по ссылке
• Использование {} для указания смещения внутри строки. Обращайтесь к строке как к массиву, используя []

Зарезервированные слова

Следующие 2 слова теперь являются зарезервированными:
• GOTO
• NAMESPACE

Временная зона

В новой версии PHP обязательно необходимо указать в конфигурационном файле php.ini параметр date.timezone иначе интерпретатор будет отображать Вам предупреждения при работе с любой функцией даты или времени. Например, можно указать так:
date.timezone = Europe/Kiev

Публичные методы

Начиная с 5.3 методы указанные ниже не могут быть статичными и обязаны быть публичными:
• __get()
• __set()
• __isset()
• __unset()
• __call()

Monday, January 11, 2010

Здравый смысл. Проектирование интерфейсов - Common sense. Designing Interfaces.

Я частенько сталкиваюсь с мнением, что проектирование интерфейса это просто следование здравому смыслу. Что хороший интерфейс очевиден и не нужно обладать какими-то особыми знаниями, чтобы его разработать. Я постараюсь объяснить, почему не все так просто, как кажется и почему сложно делать очевидные вещи.


"Everybody lies"


Первая проблема заключается в том, что большинство людей ошибочно полагает, что их мнение совпадает с мнением большинства. Проводимые группой психологов эксперименты это наглядно демонстрируют. Я не помню деталей эксперимента, но попробую передать суть.


В одном из университетов США группа психологов-исследователей предложили студентам бесплатно поучаствовать в промо-акции одного из институтских событий. Половина студентов согласились, другая половина - нет. Обеим этим группам студентов задали вопрос: "как вы считаете, сколько людей поступит также как и вы". Результаты были одинаковыми: студенты обеих групп высказали мнение, что на их взгляд большинство (~85%) других студентов поступят также как они. Таким образом все студенты ошиблись.


Подобная убежденность в собственной правоте часто приводит к недопониманию, что особенно сильно проявляется в личностных отношениях. Это наталкивает на мысль, что наши собственные умозаключения при проектировании интерфейсов с высокой долей вероятности окажутся ошибочными.


Чтобы снизить вероятность и число подобных ошибок, вам необходимо удостовериться, что большинство потенциальных пользователей разделяет ваши суждения относительно интерфейса. Всевозможные опросы, наблюдения, тестирования и прочие виды исследований интерфейсов проводятся с единственной целью: удостовериться, что проектировщик корректно воспринимает окружающую действительность.


Простота


Алан Купер в своей книге "Психбольница в руках пациентов" приводит замечательный пример. "Ученый-компьютерщик Алан Карп говорит: "Практически все мои патентные заявки были отвергнуты как очевидные".


Все мы знаем фразу "все гениальное - просто". Все мы встречали вещи, глядя на которые говорили: "ах, как это очевидно и здорово, почему до этого никто раньше не додумался". Несмотря на то, что подобные вещи называются очевидными, они таковыми не являются.


Нужно понять, что упрощение не является очевидным и тривиальным действием. Деятельность по упрощению (чего бы то ни было) является задачей и, порой, не очень простой. Это справедливо для большинства случаев и связано с составом необходимых действий по свершению упрощения.


Итак, чтобы совершить какое-либо упрощение (предмета или процесса), необходимо:


  1. Выяснить какую задачу решает предмет или процесс;
  2. Разобраться как устроен предмет или процесс;
  3. Вычленить наиболее важные составляющие, определить несущественные;
  4. Избавиться по возможности от большего числа несущественных составляющих, не повредив при этом важные;
  5. Придумать (творческий процесс) новый способ решения той же задачи меньшим числом составляющих.

Теперь мы можем дать ответ на вопрос, почему "очевидные" упрощения на самом деле таковыми не являются. Просто потому, что большинство никогда и не задумывалось о том, как это устроено и как это упростить.


Проблемы добавляет врожденная психологическая особенность человека мыслить и действовать по шаблонам, а для свершения действий связанных с придумыванием чего-либо принципиально нового требуется выйти за рамки этих шаблонов. Альберт Эйнштейн сказал великолепную фразу: "нельзя решить проблему находясь в рамках системы, породившей её".


Здравый смысл


Третьим узким местом в восприятии процесса разработки интерфейса является оперирование понятием "здравого смысла". Как я писал выше, бытует мнение (да что там бытует, я ведь раньше и сам разделял это мнение), будто разработка интерфейса основывается на здравом смысле.


Существует несколько определений понятию "здравого смысла". Мне больше всего нравится определение, данное в Википедии:


"Под здравым смыслом также понимают способность принимать правильные решения и делать правильные предположения, основываясь на логическом мышлении и накопленном опыте. В этом значении термин зачастую акцентирует внимание на способности человеческого разума противостоять предрассудкам, заблуждениям, мистификациям".

Проблема здравого смысла носит двойной характер. Во-первых, как было рассмотрено выше, здравый смысл не для всех одинаков, что само по себе может продуцировать некоторое количество ошибок.


Кроме того, надо заметить, что даже общепринятые представления о здравом смысле не так распространены, как это принято считать. Об этом хорошо пишет Гарри Беквит в книге "Продавая незримое", приводя в пример рекламу автомобилей, которая, согласно здравому смыслу, должна быть направлена к их потенциальным покупателям. Однако реклама направлена вовсе не на них, а на дилерские сети (см. книгу "Пока простаки грезят").


Здравого смысла действительно очень мало вокруг. Люди склонны действовать вопреки своему опыту и вопреки здравому смыслу. Вот несколько примеров, которые, надеюсь, раскроют картину происходящего:


  • Здравый смысл говорит нам не есть фаст-фуд, но неспроста сети быстрого питания появляются, как грибы после дождя.
  • Здравый смысл протестует против перехода дороги в неположенном месте и на красный свет. Здравый смысл говорит нам не пить алкоголь и уж тем более не садиться за руль после него. Сводки происшествий, тем не менее, удручают.
  • 1,4% населения России состоит на учете по факту алкоголизма.
  • 39% населения России курит.
  • Вчера, на ночь глядя, я съел пачку вкусного попкорна. Надо ли говорить, что я прекрасно осведомлен не только о вреде позднего питания, но и о вреде самого попкорна?

Попробуйте понаблюдать за людьми в их повседневной жизни, вы увидите очень много отклонений от того, что мы называем "здравым смыслом". Через какое-то время наблюдений вас ждет одно неприятное открытие: вы сами не лучше.  Это действительно не очень приятно признавать (лично мне было не очень приятно), но это так. Кстати, ещё один эксперимент неуемных психологов показывает, что большинство людей (~84% опрошенных) считают себя лучше "среднестатистического гражданина".


Заключение


  1. То, что очевидно для вас, может быть совершенно не очевидно для других. Именно поэтому нельзя опираться исключительно на собственный опыт.
  2. Простые вещи делать сложно. Нужно явно или неосознанно пройти минимум 5 шагов на пути упрощения чего-либо.
  3. Здравый смысл - лукавый помощник. Следует помнить, что люди часто действуют вопреки здравому смыслу.

p.s. Замечания в комментариях приветствуются.

Monday, December 21, 2009

Что такое ЧПУ? - HOWTO User Friendly URL?

Что такое ЧПУ?

ЧПУ (англ. User Friendly URL) — веб-адреса, удобные для восприятия человеком (а также систем и методов построения таких адресов). Является аббревиатурой от словосочетания «человекопонятный урл» (где «урл» — жаргонное обозначение URL).

Классический подход

Обычно параметры запроса (например, ID нужной страницы) передают сайту через GET-запрос, то есть указывая в URL после вопросительного знака в виде:

* /acticles.php?tag=summer&action=list — просмотр списка статей с меткой summer (лето).
* /news.php?topic=4&year=2003&month=10&sort=1 — отсортированные новости по теме 4 за октябрь 2003.
* /catalogue.php?sect=11&kind=6&manuf=63 — товары производителя 63 типа 6 в отделе 11.

Это вполне понятно и естественно для разработчиков и программ, но не совсем понятно и не удобно для посетителей. Даже если числовые идентификаторы полностью заменить на человеческие слова, то адрес всё равно останется очень громоздким.

Также адреса часто становятся привязанными к технической реализации, так как, например, в «чистом» PHP часть URL до вопросительного знака указывает на файл скрипта.

Концепция ЧПУ

Концепция ЧПУ предполагает максимально лаконичные и интуитивно понятные адреса, которые показывают естественную для человека логическую структуру данных на сервере, а не её программный интерфейс с модулями и параметрами. Структуру обычно представляют в виде иерархии как в обычной файловой системе, к которой привык пользователь.

Те же самые примеры, но с ЧПУ будут выглядеть уже так:

* /articles/tags/summer/ — статьи по меткам, метка «лето».
* /news/sport/2003/10/ — новости спорта, 2003 год, октябрь.
* /catalogue/light/bulbs/GE/ — каталог товаров, отдел «Свет», лампочки, производитель GE.

Или, даже так:

* /статьи/метки/лето/ — статьи по меткам, метка «лето».
* /новости/спорт/2003/10/ — новости спорта, 2003 год, октябрь.
* /каталог/свет/лампочки/GE/ — каталог товаров, отдел «Свет», лампочки, производитель GE.

Достоинства для посетителя очевидны:

* подобные адреса очень легко запомнить;
* можно продиктовать URL по телефону;
* чтобы перейти на уровень вверх достаточно стереть нужную часть пути;
* если человек уже был на вашем сайте и набирает адрес вручную, то он сразу может обратиться к нужному ему документу глядя на URL’ы предыдущих запросов.

Недостатки:

* увеличение затрат ресурсов сервера для большинства реализаций;
* усложнение настройки сайта в связи с необходимостью вмешиваться в конфигурационные файлы веб-сервера.

Реализация

Apache

Для веб-сервера Apache существует мощный модуль mod_rewrite, который включается в стандартный дистрибутив. Он обладает массой возможностей интерпретации URL перед обработкой необходимым модулем.

В большинстве случае в файле .htaccess указывается с помощью регулярного выражения формат URL, который должен быть обработан как другой URL. Например:

RewriteEngine on
RewriteRule ^article/([0-9]+)/? article.php?id=$1 [L]

Первая строчка включает mod_rewrite. Во второй указывается, что веб-сервер при запросе URL вида /article/450/ должен обратиться к /article.php?id=450 .

Обработка URL в собственном скрипте

Разработчик может вручную обработать URL и на основе него вызвать какую-то функцию. Для этого, чаще всего, нужно с помощью mod_rewrite направить все запросы одному скрипту для обработки. Для этого нужно добавить в файл .htaccess следующее содержимое:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Скрипт index.php уже будет брать URL из переменной REQUEST_URI (в PHP из $_SERVER['REQUEST_URI']) и на основе каких-то настроек запускать необходимый код.

Случаи, когда введение ЧПУ не оправдано

* В случаях когда адрес не виден пользователю (например, AJAX), так как ресурсы сервера будут тратиться на разбор URL зря.
* Если страница предусмотрена для просмотра ограниченным количеством пользователей (например, страницы администрирования, C-панели) и не предусматривается посещение страницы поисковыми ботами.
* Если посещение страницы предполагает обязательное использование введенных параметров (например, формы регистрации, данные для вычисления скриптом и т.п.)

Saturday, November 17, 2007

Полезная информация для сеошников о редиректах в PHP - SEO and PHP Redirect Code HTTP status

Цитата("Dylan at WeDefy dot com")
The HTTP status code changes the way browsers and robots handle redirects, so if you are using header(Location:) it's a good idea to set the status code at the same time. Browsers typically re-request a 307 page every time, cache a 302 page for the session, and cache a 301 page for longer, or even indefinitely. Search engines typically transfer "page rank" to the new location for 301 redirects, but not for 302, 303 or 307. If the status code is not specified, header('Location:') defaults to 302.


Код

<?php
// 301 Moved Permanently -перемещено навсегда
header("Location: /foo.php",TRUE,301);

// 302 Found - найдено (по умолчанию)
header("Location: /foo.php",TRUE,302);
header("Location: /foo.php");

// 303 See Other - следует посмотреть другую страницу
header("Location: /foo.php",TRUE,303);

// 307 Temporary Redirect - временный редирект
header("Location: /foo.php",TRUE,307);
?>


Иначе говоря: от номера кода "HTTP status" отправляемого вебсервером клиенту в заголовках зависит то каким образом отдаваемую странцу воспринимают броузеры и поисковые роботы, поэтому если вы используете заголовок location, то хорошей идеей будет сразу уже устанавливать соответствующий HTTP status code.

При 307-ом редиректе броузеры каждый раз сначало пробуют загрузить исходную страницу на которой был временный редирект, кэшируют результаты редиректа с кодом 302 - на время сессии, и а с кодом 301 - практически навсегда.

Поисковые системы, как правило, переносят значение pagerank со страниц с 301-ым редиректом, на страницу назначения, при чем в случае с другими кодами: 302, 303 или 307 - этого не происходит. Если статус код не указан (как это обычно делалось у меня smile.gif ) отправляется код 302.


А теперь бонус, не относящийся к редиректам но относящийся к отправке HTTP status code, для того чтобы отпарвить заголовок "404 страница не найдена", используйте следующий код:
Код

<?php
header("HTTP/1.0 404 Not Found");
?>


Кроме того когда нужно просто отправить опредленный код и при этом отобразить пользователю какую то справочную информацию, точно так же как 404-ый код отправляем заголовок с любым другим статус кодом:

Код

<?php
header("HTTP/1.0 307");
echo "Страница временно не доступна."
?>


Думаю поисковики воспримут как нужно, а пользователь оценит по достоинству, по крайней мере в некоторых CMS - информационные сообщения о причине редиректа - просто жизненно необходимы.

Другие коды:
Код

[Informational 1xx]
100="Continue"
101="Switching Protocols"

[Successful 2xx]
200="OK"
201="Created"
202="Accepted"
203="Non-Authoritative Information"
204="No Content"
205="Reset Content"
206="Partial Content"

[Redirection 3xx]
300="Multiple Choices"
301="Moved Permanently"
302="Found"
303="See Other"
304="Not Modified"
305="Use Proxy"
306="(Unused)"
307="Temporary Redirect"

[Client Error 4xx]
400="Bad Request"
401="Unauthorized"
402="Payment Required"
403="Forbidden"
404="Not Found"
405="Method Not Allowed"
406="Not Acceptable"
407="Proxy Authentication Required"
408="Request Timeout"
409="Conflict"
410="Gone"
411="Length Required"
412="Precondition Failed"
413="Request Entity Too Large"
414="Request-URI Too Long"
415="Unsupported Media Type"
416="Requested Range Not Satisfiable"
417="Expectation Failed"

[Server Error 5xx]
500="Internal Server Error"
501="Not Implemented"
502="Bad Gateway"
503="Service Unavailable"
504="Gateway Timeout"
505="HTTP Version Not Supported"



Редиректы в Apache (.htaccess)

Код

Options +FollowSymLinks
RewriteEngine on
RewriteCond {HTTP_HOST} ^yourdomain.com
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=permanent,L]


Код

Redirect 301 / http://www.yourdomain.com/

Monday, October 8, 2007

Делаем закругленные уголки с помощью псевдоэлементов :before и :after - CSS

Делаем закругленные уголки с помощью псевдоэлементов :before и :after

Задача: сделать врезку с закругленными уголками с минимумом html-кода.

Все наверное сталкивались с врезками с закруглёнными уголками. Поскольку множественный бекграунд современные браузеры (кроме Safari) не поддерживают, то такие вещи приходится делать несколькими элементами, вложеными друг в друга. Есть способ уже сейчас избежать подобных вещей.

html-код:

<div class="incut">
Текст
</div>


css-код:

Задаем голубой фон врезки:

.incut{background: #dff7ff;padding: 20px;}

Четыре уголка навешиваем на элементы :before и :after

.incut:before{
content:url(i/border_tl.gif);
background: url(i/border_tr.gif) no-repeat 100% 0;
height: 7px;
display: block;
margin: -20px -20px 13px -20px;
}
.incut:after{
content:url(i/border_bl.gif);
background: url(i/border_br.gif) no-repeat 100% 0;
height: 7px;
display: block;
margin:13px -20px -20px -20px;
}


Работает во всех современных броузерах кроме ie (проверял в Firefox 1-2 Opera 7-9,Safari 3). Для ie аналогичный функционал навешиваем с помощью js (лучше помещать в отдельный файл css – специальный для ie):

.incut{zoom:1;behavior:expression(!this.isInserted==true ? this.isInserted=(this.innerHTML = '<span style="background: url(i/border_tr.gif) no-repeat 100% 0;height: 7px;display: block;margin: -20px -20px 13px -20px;"><img src="i/border_tl.gif" alt="" /></span>' + this.innerHTML + '<span style="background: url(i/border_br.gif) no-repeat 100% 0;height: 7px;display: block;margin:13px -20px -20px -20px;"><img src="i/border_bl.gif" alt="" /></span>') : '');}


Работает в ie6-7. При отключеных скриптах пользователь ie увидит голубой фон у врезки, т.е. ничего не сломается.

В результате имеем «пуленепробиваемую» врезку с минимум html-кода. Заметьте, что вы можете указать ещё одну картинку у врезки, которая будет её бекграундом.

Применяя эти псевдоэлементы аналогичным образом можно значительно увеличить семантичность верстки. Всё зависит от вашей фантазии.

Friday, August 17, 2007

Отложенное выполнение Javascript - Delayed implementation of Javascript

1. Делайте загрузку JavaScript «отложенной»
Одной из наиболее частых проблем из рассматриваемого комлекса является прямое исполнение JavaScript по ходу загрузки страницы, хотя этого можно и избежать. Если код скрипта не изменяет содержимое страницы (DOM) при загрузке, то выполнение этого кода может быть отложено до полной загрузки страницы. Таки образом, сначала появится содержание страницы, а потом уже будут выполнено все отложенные скрипты. К несчастью, это поддерживается не всеми браузерами. Подробнее про атрибут defer у тега .
2. Уменьшайте объем кода, который должен выполниться при полной загрузке страницы (при событии window.onload)
Все, что исполняется после загрузки страницы, увеличивает время этой загрузки. Чем меньше кода будет выполнено, тем лучше. Другим важным моментом является отсечение зависимостей для загрузки конкретной страницы (когда загрузка зависит от ряда внешних загрузок или вызовов). Это большая проблема, т.к. может повлечь «подвисший» вызов скрипта. В любом случае, JavaScript код, который исполняется несколько секунд, является узким местом (bottleneck) при загрузке страницы. Используя разбиение выполнения кода на отдельные независимые части при помощи задержек (timeouts) можно частично решить эту проблему, хотя это и довольно дорогой («болезненный») путь. Также в этом случае может помочь использование «ненавязчивого» (unobtrustive) JavaScript
3. Используйте балансировщик нагрузки при помощи различных URL для подгружаемого файла JavaScript
Сейчас большинство скриптов использует единственный URL в качестве истоника основного файла, например: www.mycoolwidget.com. Это немасштабируемое решение. Чем дальше распространяется виджет, тем больше нагрузка на сервер с исходным кодом, и число параллельных запросов на один и тот же сервер может быть достаточно большим. Лучше всего выдавать пользователям различные URL'ы, например: server1.mycoolwidget.com, server2.mycoolwidget.com и т.д. Пусть даже изначально они будут указывать на один и тот же IP адрес (физическую машину), однако, в будущем это позволит разделить трафик и нагрузку.
4. Используйте стандартные библиотеки
Пожалуй, хуже всего то, что авторы JavaScript кода каждый раз изобретают велосипед, хотя это и чревато большим количеством ошибок. По сравнению с Java (в которой присутствует набор стандартных библиотек), в JavaScript нет ничего, похожего на стандарт, но, по-видимому, довольно эффективно будет использовать такие разрабатываемые библиотеки, как prototype. Они написаны довольно опытными людями, которые уже наступили не один раз на все возможные грабли, поэтому им можно доверять. В любом случае, использовать их наработки может оказаться очень полезным. Предполагается, то для уменьшения кода виджетов он подгружает стандартную библиотеку, ту же prototype, или проверяет, загружена ли она. Чем больше будет виджетов, использующих какой-то стандарт, тем меньше внешнего кода придется загружать посетителям страниц.
5. «Семь раз отмерь, один раз отрежь»
Предполагайте наличие других JavaScript файлов, которые могут загружаться на сайте автора блога, это очень вероятно. Рассматривая себя частью большой системы, разработчики могут избежать ряда проблем, которые могут возникнуть при конфликте их разработок с чужими (виджетами), и гарантировать доступность своих приложений у каждого отдельного пользователя.
6. Вывод функций, которые должны загружаться, в код OnLoad
1. Инициализируем переменную arr_onload как массив.
2. По мере загрузки страницы добавляем в массив имена функций которые должны выполнится по окончании загрузки страницы.
3. По окончании загрузки страницы будет запущена функция f_onload(), своеобразный контроллер выполнения JavaScript-кода, который пробежится по всем элементам массива и выполнит последовательно все функции.

<html>
<script>
arr_onload = new Array();

function f_onload() {
for(i=0;i<arr_onload.length;i++) {
eval(arr_onload[i] + '();');
}
}
</script>

<body onload="f_onload()">

<div id="bar">Bar</div>
<script>
function bar2foo() {
obj = document.getElementById('bar').innerHTML = 'Foo';
}
arr_onload[arr_onload.length] = 'bar2foo';
</script>

<div id="foo">Foo</div>
<script>
function foo2bar() {
document.getElementById('foo').innerHTML = 'Bar';
}
arr_onload[arr_onload.length] = 'foo2bar';
</script>

</body>
</html>

Релевантные посты...

Related Posts with Thumbnails