為什麼 JavaScript 會無處不在?
首先,我並不是一名開發人員。
幾年前,我甚至都分不清什麼是後端開發、什麼是前端開發。Vue、React、Node……它們都是什麼東西?
我根本無法理解為什麼 JavaScript 會無處不在,為什麼它會這麼重要。
我知道我並不是唯一一個感到如此疑惑的人。不管是你是一名開發新手,還是一個需要與開發人員緊密合作的人,都會感到很茫然。
因為工作的關係,我每天需要與開發人員待在一起,時間長了,我對這個問題才開始有了一絲瞭解。
我將在這篇文章中嘗試回答下面這些問題:
-
什麼是 JavaScript?
-
為什麼 JavaScript 這麼重要?
-
我們為什麼要使用 JavaScript?
-
JavaScript 的未來會怎樣?
什麼是 JavaScript?
當一個人在面對新鮮事物時,通常會先在維基百科上搜尋它的定義。如果你搜尋 JavaScript,就會得到這樣的描述:
我們可以從這些資訊知道,JavaScript 是一門客戶端程式語言。現在,我們假設只知道 JavaScript 是一個用於給網站新增互動性的工具。
瀏覽器需要三個東西才能讓我們看到網頁上呈現的內容:
-
用於結構化內容的 HTML;
-
用於給內容新增樣式的 CSS;
-
讓內容活起來的 JavaScript。
它們看起來似乎很簡單,但請相信我,這裡涉及的東西可不止這麼多。
JavaScript 簡史
要想知道我們現在在哪裡以及未來要到哪裡去,首先需要了解我們是從哪裡來的。JavaScript 走過了一條漫長且崎嶇的道路。
JavaScript 最早可以追溯到 1995 年,第一個 JavaScript 版本誕生於 Netscape 辦公室裡。1995 年……我們可以想象一下當時的 Web 世界是多麼的不同!當時我才三歲,相信很多讀者那個時候都還沒出生。Netscape 公司本身就是一個很遙遠的記憶。
但在那個時候,Netscape 的 Navigator 是最為流行的瀏覽器之一。這家公司開發了 JavaScript,作為 Java 的夥伴程式語言。他們想要一門看起來像 Java、同時又能壓制其他原本也可以在瀏覽器上執行的其他語言(如 Python、Tcl、Scheme,等等)。
那個時候,Web 上都是完全靜態的網頁,這些網頁使用 HTML 和 CSS 構建,而 JS 給它們帶來了動態性。
開發 JavaScript 這門語言的最初目標是要讓 Web 成為一個全能的應用程式平臺,也就是說,JavaScript 既可以執行在客戶端,也可以執行在伺服器端。但這個想法並沒有取得成功,因為過了很多年之後才有人願意拿它當成一門伺服器端程式語言看待。不管怎樣,JavaScript 還是在前端領域得到了蓬勃發展,成為 Web 的標準程式語言。
在 Navigator 壽終正寢之後,其他 Web 瀏覽器(從 IE 到 Firefox,再到 Chrome)接過了接力棒。
JavaScript 的出現太匆忙,在早期出現了各種奇怪的阻力,對語言的採用造成了阻礙。但因為其自身具備了強大的特性,這些阻力並沒能阻止它的發展。
接下來,ECMA 標準出現了,它將 JavaScript 帶給了更加廣大的受眾和其他潛在的實現者,比如微軟。
如果想繼續瞭解 JavaScript 的歷史,可以閱讀這篇文章(https://auth0.com/blog/a-brief-history-of-javascript/)。
為什麼我們需要 JavaScript?
為什麼 Netscape 要開發一門新的語言,光是有 Java 還不夠嗎?
在當時看來,Java 並不適合所有的 Web 開發受眾,比如指令碼編寫人員、業餘愛好者和設計人員。
隨著 JavaScript 到來,它有可能可以滿足不同的受眾。元件開發者和企業級專業開發人員使用 Java,指令碼編寫人員和設計人員可以使用 JavaScript。在現代 Web 開發團隊中,後者被稱為前端開發者。
這門語言之所以叫作 JavaScript,是為了趕上 Java 的那一波流行浪潮,以便加速語言的採用。在現在看來,這兩門語言之間其實找不到太多的相似之處。
正如之前所提到的,JavaScript 給 Web 帶來了動態特性。那麼這意味著什麼呢?每次你在網頁上看到的以下這些東西都離不開 JavaScript:
-
自動完成;
-
在不重新重新整理整個頁面的情況下載入新的內容和資料;
-
翻轉效果和下拉選單;
-
元素動畫效果,比如漸褪、縮放大小或移動;
-
播放音訊和視訊;
-
驗證表單資料;
-
等等……
JavaScript 是一門直接被嵌入到 HTML 中的指令碼語言。這也是唯一一門可以被 Web 瀏覽器理解的語言。瀏覽器讀取 JavaScript,然後解析它,執行它,由此建立強大的客戶端體驗。
從 2017 年開始,現代瀏覽器也支援 WebAssembly。WebAssembly 是一門可以與 JavaScript 一起執行的現代語言。
JavaScript 之所以能夠達到今天的狀態,是因為它是開放且標準化的,最重要的是——不管你同意與否——它是一門非常好的語言。它的動態特性和 DOM 的緊密整合非常適合 Web 環境。
JavaScript 也可以與其他語言相容,這對於執行其他語言(如 PHP、Python、Ruby、Java 或.NET)的 Web 伺服器來說是非常重要的。因為執行在瀏覽器中的 JavaScript 與如何生成 HTML 是 100% 分離的,不管伺服器端使用了是什麼語言,都不會影響使用者的體驗。
為什麼 JavaScript 這麼重要?
雖然一直以來 JavaScript 都是一門執行在瀏覽器上的語言,但在一開始並沒有得到開發社群共同認可。即使是 JavaScript 之父 Brendan Eich 在 2008 也曾經說過一些“中傷”JavaScript 的話:
很多人詛咒 JavaScript,包括我自己在內。我仍然把它看成是一個 C 語言和 Self 的“怪胎”兒子。用 Johnson 博士的話說就是:“好的部分不是原創的,而原創的部分並不好”。
但十多年後,JavaScript 以前所未有的面貌展現在我們面前,它已經變得無處不在。
為什麼會這樣?
要想知道這個問題的答案,我們需要先看看構建在 JavaScript 之上的生態系統。
那麼到底是 JavaScript 的強大促成了這個蓬勃發展的生態系統,還是生態系統讓 JavaScript 進一步演化,併成為一門更加不可或缺的語言?
或許,我們應該把這場“JavaScript 革命”歸功於 ECMAScript 6(ECMAScript 2015)的釋出。ES6 增加了新的語法,可用來開發複雜的應用程式,還有很多其他特性可以被視為下一代 JavaScript。
總之,活躍的開發社群和 Web 的崛起將 JavaScript 推向了風口浪尖。
現在的前端開發都在使用哪些語言
在很長一段時間內,網站份額被基於 PHP 的 CMS(比如 WordPress)所佔據。伺服器端的程式碼負責處理大部分邏輯。但這種情況正在發生變化,你可能聽說過“靜態”網站又回來了,但它們絕對與 90 年代所謂的靜態生成網站不一樣。
現代瀏覽器可以讓這些內容變得可互動和完全動態化。因為有了 JavaScript,可以直接在客戶端,也就是瀏覽器中處理邏輯。
現在的一些知名的 Web 應用程式就是使用 JS 開發的。想想 Facebook、Gmail、Twitter,等等。如果沒有了 JavaScript,這些應用程式就不會那麼有吸引力了。
這些科技巨頭還開發了自己的 JavaScript 框架,然後其他成千上萬的開發者基於這些框架開發自己的 Web 應用程式。你可能聽說過由谷歌開發的 Angular 和由 Facebook 開發的 React。這裡還需要提一下 Vue,雖然它不是由哪個科技巨頭公司開發的,但它是主流 JS 框架生態圈不可或缺的部分。
這些框架不僅幫助開發者減少用於開發基於 JS 的網站和應用程式的時間和工作量,它們還帶來了新的 Web 體驗。以單頁應用程式(SPA)為例,SPA 可以在不重新整理整個頁面的情況下動態載入部分內容,讓網頁看起來就像是桌面應用程式。
多面手
或許,JavaScript 主要還是被用在前端開發當中。但在 2019 年,JavaScript 可以做的事情會更多。
伺服器端
在最開始,人們嘗試在伺服器端執行 JavaScript,但並沒有取得成功。很多人認為 JavaScript 不太可能成為一門穩定的後端開發語言,直到 Node.js 的出現。
現如今,JS 執行時已經成為非常流行的 Web 伺服器工具。這意味著 JS 開發人員可以藉助 Node.js 來開發客戶端和伺服器端程式碼,而不需要依賴外部的 Web 伺服器。
移動 App
在過去,我們需要使用其他程式語言來開發移動 App,比如使用 Objective-C 開發 iOS 應用,使用 Java 開發 Android 應用。現在比以往更容易使用 JavaScript 來連線移動 API,也就是說,你可以通過 JavaScript 呼叫移動裝置的功能,比如攝像頭。
這為更為廣大的開發者開啟了開發移動 App 的大門,而他們無需為此學習新的程式語言。
除此之外,使用 JavaScript 開發移動 App 也在效能方面帶來了更多可能性。以漸進式 Web App(PWA)為例,因為組合了最好的 Web 特性和最好的 App 特性,PWA 改進了可靠性、效能和粘性。它們還帶來了一些令人印象深刻的新功能,比如離線瀏覽。
API 整合
開發者可以使用 JavaScript 從其他資料來源獲取資料,並展示在自己的網站上。模組化是 Web 開發領域很受重視的一個概念——使用不同的工具執行特定的任務。因為有了 API 和 JavaScript,現在可以很容易就構建出這種技術棧。
為什麼要使用 JavaScript?
這個問題的另一種問法是:JavaScript 給我們帶來了什麼好處?
JavaScript 的好處
-
在客戶端執行邏輯帶來了更快的使用者體驗。因為程式碼可以直接執行在瀏覽器中,減少了伺服器端呼叫,極大了減少了載入時間。即使需要呼叫伺服器,因為 JS 是非同步的,所以可以在後臺與伺服器通訊,而不會中斷前端正在發生的使用者互動。
-
在一開始,JavaScript 就將使用者介面互動性帶到了 Web 上。現在,它也為所有型別的應用程式帶來了這種互動性。
-
JavaScript 是各種響應式 Web 設計背後的功臣。越來越多的開發者需要為不同的瀏覽器和裝置適配他們的設計,通過組合 HTML5、CSS3 和 JavaScript,他們可以在同一個程式碼庫中完成所有的事情。
-
對於開發者來說,JavaScript 簡單易學,而且可以很快上手開發。它的語法很簡單,也很靈活,可以簡化複雜應用程式的開發工作。很多現成的框架和包讓開發人員的開發工作變得更容易。
-
JavaScript 非常流行,如果說流行程度並不能與高質量劃上等號,但至少可以說明一件事情:你可以在社群裡為你遇到的問題找到解決辦法。況且,如果你想招聘 JavaScript 開發人員,可以很容易就招到,因為有很多候選人等在那裡。
但 JavaScript 並不完美,它也有一些潛在的不足。
JavaScript 的潛在不足
-
搜尋引擎究竟能夠爬取 JavaScript 到什麼程度?這個問題目前尚不清楚。但這個問題並非沒有解決辦法,一些爬蟲在遇到 JavaScript 時已經知道如何處理了。
-
JavaScript 膨脹。專案中包含太多的 JavaScript 最終會造成效能問題。解決這個問題的方法是隻在需要的地方插入 JavaScript 程式碼,而不是把它們搞得到處都是。
-
JavaScript 生態系統中的包可以讓開發人員在不重新發明輪子的情況下快速完成開發工作,但這也帶來了“依賴項地獄“問題。
JavaScript 的未來
現在,我們可以暢想一下 JavaScript 的未來,以及我們可以從中期待些什麼。
JavaScript 和它的生態系統會繼續演化發展。我個人認為,在未來,新的工具會逐漸減少,但大頭玩家會變得更加成熟,並得到更廣泛的採用。我們已經在 JS 框架方面看到了這一點,React 和 Vue 正在成為主角。
其他框架也是如此,Gatsby、Next.js 和 Nuxt 正逐步成為領先的靜態網站和 PWA 生成器。
TypeScript 可能會扮演重要的角色。TypeScript 是 JavaScript 的超集,已經被社群大規模採用。
在未來,科技世界有很多東西會對前端開發造成重要影響,比如人工智慧和物聯網。JavaScript 將會被應用在新的領域。
最後,如果你想在這個領域站穩腳跟,請不要停下學習新事物的腳步!
相關文章
- 為什麼篝火在電子遊戲裡無處不在?遊戲
- 雲原生的新思考,為什麼容器已經無處不在了
- 無處不在的時序資料能帶來什麼?
- 網路無處不在
- Python語言無處不在,是什麼原因讓它如此火?Python
- 無處不在的 path 模組
- 祂無處不在 -- 疾病的處理.
- 我為什麼不在乎人工智慧人工智慧
- 網路安全風險無處不在
- Python 無處不在的 elsePython
- [譯] JavaScript 中為什麼會有 Symbol 型別?JavaScriptSymbol型別
- 為什麼不在標頭檔案做定義
- 思科讓資料中心無處不在
- 你為什麼會恐懼人工智慧?它有什麼可怕之處?人工智慧
- 為什麼 JavaScript 會在移動端中勝出?JavaScript
- 三個維度看兩會,科技網際網路無處不在
- 學習專案管理好處無處不在(轉)專案管理
- 為了保護當今的網路,安全必須無處不在
- 生活中無處不在的資料分析
- JAMA子刊:防癌運動無處不在!
- Go 為什麼不在語言層面支援 map 併發?Go
- 請問什麼時候物件分配會不在 TLAB 內分配物件
- javascript忍者祕籍(第二版)翻譯學習 第一章 JavaScript無處不在JavaScript
- 摩杜雲:以邊緣計算為基礎,讓“雲”無處不在
- 讓“無處不在的工作空間”成為可能! Ivanti不是說說而已...
- 專案管理一迭代無處不在薦專案管理
- 為什麼總有人黑 JavaScript?JavaScript
- 為什麼Javascript需要型別?JavaScript型別
- 原創:為什麼是javascript?JavaScript
- 為什麼處理有序陣列比無序陣列快?陣列
- 無所不在的JavaScript與物聯網裝置JavaScript
- 為什麼 JavaScript 的 this 要這麼用?JavaScript
- Python能幹什麼?為什麼會火?Python
- 3 * 0.1 == 0.3將會返回什麼?為什麼?
- 為什麼轉行都會選擇Python呢?學習python有什麼好處?Python
- JS 裡為什麼會有 thisJS
- 為什麼專案會延期?
- 想象一個人工智慧無處不在的世界人工智慧