简单的vanilla JavaScript比使用jQuery或MooTools这样的框架更好吗?

我想知道依赖jQuery或MooTools等框架是否是一个好主意,还是应该使用纯JavaScript?

除了避免重新发明轮子,他们是否添加了任何具体的价值?

由于框架对公众开放,是否有可能利用框架中可能出现的任何安全漏洞(当然,无意中:))?

在选择框架或其他方面是否还有其他要考虑的问题?

  1. 框架解决了跨浏览器的错误,这些错误通常需要花费数小时的时间,因此您可以专注于function而不必担心某些边缘案例浏览器错误…而不是浪费4-5个小时来解决与家人一起度过的错误。

  2. 像jQuery这样的框架非常适合加载动画,选择器,html等操作,因此通常会在库中内置一些function,这样可以节省更多时间,API使得实际完成复杂的事情变得非常容易。

  3. 解释器和浏览器的速度越来越快,所以我并不特别认为加载整个库是个大问题。 此外,多亏了谷歌等人,我们得到了非常快的cdns,现在很多网站都使用相同的URI来拉入脚本,这意味着脚本在另一个网站上被缓存和重用的速率更高。

  4. 不是每个Web开发人员都拥有自己的库,而是让成千上万的人集中精力改善少数几个库,从而使跨浏览器的错误得到记录和修复。

  5. 竞争是一件好事,光滑测试的结果导致了更快的选择器引擎,如Sizzle。 开发人员不必担心琐碎的DOM错误意味着每天都会创建更复杂的库,这意味着入门级开发人员可以访问非常强大的插件。

就安全性而言,例如jQuery将检测浏览器是否能够本机解析JSON,如果是,则依赖于此。 通常任何现代浏览器都会有这个,它比eval更安全…所以jQuery首先努力使用更安全,更安全的方法。 如果没有可用的JSON.parse方法,它将使用eval。

在jQuery中要记住的一件重要事情是记住你仍然在使用Javascript进行编码。 通常人们会过多地接受糖涂层方法并将所有内容包装在$ ,我认为重要的是要知道你仍然可以执行this.href而不是$(this).attr('href')如果你想要一个绝对标准化的例如,uri。

不要淡化避免重新发明轮子的重要性。 每次要编写新程序时,都不会创建新计算机。

但除此之外,JavaScript库提供了更好的跨浏览器支持 。 这非常有用,快速浏览一下QuirksMode将会演示。

JavaScript框架使许多事情变得更容易 。 查看jQuery文档,您将看到它是多么容易做许多奇特的事情。

许多人已经扩展了JavaScript框架,因此有许多高质量的jQuery 插件 (例如,它是我认识最好的框架),您可以使用它而无需自己编写。

JavaScript框架不太可能引入安全漏洞,因为它们不会暴露任何比使用纯JavaScript可以执行的function更多的function。

这些框架为JavaScript提供了跨浏览器API,因此大多数时候它们都非常有用,即使它们有一点速度损失。 但JS-Engines几乎每次更新都会快速完成,所以这不是一个真正的问题。 框架也有很多插件,因此它们不仅提供API,还提供新的跨浏览器function。 但这取决于你想做什么。

我并没有非常重视“开源是否容易受到安全问题”的争论。 我看到很多好人阅读代码并发现这些问题的好处。 如果这是一个问题,那么我们需要丢弃Linux,Apache,MySql和大多数Java库。

框架通常可以节省很多精力,我将它们看作是一个预先发明的轮子。 他们不需要任何其他价值。

这取决于你使用JavaScript的目的。 如果您希望能够显示和隐藏面板,动画内容,将事件附加到多个元素,执行Ajax等,那么您需要考虑跨浏览器问题。

jQuery消除了考虑跨浏览器问题的需要,并允许一些非常简洁的function,如上面的模式对话框等。

所以它取决于你想要的JavaScript。

我从未使用过MooTools,因此无法对此发表评论,但jQuery使得很多事情变得更容易。

  • 按类,名称,部分ID等选择对象集合。
  • 简化Ajax调用。
  • Wireup事件处理程序,用于处理onclick,mouseover,mouseout等,并根据常规选择器分配元素,以便可以重用逻辑。
  • 大量的过渡和其他视觉材料使前端更加美观。

还有很多,但它通常简化/加速开发。 需要注意的一件事是,如果您在单个函数中使用大量选择器(循环遍历DOM 40多次),那么使用vanilla JavaScript会更有效率。

所以我的建议是在框架的帮助下对前端进行编码,然后通过subing in vanilla JavaScript来优化表现不佳的部分。

此外,我不知道jQuery或MooTools如何成为安全威胁,因为它们是客户端框架,而不是服务器端。 除了任何客户端validation之外,请记住始终validation服务器端的输入,并正确参数化在服务器端构建的SQL查询。