JavaScript Hall of Fame di Tempat Kerja

Dengan munculnya perpustakaan JavaScript yang dikembangkan oleh tim besar, seperti Angular, React, Vue, meninggalkan arena secara ireversibel, para genius tunggal yang mengembangkan semua atau setidaknya bagian utama perpustakaan sendiri. Saya sarankan mengingat nama perpustakaan ini bersama-sama, dan, akhirnya, mencari tahu nama-nama pengembang mereka.

2005 - Prototype.js


Perpustakaan ini dirilis pada 2005 sebagai bagian dari proyek Ruby-on-Rails. Pengembang perpustakaan pertama adalah Sam Stephenson (lihat www.sergiopereira.com/articles/prototype.js.html ). Lisensi Prototype.js (lihat prototypejs.org/license.html ) memiliki tautan ke halaman pribadinya sstephenson.us , yang, pada gilirannya, menerbitkan email penulis: sstephenson@gmail.com.

Pencarian email lebih lanjut mengarah ke repositori aktifnya, github.com/sstephenson, dan twitter.com/sstephenson (Twitter non-publik). Anda juga dapat mengetahui tentang dia bahwa ia bekerja sebagai Programmer di Basecamp, dan menonton laporan video dari konferensi RubyConf 2016



Untuk pertama kalinya, perpustakaan Prototype.js membentuk "gentleman's set" dari semua perpustakaan berikutnya pada waktu itu: akses ke DOM melalui fungsi $ (...), permintaan Ajax. Tetapi hal utama adalah terobosan yang kuat menuju "fungsionalisme" dengan mengimplementasikan antarmuka Enumerable (semua (), any (), kumpulkan (), deteksi (), masing-masing (), dll.). Bahkan, dengan penyebaran perpustakaan khusus ini, pemrograman JavaScript telah memperoleh gaya modern. Beberapa ide Prototype.js memasuki standar bahasa, dan diulangi di perpustakaan kemudian menggarisbawahi.js dan lodash.js.

Pustaka Prorotype.js memiliki dua kelemahan signifikan. Implementasi fungsi baru didasarkan pada pencampuran properti dan metode baru ke objek asli. Misalnya, karena baris ini kami selamanya berhenti menggunakan for ... in loop untuk beralih ke elemen array:

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

Juga bermasalah adalah definisi sejumlah besar variabel dengan cakupan global di perpustakaan 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);
    }
  }
}
...

Sebagai koreksi dari dua kesalahan perhitungan ini, perpustakaan jquery diposisikan, yang dapat kami kembali.

2010 - requirejs


Versi pertama JavaScript tidak memiliki dukungan modul, karena variabel dan fungsi yang didefinisikan di tingkat atas memiliki cakupan global (dan bukan lokal dalam modul, file), dan tidak ada mekanisme untuk memuat modul yang bergantung. Pada Januari 2009, Kevin Dangoor menerbitkan posting blog Blue Sky on Mars, yang memulai diskusi tentang cara untuk mem-port JavaScript ke server. Pada titik tertentu, muncul ide API wiki.commonjs.org/wiki/Modules/AsynchronousDefinition (AMD), yang memungkinkan memuat modul yang tergantung secara asinkron, tanpa melampaui standar (untuk 2009) JavaScript. API ini kemudian tidak diterima untuk implementasi di sisi server, tetapi segera menyebar luas di frontend, karena didasarkan pada JavaScript standar.

Implementasi pertama dari spesifikasi AMD memuat modul dalam bentuk teks, yang kemudian dieksekusi oleh fungsi eval (). Pendekatan ini memiliki kelemahan signifikan dalam hal kinerja, keamanan, dan sulit untuk di-debug. Masalah-masalah ini dipecahkan oleh library Requirejs, yang memuat modul menggunakan elemen SCRIPT yang dihasilkan secara program.

Mari kita coba mencari tahu siapa penulis ide ini. Di versi pertama perpustakaan, ada tautan ke repositori James Burke (sekarang perpustakaan itu sendiri tidak ada dalam repositori ini):

/** 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 */

Pencarian tautan membawa kami ke Twitter oleh twitter.com/jrburke , repositori github.com/jrburke yang telah disebutkan, dan profil Linkedin www.linkedin.com/in/james-burke-7994a11 . Juga, dalam domain publik ada kinerja oleh penulis di konferensi VanJS 2013 (ya sebelumnya ada konferensi tidak glamor):


Pengembang perpustakaan Require muncul dengan cara yang cerdik untuk memuat modul sesuai spesifikasi AMD, tanpa melampaui JavaScript standar pada waktu itu, yang merupakan kelebihannya. Tapi ada juga kerugiannya. Sintaks untuk menggunakan modul AMD agak rumit, yang ditolak oleh kelompok CommonJS. Memuat sejumlah besar modul kecil memperlambat pemuatan halaman web. Segera, linker mendengus, menelan, webpack, dan lainnya muncul yang meniadakan manfaat menggunakan perpustakaan yang diperlukan. Secara umum, orang dapat mencirikan perpustakaan ini sebagai alat yang mengalihkan perhatian beberapa pengembang, yang hingga saat terakhir berpegang pada vanillajs js, dari transisi ke standar JavaScript baru.

Bersambung

All Articles