Node.js的簡史

回顧Node.js從2009年到現在的歷史 你可能難以置信,但Node.js只有9歲。 相比之下,JavaScript已經有23歲了,而我們所熟悉的網路(在Mosaic問世之後)已經有25歲了。 對於一個技術而言,9年的歷史只是極短暫的時間,但Node.js似乎已經存在了很久很久。 我很榮幸從它剛出生的那天開始就與Node一起工作,儘管當時只有很少的資訊,但你已經能夠感覺到它是一個重大的事物。 在這篇文章中,我想從歷史的角度來概述Node的大局。 一點歷史 2009年 2010年 2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年 2019年 2020年 一點歷史 JavaScript是一種由Netscape創建的的網頁瀏覽器操控語言,用於操控瀏覽器內部的網頁,Netscape Navigator。 Netscape的業務模式之一是出售Web伺服器,其中包括一個名為Netscape LiveWire的環境,可以使用伺服器端的JavaScript創建動態網頁。因此,伺服器端JavaScript的概念並不是由Node.js引入的,但它的歷史和JavaScript一樣久遠,只是當時並不成功。 導致Node.js崛起的重要因素之一就是時機。幾年來,JavaScript被視為一種認真的語言,多虧了“Web 2.0”應用程序,這些應用程序向世界展示了現代化Web體驗的可能性(比如Google Maps或GMail)。 JavaScript引擎的性能水平大幅提高,多虧於瀏覽器競爭的戰鬥,這場戰鬥至今依然激烈進行中。每個主要瀏覽器背後的開發團隊每天都在努力提供更好的性能,這對於JavaScript作為一個平台來說是個巨大的勝利。Node.js在幕後使用的V8引擎就是其中之一,特別是Chrome的JS引擎。 但當然,Node.js不僅僅因為純粹的運氣或時機而受歡迎。它在JavaScript在服務器端的編程上引入了很多創新思維。 2009年 Node.js誕生 第一個形式的npm誕生 2010年 Express誕生 Socket.io誕生 2011年 npm達到1.0版本 大公司開始採用Node.js:LinkedIn, Uber Hapi誕生 2012年 采用速度非常快 2013年 第一個使用Node.js的大型網站平台:Ghost Koa誕生 2014年 大分叉:io.js是Node.js的一個重大分叉,旨在引入ES6支持並加快發展速度 2015年 Node.js基金會成立 io.js合併回Node.js npm引入私有模組 Node 4(此前曾沒有1、2、3版本的發布) 2016年 leftpad事件 Yarn誕生 Node 6 2017年 npm更加關注安全性 Node 8 - 9 HTTP/2 V8將Node納入測試套件,正式將Node作為JS引擎的目標之一,除Chrome外還有許多JS引擎 每週下載30億個npm套件 2018年 Node 10 - 11 ES模塊 ....

最好的技術堆疊可能是你最熟悉的那個。或者也可能不是。

當你想要建立一個新應用程式時,你有兩個選擇。 第一個選擇是使用你已經熟悉的技術來建立。如果你熟悉 React,那就繼續使用 React。 另一個選擇是選擇全新的技術堆疊。如果你熟悉 React,你可能會選擇使用 Svelte 或 Vue.js。如果你熟悉 Swift,你可能會選擇使用 React Native。 這是一個困難的問題,因為作為一個開發者,我認為我們應該平衡對某個技術的深入了解,成為該技術的專家,以及對各種技術都有一定的了解。 如果你所有的應用都使用 React,你就永遠不會知道 Vue.js 的優勢。相反的情況也是如此。 當 Twitter 或 Reddit 上出現關於 Vue vs React(或其他任何東西)的「在線戰爭」時,大多數時候,一方的支持者對另一方並不是非常了解,只是根據其他人的話來進行討論。 但在選擇技術堆疊之前,很少有時間能夠探索所有選項。 通常情況下,我可能會堅持使用我最熟悉的技術堆疊,目前恰好是 React 和 Next.js,除非我確定或認為其他技術是最佳選擇。三年後,我的默認選擇可能完全不同。我並沒有對工具產生依賴,我不是一個 React 開發者。我只是一個碰巧是軟體工程師的人,碰巧經常使用 React。 很久以前,我非常深入地研究了一個技術堆疊,然後一個新的項目出現了,其中使用 Node.js 或許是更好的選擇。我們作為一個團隊決定全力支持 Node.js,儘管我們遇到了很多未知的問題,但我認為這是一個不錯的選擇。 每次切換到新的技術堆疊時,你知道你正在放棄什麼,但你不知道你真正要面對什麼。 但這就是你建立專業知識的方式。下一個項目你就會知道這是否是一個好的選擇。只有時間能夠告訴你。

