与 James Padolsey 的五问五答

Avatar of Chris Coyier
Chris Coyier 发表

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

如果您像我一样,经常在 Google 上搜索 JavaScript 代码问题的解决方案,那么您很有可能遇到过 James Padolsey 的博客。James 是一位多产的博主,他的教学风格清晰明了,我认为我们都在寻找解决方案时都非常欣赏这一点。我多次参考过他的文章,例如,当需要 动态调整文本区域大小随机排列 DOM 元素动画到特定的 CSS 类 时。所有这些,而 James 只是一个 18 岁的孩子!

CHRIS:在您网站上的个人简介中,您将年龄列为 18 岁。这打错了吧?您的网页开发知识太渊博了,不像是刚高中毕业的样子。

JAMES:是的,是真的!我第一次接触网站构建是在 9 岁,一个更令人惊讶的年龄,当时我爸爸向我介绍了 NetObjects,后来又介绍了 Dreamweaver。从那时起,它就一直是一个持续的学习过程;我每天都在学习新东西!我想我应该在我的网站上更明确地说明这一点,以便将来不会造成混淆!;)

 

CHRIS:JavaScript 显然是您个人博客的主要焦点。这是因为您最喜欢编写 JavaScript 吗?

JAMES:是的,当然!但我一开始其实并没有用 JavaScript。在学习 HTML 和 CSS 之后,我慢慢地开始学习 PHP,一段时间后我意识到 JavaScript 使用了类似的语法,所以我决定学习它;是好奇心让我接触了 JavaScript。我最终意识到这不仅仅是一种普通的“脚本语言”,而是一种功能齐全的编程语言,几乎无所不能。

并不是 JavaScript 的任何特定功能让我喜欢它,而是它允许我从头开始构建东西。我通常不喜欢搜索解决方案然后将其粘贴进去,希望所有东西都能协同工作;我更喜欢能够创建解决方案的所有方面,以便我清楚地了解正在发生的事情。不幸的是,这也是我的一个弱点,当不得不与其他人一起工作和协作时,我有点恼火,因为每个人都有不同的方法。没有人会用相同的方式解决问题;这是一件好事,也是一件坏事。

我喜欢编程,但我并不喜欢许多现代语言所涉及的极端学习曲线,其中一些对我来说显得非常奇怪和复杂,而另一些则非常好。我发现 JavaScript 是一种逻辑结构化的语言,事实上,它是我喜欢使用的为数不多的技术之一。所以,是的,在我写过的一切东西中,JavaScript 是最令人满意和最有趣的。

 

CHRIS:在您最近对《学习 jQuery 1.3》一书的评论中,您提出了一种情景,即一位优秀的界面设计师开始学习 jQuery,但从未学习过“原生”JavaScript,而这将是一个严重的问题。这与我自己的经历非常相似,但我似乎在我的工作中做得还不错。我最终会完蛋吗?

JAMES:不会,不会完蛋,但学习 JavaScript 也没有坏处。由于您正在使用 jQuery,而 jQuery 本质上就是 JavaScript,因此您可能已经积累了大量的知识。我并不是反对在学习 JavaScript 之前学习 jQuery,只是这样做并不理想。这就像在了解如何编写 CSS 之前使用 CSS 框架一样。是的,您会完成工作,但是,它会是尽可能好的工作吗?这取决于个人。

我猜大多数使用 jQuery 的人主要是网页设计师。他们没有时间处理“原生”JavaScript……显然,它太复杂了,带来的麻烦比解决的问题更多。我认为,目前围绕 JavaScript 的许多负面情绪都是为了推广这些新兴的 JavaScript 库而制造出来的,这些库都声称 JavaScript 和 DOM API 达不到标准,此外,在“Web 2.0”之前,JavaScript 并没有真正被认为是一种真正的编程语言,我的意思是大家逐渐意识到 JavaScript 可以用来创建很棒的 Web 应用程序,而不仅仅是在屏幕上显示雪花!

我对 Web 专业人员持续采用 jQuery 感到震惊和印象深刻,但我也对产生的负面情绪感到担忧。JavaScript 实际上是一种很棒且功能强大的语言。它的大部分坏名声都归咎于它邪恶的表亲——DOM,尽管 DOM 的大多数错误并不是它自己造成的,而是浏览器对一个大部分都非常不错的 W3C 标准的疯狂实现。

jQuery 仅仅是一个抽象,就像所有抽象一样,它有时会失效或无法满足您的需求——当这种情况发生时,了解您正在处理什么以及如何解决它非常有用。

所以,您在学习 jQuery 之前*不需要*学习 JavaScript,但我强烈建议您这样做。如果您先学习 JavaScript,那么学习 jQuery 将易如反掌,而且您还能了解底层原理!只有在学习了 JavaScript 并不得不处理 DOM API 之后,您才能充分认识到这些抽象所提供的价值。

 

CHRIS:您创建了一个 URL 短链接服务。最近有很多关于这些服务如何“对互联网不利”的讨论。例如,链接没有获得搜索引擎的权重,以及服务关闭后未解析的 URL。您对此有什么看法?

JAMES:我实际上同意,它们对互联网不利,而像 Twitter 这样受欢迎的网站并没有起到帮助作用——反而增加了对这些服务的需求。我创建它仅仅是为了学习。我没想到它会被广泛使用,但令人惊讶的是,即使在 TinyURL 等已经存在的服务面前,它也成为了一个非常受欢迎的服务。

互联网的核心在于它将大量文档链接在一起。URL 是您最终将到达目的地的最重要指示,因此,对于普通互联网用户而言,有意义的 URL 是非常宝贵的。我反对短 URL,不是因为它们产生的技术问题(例如未解析的 URL),而是更多地考虑了可用性方面的问题。这些短 URL 服务最终会消失,只是时间问题……

 

CHRIS:在 JavaScript 中,非侵入式非常重要。似乎最好的 JavaScript 开发人员会花费大量时间在这个主题上。您对此有何看法?您在使 JavaScript 非侵入式时有哪些常用的/喜欢的策略?

JAMES:我觉得像“非侵入式”这样的流行语现在被过度使用;许多人只是将其放在博客文章标题中以试图获得关注。事实上,这并不复杂:基本前提是 JavaScript 不应该嵌入到您的 HTML 中;它应该全部保存在外部文件中,这些文件引用您的 HTML 并使用类或 ID 等钩子来操作它。像 jQuery 和 MooTools 这样的库可以使此过程更容易一些,但请注意,使用库并不能保证任何事情。

侵入式和非侵入式之间的界限变得非常模糊;有时人们可能会在两个方向上走得太远……甚至使用类或 ID 也可能被认为是侵入性的,特别是如果您只是为了行为层(即 JavaScript)而使用它们。例如,使用 <a href=”#” id=”openNewWindowLink” </a>

非侵入式 JavaScript 一个经常被忽视的方面是 CSS 及其与 JavaScript 增强的关系。如果您有一个通过 JavaScript 生成的元素,那么相应的 CSS 不应该在您的主样式表中。在这种情况下,正确的做法是使用 JavaScript 动态加载一个单独的样式表,其中包含 JavaScript 增强所需的所有 CSS。虽然这看起来可能不符合逻辑,但它是有原因的;对于没有 JavaScript 可用的用户来说,不应该浪费带宽下载他们不会使用的资源。

另一个方面是 JavaScript 代码本身。网站内容的更改不应必然导致行为层的更改。您的 JavaScript 应该灵活,能够检查多种场景,然后做出相应的调整。此外,您应该始终集成错误检查并抛出有意义的异常。这可能不被归类为“非侵入式”范式的部分,但无论如何都非常重要。