1. 程式人生 > >為什麼要把 JavaScript 放到伺服器端上執行?

為什麼要把 JavaScript 放到伺服器端上執行?

因為在當年,Node.js的作者Ryan Dahl是一名資深的C/C++程式設計師,在創造出Node之前,他的主要工作都是圍繞高效能Web伺服器進行的。經歷過一些嘗試和失敗之後,他找到了設計高效能,Web伺服器的幾個要點:事件驅動、非阻塞I/O

所以Ryan Dahl最初的目標是寫一個基於事件驅動、非阻塞I/O的Web伺服器,以達到更高的效能,提供Apache等伺服器之外的選擇。他提到,大多數人不設計一種更簡單和更有效率的程式的主要原因是他們用到了阻塞I/O的庫。寫作Node的時候,Ryan Dahl曾經評估過C、Lua、Haskell、Ruby等語言作為備選實現,結論為:

C的開發門檻高,可以預見不會有太多的開發者能將它用於日常的業務開發,所以捨棄它;

Ryan Dahl覺得自己還不足夠玩轉Haskell,所以捨棄它;

Lua自身已經含有很多阻塞I/O庫,為其構建非阻塞I/O庫也不能改變人們繼續使用阻塞I/O庫的習慣,所以也捨棄它;

而Ruby的虛擬機器由於效能不好而落選。

相比之下,JavaScript比C的開發門檻要低,比Lua的歷史包袱要少。儘管伺服器端JavaScript存在已經很多年了,但是後端部分一直沒有市場,可以說歷史包袱為零,為其匯入非阻塞I/O庫沒有額外阻力。另外,JavaScript在瀏覽器中有廣泛的事件驅動方面的應用,暗合Ryan Dahl喜好基於事件驅動的需求。當時,第二次瀏覽器大戰也漸漸分出高下,Chrome瀏覽器的JavaScript引擎V8摘得效能第一的桂冠,而且其基於新BSD許可證釋出,自然受到Ryan Dahl的歡迎。考慮到高效能、符合事件驅動、沒有歷史包袱

這3個主要原因,JavaScript成為了Node的實現語言。

相關推薦

為什麼 JavaScript 放到伺服器執行

因為在當年,Node.js的作者Ryan Dahl是一名資深的C/C++程式設計師,在創造出Node之前,他的主要工作都是圍繞高效能Web伺服器進行的。經歷過一些嘗試和失敗之後,他找到了設計高效能,Web伺服器的幾個要點:事件驅動、非阻塞I/O。 所以Ryan Dahl最初的目標是寫一個基於事件驅

伺服器安裝Jupyter

  最近見到周圍有些人使用Jupyter,網頁端程式設計感覺挺爽。有需要的童鞋可以試著安裝在伺服器,謹此記錄。 首先應該是需要安裝一個anaconda Anaconda安裝步驟[1] 官網地址: https://www.anaconda.com/downlo

linux基礎程式設計 套接字socket 完整的伺服器執行緒socket程式

此段程式來自我的一個專案中,稍微做了些修改,執行穩定,客戶端程式比較簡單所以未編寫,可以用socket除錯工具測試此段程式碼 費話不多說,直接上程式碼 #include<stdlib.h> #include<stdio.h> #include&

scala編寫的Spark程式遠端提交到伺服器叢集執行