網頁開發中的縮寫

技術世界充滿了各種縮寫,很難將它們全部記住。 以下是網頁開發和相關領域中的一些常見縮寫: AI 人工智慧(Artificial Intelligence) AJAX 非同步 JavaScript 與 XML(Asynchronous JavaScript And XML) API 應用程式介面(Application Programming Interface) AWS 亞馬遜網路服務(Amazon Web Services) CD 持續佈署(Continuous Deployment) CDN 內容傳遞網路(Content Delivery Network) CI 持續整合(Continuous Integration) CLI 命令列介面(Command Line Interface) CMS 內容管理系統(Content Management System) CORS 跨來源資源共用(Cross Origin Resource Sharing) CRUD 建立、讀取、更新和刪除(Create, read, update, and delete) CSS 層疊樣式表(Cascading Style Sheets) CTA 呼籲至動作(Call To Action) DDD 領域驅動設計(Domain Driven Design) DNS 網域名稱系統(Domain Name System) DOM 文件物件模型(Document Object Model) DRY 不要重複自己(Don’t Repeat Yourself) FTP 檔案傳輸協定(File Transfer Protocol) GA 谷歌分析(Google Analytics) GCP 谷歌雲端平台(Google Cloud Platform) GNU GNU’s Not Unix(GNU’s Not Unix) GPL 通用公共許可證(General Public Licence) GUI 圖形使用者介面(Graphical User Interface) HTML 超文件標記語言(HyperText Markup Language) HTTP 超文本傳輸協定(Hyper Text Transfer Protocol) HTTPS 超文本傳輸安全協定(Hyper Text Transfer Protocol Secure) IAAS 基礎設施即服務(Infrastructure As A Service) IDE 整合開發環境(Integrated Development Environment) IE 網際網路瀏覽器(Internet Explorer)(已停止更新) IP 網際網路協定(Internet Protocol) JSON JavaScript 物件表示法(JavaScript Object Notation) KISS 保持簡單愚蠢(Keep It Simple Stupid) LTS 長期支援(Long Term Support) MDN 莫茲拉開發者網絡(Mozilla Developer Network) ML 機器學習(Machine Learning) MVC 模型-視圖-控制器(Model View Controller) MVP 最小可行產品(Minimum Viable Product) NPM Node 套件管理員(Node Package Manager) OOP 物件導向程式設計(Object Oriented Programming) OSS 開放原始碼軟體(Open Source Software) PAAS 平台即服務(Platform As A Service) PHP PHP 超文字預處理器(PHP Hypertext Preprocessor) PR 拉取請求(Pull Request) REPL 讀取-執行-輸出-環迴(Read Execute Print Loop) REST 表徵狀態傳輸(REpresentational State Transfer) RPC 遠程過程呼叫(Remote Procedure Call) SAAS 軟體即服務(Software As A Service) SEO 搜尋引擎優化(Search Engine Optimization) SFC 單檔案元件(Single File Component) SFTP 安全檔案傳輸協定(Secure File Transfer Protocol) SMTP 簡單郵件傳輸協定(Simple Mail Transfer Protocol) SPA 单页应用(Single Page Application) SQL 結構化查詢語言(Structured Query Language) SSH 安全殼層(Secure SHell) SSL 安全套接層(Secure Socket Layer) TCP/IP 傳輸控制協定/網際網路協定(Transmission Control Protocol/Internet Protocol) TDD 測試驅動開發(Test Driven Development) TLD 頂級網域(Top Level Domain) TLDR 太長不讀(Too Long Didn’t Read) VPN 虛擬私人網路(Virtual Private Network) VPS 虛擬私人伺服器(Virtual Private Server) W3C 世界廣泛網 (W3) 協會(World Wide Web (W*3) Consortium) WET 寫兩次所有(Write Everything Twice) WYSIWYG 所見即所得(What You See Is What You Get) XML 可延伸標記語言(Extensible Markup Language) XSS 跨網站指令碼(Cross Site Scripting) YAGNI 不需要就別加(You Ain’t Gonna Need It)