Unobtrusive JavaScript: To Be or Not To Be
印象中国内并没有多少人会提及 Unobtrusive JavaScript(低调的 JavaScript/不乱入的 JavaScript, 前者是在国内一 blog 看见的翻译,后者是对岸的一位设计师 Othree 的翻译)。本来这也不是很大的问题,倡导 CSS/JavaScript/HTML 代码分离是很多设计师们倡导的事情。有一篇 The seven rules of Unobtrusive JavaScript 说了七点 Unobtrusive JavaScript 要注意到的事情:
- 不作任何假定。
- 找到你的 JavaScript 在 HTML 代码中的接入点及与其的关系
- 将遍历 (Traversing) 留给专家(利用 CSS 来找寻你需要的元素)
- 了解浏览器和用户
- 了解事件(Events)
- 不与其他代码冲突
- 为下一个开发者工作
在看到最后一点后,一些东西就不再奇怪了。Unobtrusive JavaScript 倡导了一种良好的编码习惯,而实际上,或者说一句不中听的,这是给代码工人的规则。
Plaxo 的 Joseph Smarr 有一个很棒的、关于提高 JavaScript 的 slides: High Performance JavaScript。其中说到: Directly attach onclick, etc. handlers instead using event listeners where appropriate(尽可能地直接使用 onclick 等控制事件而不是事件冒泡).原因很简单,因为 Finding by class/attaching event handlers is slow.例如我需要那些 class 为 pop 的链接在点击后自动打开新窗口,当然我们可以通过编写一个额外的脚本来监控这些链接的点击,但在这些链接中使用 onclick 会让脚本运行得更快,但维护起来也会很麻烦。
而事实上,我们是否需要这般完整的分离代码呢?很大的可能是看这个站点对 JavaScript 的依赖程度。如果是轻度使用 JavaScript 来增强用户体验,Unobtrusive JavaScript 是很好的习惯;如果是那些 Web Application,例如,由于需要更多地考虑 JavaScript 的执行效率,就不必碍于 Unobtrusive JavaScript 的规则,适当地在 HTML 代码中插入 JavaScript 代码也未尝不可。
深究起来,其实这和编程中常见的、关于程序的 scalability 和 performance 的衡量,没有什么区别。











