トピックに詳しい人が、質問を単純化または正しく書くのを手伝ってくれるかもしれません。直接の JavaScript の使用と比較して、JQuery または他の JS フレームワークでのメトリックを探しています。私はコード行のメトリックを信じていませんが、それを測定するために他に何も考えられません。
Function Points (jquery) = Jquery-LOC
Function Points (JS) = JS-LOC
トピックに詳しい人が、質問を単純化または正しく書くのを手伝ってくれるかもしれません。直接の JavaScript の使用と比較して、JQuery または他の JS フレームワークでのメトリックを探しています。私はコード行のメトリックを信じていませんが、それを測定するために他に何も考えられません。
Function Points (jquery) = Jquery-LOC
Function Points (JS) = JS-LOC
標準の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の1つの関数にパッチを適用し、次のバージョンのバグレポートを提出するだけです。イベントバインディングコードに問題がある場合、数百万ビットのコードを変更する必要があるのは数千人ではなく、1ビットのコードを変更する必要があるのは1人だけです。そして、誰かが最初にaddEventListenerをテストする必要があると指摘すると、jQueryはすでに確立された「正しい」ことを実行しているため、その点は議論の余地があります。そうでない場合は、次のバージョンになります。
jQueryは、非常に難しいドメイン固有の問題については役に立ちませんが、毎日のdom操作を精査する場合は、ライブラリ関数を「金属の近く」に配置するよりも使用する方が適切です。クロスブラウザの破片が多すぎて、ばかげた冗長なdom APIが多すぎて、すでに解決されている問題を何度も何度も解決するには愚かすぎます。
正気を保つために、ある種のライブラリ(必ずしもjqueryである必要はありません)が必要です。
正確に言うと、どれだけの時間と労力を節約できますか?知るか?それは計り知れません。イベントハンドラーを何回バインドする必要がありますか?jQueryが単純な関数で提供する他のことを何回行う必要がありますか?一方は他方に強く依存しています。
ただし、プログラマーの生産性を測定する方法を見つけた場合は、お知らせください。私たちは皆、とても興味があると思います。いずれにせよ、私たちはこれらの客観的な事実と私たち自身の個人的な主観的な経験から、それはおそらくかなりの時間であることを知っています。
コード行のメトリックを疑うのは当然ですが、jquery 自体を無視すると仮定すると、新しいコード行が大幅に節約されます。
さらに重要なことは、5 つのブラウザー間で手動で作成およびテストする必要がある DOM スープ コードの量を削減できることです。これは時間を大幅に節約し、バグを大幅に減らします。
それはあなたが書いているものに依存します。精度を上げたいですか?ちょうど12行。
紐の長さに匹敵する量です。
JQuery やその他の JavaScript ライブラリを使用すると、アプリケーションのファンクション ポイントが増え、コード行も増えます。なんで?これらのライブラリを使い始める前は、可能または実現可能とは考えていなかったことが簡単にできるようになるからです。これにより、ゼロからプログラミングする場合のように試してみて罰せられるのではなく、より多くの機能を作成することが奨励されます。
彼らはとても良いです。
「時間の節約」指標は、他の指標よりも優れています。
jQuery を使用すると、書く量が減ります (つまり、jQuery のモットーでもあります!) が、LOC はばかげた測定値です。
jQuery を使用する理由は、ブラウザーの互換性のためです。自分でそれを書く必要がなければ、明らかに時間を節約できます。
開発者の生産性はどうですか? コードベースをサポートしてくれる人を見つけるのはいかに簡単か。
質問は基本的に文脈がなければ意味がありません。
jQuery を使用して、そうでなければ 20 行かかることを 4 行で行う場合、(バージョン 1.3.2 で) 4376 行の jQuery を追加して、16 行の独自のコードを節約することで失敗します。
一方、jQuery を使用して 9,000 行のコードを書く必要がなくなると、純利益が得られます。
その 16 行を書くのに必要なものを学ぶのに 3 か月かかるとしたら、16 行を節約するための 4376 行はそれだけの価値があるかもしれません。あるいは、20 行で十分な 9000 行を書かないようにするには、3 か月かけて十分に学習する価値があるかもしれません。
もっと複雑な指標が必要だと思います。
これは古い質問であり、それほど重要な質問ではないことはわかっていますが、OPを追加させてください。ブレントンの例を見ると:
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 を使用する方が実現可能です。
平等な競争の場では、2 つのアプリを比較できます。jQuery + ライブラリを使用する App-A と、純粋な JS + ライブラリを使用する App-B です。アプリ B は、ライブラリであるアプリ A よりも多くのライブラリを使用する可能性が高く、想定よりも少ない Js コア コードを意味します。
すべてを大局的に見ると、非汎用ライブラリはおそらく約 0.?-4kB であり、以下を実行できます。これはすべてのライブラリに適合するものではないため、App-B に含めるのは公平です。
getEl('clickme').ev('click',{ width: 110 });
jQuery は、JS に対して行数が少ないという点ではもちろん勝っていますが、違いは比較のアプローチにあります。
LOC もあまり適用可能な指標ではないと思いますが、$('#my_id')
vsのようなものを記述できることdocument.getElementById('my_id')
は、長期的には、短期的にも大きな違いをもたらします。