Как не утонуть в мегабайтах JS-кода

Preview:

Citation preview

Сайты в 2002 году

– мало javascript– независимость

Структура проекта

/js /common.js /editor.js

2005 год

/js

/common.js /editor.js /js-lib.js

Проблемы

– Путаница– Растущий размер файла– Нет code reuse

Логическое разделение

/js /folder.js /message.js /search.js ...

Проблемы

– Размер– Подключение– Сопровождение

Результат

<head> <script></script> <script></script> <script></script> …</had>

Тег как компонент

<div class="component" onclick="return {type:'folder'}"></div>

Тег как компонент

<div class="component" onclick="return {type:'folder'}"></div>

Нужен функционал

– Найти компонент– Определить компонент– Подключить JS файлы– Очередность подключения– Один файл один раз

Найти компонет

getElementsByCSSSelector('.component');

Старые браузеры

<div id=“random_12345”> … </div><script>create(“random_12345”)</script>

Тип компонента

<div class="component" onclick="return {type:'folder'}"></div>

var type = div.onclick().type;

Генерация тега script

createScript = function (src, charset){ script = document.createElement('script'); ... head.insertBefore(script, head.firstChild);}

require

require( // зависимость от других файлов ['file1', 'file2' ...], // уведомление о загрузке (callback) function(){ // инициализация loaded('file'); });

require дерево

Folders -> Dates -> Strings

Folders.jsrequire('Dates', function(){loaded('Folders')});Dates.jsrequire('Strings', function(){loaded('Dates')});Strings.js/* Strings staff */ loaded('Strings')

Запуск компонента

component = getElsBySelector('.component');type = component.onclick().type;

require( [getFileName(type)], function(){ window[type].init(); });

Тег как компонент

<div class="component" onclick="return {type:'folder'}"></div>

События

Календарь разработчика

Календарь заказчиков

Календарь заказчиков

Календарь заказчиков

События

CB.observe (type, listener, object);

CB.dispatch (type, object, event);

Очереди

CB.dispatch (type, object, event, 1);

CB.observe (type, listener, object);

Календарь заказчиков

Сумин АндрейРуководитель разработки клиентской части

AndrewSumin@corp.mail.ru

СПАСИБО!

Recommended