2009-08-25 2 views
3

Возможно, кто-то, более знакомый с темой, может помочь мне упростить или написать вопрос правильно. Мы ищем метрики на JQuery или даже другие JS Framework по сравнению с использованием прямого javascript. Я не верю в черты кодовой метрики, никогда не имею, но я не могу думать ни о чем другом, чтобы ее измерить.Сколько строк кода будет сохранено с помощью JQuery вместо прямого JavaScript?

Function Points (jquery) = Jquery-LOC 
Function Points (JS) = JS-LOC 
+1

Для меня это не только строка, сохраненная. Вы сэкономите много сложностей, проблемы с браузером X, причуды, получите отличные libraires через плагины. Это делает программирование в JS очень забавным и полезным, когда вам нужно его поддерживать. –

ответ

11

Чтобы прикрепить обработчик щелчка с помощью стандартного JavaScript, вы можете попробовать что-то вроде этого:

var myelement = document.getElementById("clickme"); 
function myClickHandler (evt) { 
    var evt = evt || event; // ie uses a global instead of 
          // passing an object as a param 
    (evt.target || evt.srcElement).style.width="110px"; 

} 
if (myelement.addEventListener) { 
    myelement.addEventListener("click", myClickHandler, false); 
} else if(myelement.attachEvent) { 
    myelement.attachEvent("onclick", myClickHandler); 
} else if(typeof myelement.onclick === "function") { 
    (function() { 
     var oldfunc = myelement.onclick; 
     myelement.onclick = function (evt) { 
      var evt = evt || event; 
      oldfunc(evt); 
      myClickHandler(evt); 
     } 
    })() 
} else { 
    myelement.onclick = myClickHandler; 
} 

или попытаться сделать что-то подобное с помощью Jquery

jQuery("#clickme").click(function(evt){ jQuery(evt.target).css("width",110); }); 

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

Это был бы очень хороший аргумент, и это точно точка библиотеки, например, jquery. Вы экономите время, не написав этот подробный шаблон, который абсолютно необходим, если вы хотите, чтобы ваш код работал в перекрестном браузере. Вы экономите время, не откладывая его. Вы экономите время, если вам придется отлаживать его, вам просто нужно исправить одну функцию в jquery и записать отчет об ошибке для следующей версии. Если что-то не так с кодом привязки события, то это всего лишь один парень, который должен изменить один бит кода, а не тысячи людей, которым нужно изменить миллионы бит кода. И когда кто-то указывает на то, что вы должны проверить addEventListener первых, точка становится спорным, так как JQuery делает уже установленную «правильную» вещь. И если это не так, это будет в следующей версии.

jQuery не поможет вам в решении действительно сложных проблем, связанных с конкретным доменом, но для обработки ежедневных манипуляций с домино лучше использовать библиотечную функцию, чем пытаться закрыть ее «близко к металлу».Слишком много перекрестных осколков брандмауэра, и слишком много глупых дословных dom APIS, и слишком глупо решать проблемы, которые уже были решены, снова и снова.

Вам нужен НЕКОТОРЫЙ вид библиотеки (не обязательно jquery), чтобы оставаться в здравом уме.

Теперь сколько времени и усилий вы экономите, точно? Кто знает? это неизмеримо. Сколько раз вам нужно привязывать обработчик событий? Сколько раз вам приходится делать какие-либо другие вещи, которые предоставляет jQuery в простой функции? Один сильно зависит от другого.

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

+1

Стандартный 'addEventListener' обычно протестирован ** до ** запатентованного (и довольно дефицитного)' attachEvent'. Это гарантирует, что браузеры, подобные Opera, которые скопировали некоторые из методов IE ('attachEvent' в этом случае), используют более эффективную реализацию. На боковой ноте ваша третья ветвь может быть легко удалена, поскольку браузеры, не поддерживающие addEventListener/attachEvent, считаются древними в наше время. На самом деле, jQuery не учитывает такой сценарий, который делает ваше сравнение немного несправедливым;) – kangax

+0

Вы, конечно, правы, но это вроде помогает доказывает мою мысль, не так ли? Мой пример не о строках кода. Речь идет о бессмысленности попыток решить проблему, которую кто-то еще выяснил лучше меня, и потраченные впустую усилия, связанные с такими попытками. – Breton

