最佳实践javascript / jquery

时间:2010-06-24 14:35:51

标签: jquery

在我的工作中,我们讨论了什么是最佳实践。考虑我们有一个或多个标签。我们希望a标签在单击它时触发JavaScript函数。要拥有此功能,我们可以通过jQuery将事件绑定到a标签,或者我们可以在a标签上调用内联函数。 每种解决方案的优缺点是什么,以及最佳方法是什么。

问题2: 通常我们在我们的母版页上有我们的JavaScript / jQuery和JavaScript文件。是否有任何开销让jQuery选择器在每个页面上触发?

5 个答案:

答案 0 :(得分:2)

问题1

我建议你看一下:

Unobtrusive JavaScript Saves You Time & Money, Keeps Your Website Agile
Unobtrusive Javascript Presentation

所以:

  • 从网页中分离功能(“行为层”)       结构/内容和演示文稿

  • 避免传统JavaScript编程问题的最佳做法(例如浏览器不一致和缺乏可扩展性)

  • 逐步增强以支持可能不支持的用户代理       高级JavaScript功能

问题2

仅在需要的页面上包含javascript文件,例如需要它的页面。

答案 1 :(得分:1)

问题1:有些人会争辩说,保持javascript远离HTML会让您的代码具有更好的可读性和可维护性。我会把自己包括在那个群体中。我当然认为如果HTML只是HTML并且在JS文件中找到所有的javascript,代码就更容易阅读。

如果您为多个元素分配相同的事件处理程序,那么如果您的需求发生变化,您肯定必须更少的事情。

关于分配事件处理程序时 ,有一些功能注意事项。使用jQuery,在DOMReady之前你可以做很多事情。在加载大量元素的页面中,或者由于某种原因DOM缓慢加载的页面中,用户在分配事件处理程序之前单击链接当然是可能的。如果你内联编写作业,并确保点击中调用的函数已加载到HEAD,那么你就知道你的事件会被激活。

我仍然认为在DOMReady中分配事件侦听器是合理的(并确保页面加载速度很快),但是请考虑如果用户在分配事件侦听器之前单击链接会发生什么。我通常提倡javascript:void(0);超过#作为href的值,因为这不会做任何事情。如果您的href指向#且您依赖return false来阻止浏览器关注该链接,则您无法覆盖用户在DOMReady 之前点击的情况或您的点击处理程序中存在javascript错误,导致无法继续执行。链接到#可能会在某些浏览器中导致刷新,但在最好的情况下,它仍然会导致浏览器历史记录中的项目,因此单击后退按钮只会将您带到您所在的位置已经

问题2:肯定有一些开销。每次页面加载时,脚本都将搜索与不同选择器匹配的元素。如果您知道在给定页面上永远不会找到某些元素,则可以通过简单地不查找这些元素来将执行时间减少一些。如果你想将它全部保存在一个大的脚本文件中,你或许可以从URL中找出是否要运行一组特定的选择器。检查location.href几次肯定可以忽略不计。您将节省多少执行时间取决于它们有多少选择器,以及它们是如何复杂。简单的ID选择器几乎不会影响执行时间。

如果使用live查询,则会产生更大的开销,因为在这些情况下,每次修改DOM时都会进行活动工作。(Nick的评论)

答案 2 :(得分:0)

你在谈论unobstrusive javascript,这是现在炒作的事情。

  

“不引人注目的JavaScript”是一个   JavaScript中的新兴技术   编程语言,用于   全球资讯网。虽然这个词不是   正式定义,其基本原则   通常被理解为包括:

     

功能分离(   来自网页的“行为层”)   结构/内容和演示

     

避免这些问题的最佳做法   传统的JavaScript编程   (例如浏览器不一致和   缺乏可扩展性)

     

逐步增强支持   可能不支持的用户代理   高级JavaScript功能

对我来说,这是出于这些原因的最佳解决方案。

关于问题#2,使用选择器会有开销,但如果进行适当的优化,你应该没问题。如果您发现某些速度问题,您可以仅在需要时而不是所有时间调用选择器。

答案 3 :(得分:0)

不同的时间要求采取不同的措施。

<a />标记的事件处理程序用于决定是否遵循该链接。例如,您可能会说<a href="http://google.com" onclick="…" >…</a>如果该函数返回false,则单击该页面时不应切换。 (这是比<a href="#" />更好的替代方法,因为如果做得好,它适用于关闭javascript的浏览器。)

另一方面,如果你有许多链接接近同一个东西并且不想对它们进行全部硬编码,那么将jquery一起绑定到事件处理程序就会非常有用。

人们可以阅读有关Javascript样式here的元素,但这并没有触及jquery。

答案 4 :(得分:0)

绝对不引人注目的JS比Inline JS更好,所以你应该把你的绑定放在一个单独的jQuery文件中。

另一方面,请记住,在jQuery选择器中特定是提高性能的好方法。一世。即$('div.content a.link_btn') is a lot faster then $('.link_btn')