一.需要的軟體: eclipse 相應版本的scalaIDE 與叢集一樣的spark安裝包,主要是要用到spark中的jar包 與叢集一樣的hadoop安裝包 與hadoop版本對應的winutil.exe,hadoop.dll(只要版本差距不大不一樣也沒關

在WinForm中通過HTTP協議向伺服器傳檔案

相信用ASP.NET寫一個上傳檔案的網頁,大家都會寫,但是有沒有人想過通過在WinForm中通過HTTP協議上傳檔案呢? 有些人說要向伺服器端上傳檔案,用FTP協議不是很簡單嗎?效率又高,為什麼還要使用HTTP協議那麼麻煩呢?這裡面有幾個原因: (1)FTP伺服器的部署相對麻

React 為什麼事件掛載到 document & 事件機制原始碼分析

## 前言 我們都知道 React 元件繫結事件的本質是代理到 document 上,然而面試被問到,為什麼要這麼設計,有什麼好處嗎? 我知道肯定不會是因為虛擬 DOM 的原因,因為 Vue 的事件就能掛載到真實的 DOM 節點。所以繼續往下探究吧 ## React 模擬 DOM 事件冒泡的原理 設有

一.背景 先說下windbg使用場景.各位coder在工作中或多或少都會遇到下面四種情況 1.原生代碼好好的,伺服器執行一段時間後,IIS服務突然佔用 w3wp.exe CPU突然100% ,

一.背景 先說下windbg使用場景.各位coder在工作中或多或少都會遇到下面四種情況 1.原生代碼好好的,放伺服器上執行一段時間後,IIS服務突然佔用 w3wp.exe CPU突然100% ,不得不回收應用程式池,如果哪次回收晚了,被客戶發現,後果很痛苦~ 2.你的w3wp.

Node.js 11.4.0 釋出,伺服器JavaScript 執行環境

   Node.js 11.4.0 釋出了,主要更新如下: console,util: console functions now handle symbols as defined in the spec. https://github.com

vue腳手架的專案放在centos伺服器執行

1.首先把vue專案用npm run build打包,預設打包後的檔案是dist,對應下圖的public 目錄: 2.建立app.js,服務端程式碼,反正這個套路來就是了 const Koa = require('koa'); const body = require('koa

Node v10.14.2 (LTS) 釋出,伺服器JavaScript 執行環境

   Node v10.14.2 (LTS) 釋出了,此 LTS 版本包含 374 次提交。其中測試或基準相關的有 165 次,文件相關的有 77 次,與構建/工具相關的有 29 次,和更新依賴相關的有 15 次。 包含以下值得關注的變更: deps: upgrad

Delphi 客戶的檔案或者目錄傳到伺服器

1、StringReplace字串替換函式: function StringReplace (const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; rfReplaceAll:全部替換

加拿大AI帶飛機,他們都準備幹什麽?

飛機AI隨著旅客的日益增加、線路的不斷開辟,空中航線變得愈加繁忙。相應的,航空公司之間的競爭日趨激烈,對飛機的檢修維護等工作更顯得不可開交。據國際航空運輸協會(IATA)的數據顯示,在未來20年,全球民航旅客的人數將翻一番。與之相應的是,空中交通管制、機場調度和飛機系統將面臨巨大的壓力。於是,人工智能開始成為

伺服器執行kaldi說話人識別模型訓練程式遇到的小問題

伺服器上已開啟安裝了kaldi工具的docker容器,開啟方法見上一篇部落格。 說話人識別的例程用的是aishell提供的資料集,這裡我的資料集已經下載到伺服器了,所以後面我會再執行腳本里去掉下載資料集的命令。 1、容器開啟的方法: 在上一篇部落格的基礎上用以下命令開啟 docker

在vue專案中實現註冊時改變頭像,同時實現將圖片傳的伺服器

 一.如何實現在註冊時點選頭像時實現更改圖片的操作      1.將img和input[type="file"]放在同一個div中,利用絕對定位,讓兩者擁有相同的大小,將input的預設樣式變為透明,讓img覆蓋的input之上;img中有一個屬性,acc

Qt TCP通訊,多執行伺服器

相信許多初學Qt的同學都會和我一樣遇到這樣的問題: 一、Qt TCP通訊在使用nextPendingConnect後,伺服器端就只會與最後接入的客戶端通訊,這個時候就會考慮繼承QThread實現多執行緒,從而實現多個客戶端與伺服器端通訊,每當一個新的客戶端連線時,通過標識碼socke

winform傳圖片至flask伺服器

winform端程式碼: public static string PostImageData(string url, IDictionary<string, string> parameters, int timeout, string userAgent, CookieColle

如何使用Cygwin在Windows執行OpenSSH SSHD伺服器

記錄幾款非常有趣, 但不怎麼耳熟的軟體:     Cygwin 是可以安裝 OpenSSH server 和 client 的, Mosh 也可以, 這對於 Linux 使用者而言就非常方便了. 如何使用Cygwin在Windows上執行OpenSSH SSHD伺服器 htt

【隨堂筆記】unity中socket用法(三,伺服器執行緒的使用)

手機專案,最好不要使用執行緒,因為unity專門提供了協程,枝執行緒不能訪問主執行緒(ui) 手機使用執行緒,容易導致硬體出問題 執行緒測試程式碼 /// <summary> /// 執行緒的測試方法 /// </summary>

在Linux伺服器執行jar包,並且使jar包一直處於後臺執行

1.我jar包在linux的目錄為/a/bbb.jar         正常情況下,使用在/a目錄下使用  java -jar bbb.jar 可以直接執行該jar包的專案,執行成功之後使用crtl+c可以退出專案執行,

基於springboot多模組專案使用maven命令打成war包放到伺服器執行的問題

首先,大家看到這個問題,可能並不陌生,而且腦子裡第一映像就是使用mava中的clear package 或者 clear install進行打包,然後在專案中的target資料夾下面找到xxx.war,將這個war包放到外接的tomcat伺服器下的webapps下面,最後執行tomcat的bin資料夾下面的s