+0

Я добавил кое-что, чтобы ответить на вашу критику. – Breton

1

Показатель «сэкономил время» не хуже любого.

Используя jQuery, вы пишете меньше (я имею в виду, что это девиз jQuery!), Но LOC - это смехотворное измерение.

Причина, по которой я использую jQuery для совместимости с браузером. Если мне не нужно это писать, я, очевидно, сэкономлю время.

1

Как насчет того, насколько продуктивным является разработчик? Насколько легко найти кого-то, кто поддерживает базу кода.

+0

Да. Возможно, измерьте количество кандидатов на работу, которые знакомы с jQuery и теми, кто знаком с вашим собственным эквивалентным кодом. :) –

2

Это зависит от того, что вы пишете. Хотите больше точности? Точно 12 строк.

+2

_Maybe_ 42 если вы уменьшите. –

3

Вы имеете право усомниться в строках кода, хотя, предполагая, что вы ставите скидку на jquery, он сохранит существенные новые строки кода.

FAR, что более важно, это уменьшит количество кода DOM-супа, который вы должны написать и протестировать вручную через 5 браузеров или около того. Это массовая экономия времени и массивный редуктор ошибок.

0

Я не думаю, что LOC также является очень применимой метрикой, но возможность писать такие вещи, как $('#my_id') vs document.getElementById('my_id'), имеет огромное значение в долгосрочной перспективе - даже в краткосрочной перспективе.

1

Используя JQuery или другие библиотеки JavaScript, ваше приложение будет иметь гораздо больше функциональных точек и еще много строк кода. Зачем? Потому что вы будете делать что-то легко, что вы не считали возможным или выполнимым, прежде чем приступить к использованию этих библиотек. Это побудит вас писать больше функций, а не наказывать вас за попытку, так как программирование с нуля.

Они такие хорошие.

0

Вопрос в основном бессмыслен без контекста.

Если вы используете jQuery, чтобы что-то сделать в четырех строках, которые в противном случае взяли бы 20 строк, вы не смогли бы добавить (в версии 1.3.2) 4376 строк jQuery, чтобы сохранить 16 строк вашего собственного кода.

С другой стороны, если вы сохраняете запись 9000 строк кода с помощью jQuery, тогда у вас есть чистая прибыль.

Возможно, даже 4376 строк для сохранения 16 строк стоят того, если вам понадобится три месяца, чтобы узнать, что необходимо, чтобы написать эти 16 строк. В качестве альтернативы, возможно, стоит потратить три месяца на то, чтобы учиться достаточно, чтобы не писать 9000 строк, в которых делалось бы 20.

Думаю, вам нужна более сложная метрика.

+0

И снова, с точки зрения времени загрузки браузера, если вы укажете на размещенный jQuery файл Google, ваш пользователь может загрузить 0 строк (если они уже имеют этот файл) вместо дополнительных 16 строк вашего кода. –

1

Это сопоставимая сумма с длиной строки.

0

Я знаю, что это старый вопрос & не очень важный вопрос, но, позвольте мне добавить мой ОП. Глядя на пример Брентона в:

jQuery("#clickme").click(function(evt){ jQuery(evt.target).css("width",110); }); 

Если IE8 & ниже не было вокруг выше очевидно, могли быть записаны как:

document.getElementById('clickme').addEventListener('click', function(e){e.target.style.width = '110px';}, false); 

При сравнении LOC никто не ожидается писать каждое приложение с нуля в чистом JavaScript это более возможно с помощью jQuery, lib общего назначения.

На игровом поле даже можно было сравнить два приложения: App-A с помощью JQuery + ЛИЭС VS App-B с использованием чистых JS + LIBS. App-B, скорее всего, будет использовать больше libs, чем App-A, что является lib, что означает меньше кода ядра Js, чем предполагалось.

Вставить все это в перспективу, не -общей цели lib может быть около 0.?-4kB и может сделать ниже, и потому, что это не один подходит всем Lib это справедливо включить с App-B:

getEl('clickme').ev('click',{ width: 110 }); 

JQuery будет, конечно, выигрывает в плане меньшего кол линии против JS, но, разница до подхода сравнения.