Генерация JS-фреймворка «по готовому»

Кому: Разработчикам, которые используют JS, а в частности — фреймворки аля jQuery, MooTools, ExtJS.

Описание проблемы
Вы наверняка встречали подобные фразы «90% функций jQuery на сайте не используюся...» или «Страница вести 13 КБ, а jQuery 26 КБ...». Ещё один пример — плагины к jQuery, которые опять же умеют много, когда нужно мало. Нужно ли пользователям качать 90% мертвого груза и ждать в 3 раза дольше? Очевидно, что не нужно.


Что в итоге просходит:
Наступает момент осознания проблемы и происходит одно из двух (а будет и третье):

1. Всё остается как есть
Владелец сайта останется в сомнительном плюсе: ему не нужно будет тратить деньги на разработчика, который справится с проблемой. А в итоге не получит всю прибыль, которую мог.

Я помню про кеширование, но оно начнет спасать только при втором посещение, которого уже может и не произойти.

2. Разработчик переписывает код на чистом JS
Плюсы:
— объем JS-кода уменьшается;
— пропадает мертвый код;
— сайт начинает грузиться быстрее.

Минус очевиден: если владелец сайта — разрабочик, он тратит время. А если нет — деньги. А денег может и не быть, всякое случается. Бюджет на разработку, например, закончился.

Есть деньги — тогда решение вроде бы и найдено, но не всё так просто. Разработчики они ведь разные бывают и тогда сталкиваемся с проблемами кроссбраузерности, скорости выполнения и наличия багов. Большинство из вас может вспомнить один из таких проектов.

3. Генерация JS-фреймворка «по готовому»
Идея
Оба варианта как-то не очень, да? Есть задумка, как боротся с поставленной проблемой. Называется она генерация JS-фреймворка «по готовому».

Суть
Берем готовый (или пишем) код, который использует фреймворк (для краткости, ФВ). Дальше этот код и ФВ передается в «что-то». «Что-то» — средство удаления неиспользуемых функций из ФВ.

Несколько скромных мыслей о алгоритме
1. В готовом коде ищутся все использованные функции (далее ф-и). Тоесть предстоит написать регулярных выражений. Дальше из них отсеиваются все, которые не входят в ФВ.
2. В ФВ ищутся все связи между ф-ями, чтобы не удалить лишнего.
3. Стоит предусмотреть ручной ввод имен ф-ий, потому что имя исполняемой ф-и может передаватся как строка.

Разминка
Если вы решились создать этот генератор JS-фреймвока, для начала рекомендую размяться:

Готовый код:
clear_func();
func_with_arg(arg);
with_dependence();
funny()
;

«Фреймворк»:
function hello(){alert('Hello')}
function see_ya(){dep()}
function another_dep(){dep2()}
function clear_func(){alert('Clear 
function func_with_arg(arg){alert(arg)}
function with_dependence(){dep()}
function dep(){alert('Dependence')}
function dep2(){alert('Dependence 2')}
var funny = function (){ alert('Not funny')}
var animal = function (){alert('Monkey')}



Должно получиться:
function clear_func(){alert('Clear Function')}
function func_with_arg(arg){alert(arg)}
function with_dependence(){dep()}
function dep(){alert('Dependence')}
var funny = function (){ alert('Not funny')}


Ссылки:
онлайн сжиматель JS
— удобнейший генератор регулярных выражений онлайн (англ, с подсказками и примерами; предупреждаю: сделано на flash). Говорят, что есть версия под Linux, Windows, OS X

ПС: Осталось ощущение что что-то упустил. Не смог сделать подсветку JS.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.