3

也许更熟悉该主题的人可以帮助我简化或正确编写问题。我们正在寻找有关 JQuery 甚至其他 JS 框架的指标,以与使用直接 javascript 进行比较。我不相信代码行数,从来没有,但我想不出其他任何东西来衡量它。

Function Points (jquery) = Jquery-LOC
Function Points (JS) = JS-LOC
4

10 回答 10

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 操作,最好使用库函数而不是试图“接近金属”。有太多的跨浏览器碎片突出,还有太多愚蠢的冗长 dom APIS,一遍又一遍地解决已经解决的问题太愚蠢了。

您需要某种库(不一定是 jquery)才能保持理智。

现在,您究竟节省了多少时间和精力?谁知道?这是无法估量的。您必须绑定事件处理程序多少次?jQuery 在一个简单函数中提供的其他任何事情,您需要执行多少次?一个强烈依赖于另一个。

如果你找到了衡量程序员生产力的方法,请告诉我们。我想我们都会非常感兴趣。无论如何,我们从这些客观事实以及我们自己的个人主观经验中知道,这可能是相当长的时间。

于 2009-08-25T03:56:36.353 回答
3

你怀疑代码行数是对的,尽管假设你打折 jquery 本身,它会节省大量的代码行。

更重要的是,它将减少您必须在 5 个左右的浏览器中手动编写和测试的 DOM 汤代码的数量。它可以节省大量时间,并且可以减少大量错误。

于 2009-08-25T03:14:18.217 回答
2

这取决于你在写什么。想要更精确?正好12行。

于 2009-08-25T03:13:17.860 回答
1

“节省时间”指标与任何指标一样好。

使用 jQuery,你写的更少,(我的意思是它甚至在 jQuery 的座右铭中!),但是 LOC 是一个荒谬的度量。

我使用 jQuery 的原因是为了浏览器兼容性。如果我不必自己写,显然我可以节省时间。

于 2009-08-25T03:11:55.880 回答
1

开发人员的生产力如何?找到支持代码库的人是多么容易。

于 2009-08-25T03:13:05.660 回答
1

使用 JQuery 或其他 JavaScript 库,您的应用程序将拥有更多的功能点和更多的代码行。为什么?因为在开始使用这些库之前,您将轻松地完成您认为不可能或不可行的事情。这将鼓励您编写更多功能,而不是像从头开始编程那样惩罚您的尝试。

他们那么好。

于 2009-08-25T04:37:20.903 回答
1

它与字符串长度的数量相当。

于 2009-08-25T09:25:04.287 回答
0

我也不认为 LOC 是一个非常适用的指标,但是从长远来看,能够编写$('#my_id')vs之类的东西document.getElementById('my_id')会产生巨大的影响——即使在短期内也是如此。

于 2009-08-25T03:14:37.170 回答
0

没有上下文,这个问题基本上没有意义。

如果您使用 jQuery 在 4 行中执行一些原本需要 20 行的操作,那么您会因为添加(在 1.3.2 版上)4376 行 jQuery 来保存 16 行您自己的代码而失败。

另一方面,如果您使用 jQuery 节省了编写 9000 行代码,那么您将获得净收益。

如果要花三个月的时间来了解编写这 16 行代码的必要性,那么节省 16 行代码的 4376 行代码甚至可能是值得的。或者,可能值得花三个月的时间来学习足够的知识,以避免写 9000 行而 20 行。

我认为您需要一个更复杂的指标。

于 2009-08-25T09:17:18.140 回答
0

我知道这是一个老问题而不是一个非常重要的问题,但是,让我添加我的 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(一个通用库)更可行。

在公平的竞争环境中,您可以比较两个应用程序:使用 jQuery + libs 的App -A 与使用纯 JS + libs 的 App-B。App-B 可能会使用比作为库的 App-A 更多的库,这意味着 Js 核心代码比预想的要少。

综上所述,一个通用库可能在 0.?-4kB 左右,并且可以执行以下操作,并且因为它不是一个适合所有库的 1,所以包含在 App-B 中是公平的:

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

jQuery 与 JS 相比,当然会在更少的行数方面获胜,但不同之处在于比较的方法。

于 2015-03-25T03:29:47.740 回答