JavaScript工作场所名人堂

随着Angular,React,Vue等大型团队开发的JavaScript库的出现,不可逆转地离开了舞台,只有天才独自开发了整个库,或至少开发了库的主要部分。我建议一起回顾这些库的名称,最后找出它们的开发人员的名称。

2005年-Prototype.js


该库于2005年作为Ruby-on-Rails项目的一部分发布。该库的第一个开发人员是Sam Stephenson(请参阅www.sergiopereira.com/articles/prototype.js.html)。 Prototype.js许可证(请参阅prototypejs.org/license.html)具有指向他的个人页面sstephenson.us的链接,该页面反过来发布了作者的电子邮件:sstephenson@gmail.com。

进一步的电子邮件搜索导致其活动存储库github.com/sstephensontwitter.com/sstephenson(非公开Twitter)。您还可以了解他在Basecamp担任程序员的情况,并观看RubyConf 2016会议的视频报告。



Prototype.js库第一次形成了当时所有后续库的“绅士集合”:Ajax请求通过$(...)函数访问DOM。但是最主要的是,通过实现Enumerable接口(所有(),任何(),收集(),检测(),每个()等),向“功能主义”进行了有力的突破。实际上,随着这一特定库的普及,JavaScript编程已获得了现代风格。 Prototype.js的一些想法进入了该语言的标准,并在后来的库underscore.js和lodash.js中重复了。

Prorotype.js库有两个明显的缺点。新功能的实现基于将新属性和方法混合到本地对象中。例如,正是由于这一行,我们永远停止使用for ... in循环遍历数组元素:

// Prototype.js v 1.5.0
Object.extend(Array.prototype, Enumerable);

还有一个问题是Prototype.js库中具有全局范围的大量变量的定义:

/*  Prototype JavaScript framework, version 1.5.0
 *  (c) 2005-2007 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.5.0',
  BrowserFeatures: {
    XPath: !!document.evaluate
  },

  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
  emptyFunction: function() {},
  K: function(x) { return x }
}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}
...

为了纠正这两个错误的计算,我们定位了jquery库,我们可能会返回该库。

2010-requirejs


JavaScript的第一个版本不支持模块,因为在顶层定义的变量和函数具有全局作用域(而不是模块,文件内的局部变量),并且没有用于加载依赖模块的机制。 2009年1月,Kevin Dangoor在火星上发表了一篇名为Blue Sky的博客文章,该文章开始了有关将JavaScript移植到服务器的方法的讨论。在某个时候,出现了wiki.commonjs.org/wiki/Modules/AsynchronousDefinition(AMD)API的想法,这将允许异步加载依赖的模块,而不会超出标准(针对2009)JavaScript。此API随后未被接受用于服务器端的实现,但由于它基于标准JavaScript,因此很快在前端广泛传播。

AMD规范的第一个实现以文本形式加载模块,然后由eval()函数执行。这种方法在性能,安全性方面存在重大缺陷,并且难以调试。这些问题由requirejs库解决,该库使用程序生成的SCRIPT元素加载模块。

让我们尝试找出谁是这个想法的作者。在该库的第一个版本中,有一个指向James Burke存储库的链接(现在该库本身不在此存储库中):

/** vim: et:ts=4:sw=4:sts=4
 * @license RequireJS 0.27.1 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/jrburke/requirejs for details
 */
/*jslint strict: false, plusplus: false, sub: true */
/*global window: false, navigator: false, document: false, importScripts: false,
  jQuery: false, clearInterval: false, setInterval: false, self: false,
  setTimeout: false, opera: false */

搜索链接将通过twitter.com/jrburke,已经提到的github.com/jrburke存储库和Linkedin个人资料www.linkedin.com/in/james-burke-7994a11将我们引到Twitter 。此外,在公共领域,作者在VanJS 2013会议上有表演(是的,以前没有迷人的会议):


requirejs库的开发人员提出了一种巧妙的方式来根据AMD规范加载模块,而不会超出当时的标准JavaScript,这无疑是其优点。但是也有缺点。使用AMD模块的语法非常复杂,CommonJS小组对此表示拒绝。加载大量小模块会减慢网页的加载速度。很快,链接器发出咕unt声,吞咽,webpack和其他链接,从而抵消了使用requirejs库的好处。通常,可以将这个库描述为一种工具,它分散了一些开发人员的注意力,这些开发人员直到最后一次坚持使用vanillajs js,从过渡到新的JavaScript标准。

未完待续

All Articles