如果您像我一样,经常在 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 之后,您才能充分认识到这些抽象所提供的价值。
URL 短链接服务。最近有很多关于这些服务如何“对互联网不利”的讨论。例如,链接没有获得搜索引擎的权重,以及服务关闭后未解析的 URL。您对此有什么看法?
CHRIS:您创建了一个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 应该灵活,能够检查多种场景,然后做出相应的调整。此外,您应该始终集成错误检查并抛出有意义的异常。这可能不被归类为“非侵入式”范式的部分,但无论如何都非常重要。
不错的谈话,谢谢
我最近偶然发现了 James 的博客,我立刻被他渊博的知识和写作风格所吸引。过去 10 年来,我一直以商业目的在网络上摸索,看到 James 作品的质量,我真的不会惊讶于未来看到 James 出一两本书。
喜欢你的作品,James,继续努力;)
感谢 Chris 发布的第一篇帖子!很棒的问题和答案,James,继续努力。
感谢这篇文章,很棒的采访。发现了 James 的博客,订阅了,期待更多!
非常感谢 :)
James 是一个“JavaScript 极客”,我真的很喜欢他的帖子。感谢 Chris 进行这次采访。
已订阅。很棒的采访 :-)
很棒的采访,学习编写代码是我自己正在学习的事情,你只需要投入时间来掌握它,就像任何其他事情一样。
我同意先学习原生 JavaScript。如果库/脚本本身出现问题怎么办?那么你要么必须谷歌搜索信息,希望能找到一些可行的方法,要么你必须付费请人帮你做。
作为一名有抱负的 Web 应用开发者,我认为在修复突然出现的错误和 bug 时,学习核心技术绝对至关重要。
感谢 Chris 对我的采访,一些非常棒的问题;我很享受回答它们! :)
感谢大家的评论!
很棒的采访。感谢您提供 James 博客的链接——我可能在那里花费的时间比在 CSS-Tricks 上花费的时间还要多 ;-)
我知道 Jame 会接受关于 JavaScript 部分的采访!!!
很酷的东西!我希望我当时意识到我会如此热爱网络。
感谢您所做的一切 :D
很棒的采访..一些很好的观点。我同意库部分,它们让我们变得懒惰,扼杀了我们学习原生 JavaScript 的动力。库是伪装的东西……几天后你就会知道它们会对你造成什么伤害。它们就像砷,慢性毒药,会慢慢扼杀你编写原生 JavaScript 的技能。
顺便说一句,我敢打赌周五会是 David Walsh!
很棒的采访。我也很高兴你提到了在不擅长编写原生 Javascript 的情况下使用 jQuery 之类的东西,因为这正是我所处的境地。擅长实现和使用 jQuery,但几乎不会编写原生 JS。好问题!
有趣的阅读。
在如此年轻的年龄拥有如此专注的头脑令人难以置信。“不得不与其他人一起工作和合作时会有点恼火”以及戴着太阳镜让我想起了我认识的一些自闭症儿童。我想知道 James 是否患有自闭症?
哇!我真的很受 James 的启发……真的有很多东西可以从他的作品中学到……。
不错的采访。
非常棒的采访,James,感谢你的话语,Chris,发布这些采访是一个非常棒的想法,非常感谢。和平。
James,我认为你在最后一个问题上太容易地跳到了“应该”这个词。这确实看起来是一个很好的解决方案,但实际上它最终可能会损害整体加载时间。将您特定于 js 的 CSS 包含在您的主样式表中,除非有很多,否则对于不允许 Javascript 的用户来说,其影响将微乎其微,并且(至少“可能”,并且可能“通常”)对您更重要的用户群来说,影响更大,因为这可能会使他们的 HTTP 请求增加一倍。