Search
Write a publication
Pull to refresh

Генерация 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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.