国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

這么多人用Codesandbox,他服務器扛得住么?

開發 前端
Codesandbox是如何實現的?他會面臨leetcode一樣的服務器壓力么?這個問題的本質其實是問 —— 用戶在Codesandbox中寫的代碼,究竟是在前端還是后端編譯成靜態資源的?畢竟,如果是在后端完成,會增加服務器壓力。

大家好,我卡頌。

codesandbox是前端工程師經常使用的「代碼在線運行環境」,頁面如下:

他的應用場景很廣,比如:

  • 有代碼邏輯要分享,分享個codesandbox鏈接。
  • 有新想法需要驗證,又不想本地起個項目,用codesandbox。
  • 技術文檔演示Demo,用codesandbox。

作為一個在線運行代碼的編輯器,這么多人天天免費用,他服務器扛得住么?

畢竟,同樣作為在線代碼運行環境(主要是跑算法題)的leetcode[1],如果同時刷題的人多了,提交后都還得排隊:

codesandbox是如何實現的?他會面臨leetcode一樣的服務器壓力么?

codesandbox的分類

這個問題的本質其實是問 —— 用戶在codesandbox中寫的代碼,究竟是在前端還是后端編譯成靜態資源的?畢竟,如果是在后端完成,會增加服務器壓力。

比如,對于下面這段React代碼:

// main.jsx
import { createRoot } from "react-dom/client";
import { Cpn } from "./Cpn";

function App() {
  return (
    <Cpn />
  );
}
createRoot(document.getElementById("root")).render(<App />);

要想在瀏覽器中運行,涉及幾個前置工作:

  • 需要編譯JSX語法,比如將<App/>編譯為_jsx(App, {})。
  • 需要解析并提前下載所有依賴,比如這里的react-dom、react包。
  • 需要解析模塊依賴關系,比如main.jsx導入了Cpn.jsx中的Cpn組件。對于不支持ESM的瀏覽器,需要將代碼打包。對于支持ESM的瀏覽器,需要處理引入路徑。
  • 如果涉及到其他資源,比如圖片、文字、HTML文件,需要有相應的處理。

上述工作,codesandbox是在瀏覽器還是服務器完成的呢?

在這個例子中,這些工作都能在瀏覽器完成,比如:

  • 對于所有第三方依賴,可以在瀏覽器中直接請求CDN。
  • 涉及編譯的工作(比如編譯JSX、模塊依賴分析),本質其實是字符串的解析,可以用瀏覽器版本的babel實現。

上面的例子是一個純前端的React項目。但有些依賴服務端環境的項目沒法采用上述方式運行,比如:

  • 使用了Docker的項目。
  • 類似Next.js這樣的全棧項目。

這種情況就需要一個真實的服務端環境。

兩者的區別可以用下圖概括:

  • 純前端項目:編譯與執行都能在瀏覽器完成。
  • 全棧項目:項目編譯在服務端進行,瀏覽器負責項目執行。

他們分別對應codesandbox的兩種運行環境:

  • Browser Sandbox:基于瀏覽器的本地運行環境。
  • Cloud Sandbox:基于MicroVM的云端運行環境。

當我們通過模板創建codesandbox項目時,可以通過「右上角是否有Cloud標記」區分兩者:

可以發現:

  • 純前端項目(比如React項目、純JS項目)使用Browser Sandbox。
  • 需要服務端運行環境(比如Docker項目、全棧框架項目)使用Cloud Sandbox。

對于Cloud Sandbox,他底層使用亞馬遜開發的Firecracker快速啟動輕量級的MicroVM,這也是AWS Lambda底層使用的庫。

所以,基于Cloud Sandbox啟動的項目確實會占用服務端資源。具體來說,每個項目會分配:

  • CPU:2個虛擬 CPU(vCPUs)
  • 內存:2GB
  • 存儲:6GB

這塊是codesandbox公司的核心業務。畢竟,免費試用滿意后,可能就會上付費的Pro版(更多資源分配),或者團隊定制版。商業模式與Vercel類似 —— 提供免費基礎服務(自擔部分資源費用),通過增值的云服務收費。

而前端開發日常使用codesandbox創建的項目,大多數并不是基于Cloud Sandbox,而是基于Browser Sandbox啟動的。這些項目并不會給codesandbox帶來太多服務端壓力。

兩種sandbox的區別

有個很直觀的方式區分兩種Sandbox —— 當我們新建一個codesandbox項目,在預覽區域可以看到項目臨時url:

新開頁面,訪問這個url,如果請求的資源包括:

  • 項目運行所需的靜態資源

webpack熱更新相關代碼

那代表這是個Cloud Sandbox項目。Cloud Sandbox在云端啟動后端服務與當前頁面通信,就類似我們本地開發時起的后端服務一樣。

如果請求的資源包括:

  • 項目運行所需的靜態資源。
  • sandbox初始化相關代碼。

那代表這是個Browser Sandbox項目。

「sandbox初始化相關代碼」是一個簡化版的webpack,他會在瀏覽器執行,下載依賴、編譯代碼,打包并執行代碼。

我們平時使用codesandbox時看到的如下初始化畫面就代表Browser Sandbox在瀏覽器執行相關操作。

比如,下圖是在通過CDN安裝依賴(@babel/core):

當依賴安裝完成后,下面是編譯代碼:

Browser Sandbox實現原理

Browser Sandbox相關代碼都是開源的,讓我們按照抽象程度從上往下介紹他。

首先是封裝最完整的庫 —— @codesandbox/sandpack-react。這個React庫提供了很多開箱即用的codesandbox模塊。

比如:

  • SandPackCodeEditor:codesandbox左側的代碼編輯區域,底層采用的是codemirror[2]這個代碼編輯器。
  • SandpackConsole:codesandbox中的控制臺。
  • SandackPreview:codesandbox右側的預覽區域,會渲染一個iframe,iframe的地址對應了Browser Sandbox的執行環境。

各個組件通過postMessage與SandackPreview渲染的iframe交互。

我們會發現,codesandbox的核心實際上包含三部分內容:

  • 各種編輯器相關模塊的實現(比如代碼編輯部分、控制臺、預覽)。
  • Browser Sandpack運行環境,是一個獨立的網頁,在預覽模塊(SandackPreview)中通過iframe渲染。
  • 1與2之間通信的協議(即頁面與iframe之間的通信協議)。

@codesandbox/sandpack-react實現了1,他依賴的@codesandbox/sandpack-client[3]實現了3。

2相關的源代碼在codesandbox-client/packages/app[4]中。將這個包的代碼部署上線后,就能獲得一個Browser Sandpack運行環境。

上面已經簡單介紹了Browser Sandpack的工作原理,再將他(2)與1、3結合起來的工作原理如下:

比如,用戶選擇React作為項目模版:

編輯項目代碼后,項目代碼與preset(類似webpack中的preset選項項,不同模版對應不同preset)會通過通信協議傳遞給Browser Sandpack頁面。

Browser Sandpack頁面通過內置的mini webpack與其他工具(比如babel),編譯并執行代碼。

代碼編譯、執行的信息也會通過通信協議傳遞回各個需要的模塊。比如,控制臺模塊可以根據type為console的信息打印消息。

總結

codesandbox有兩種代碼運行環境:

  • Browser Sandpack:針對「編譯與執行都能在瀏覽器完成」的純前端項目。
  • Cloud Sandpack:針對需要服務端運行環境的項目。

這兩種環境會體現為一個獨立網站,這個網站會作為iframe嵌入在codesandbox編輯器的預覽模塊中。

預覽模塊通過定義好的通信協議與其他模塊(比如代碼編輯模塊、控制臺模塊)通信。

對于Cloud Sandpack,會占用一定服務端資源。對于Browser Sandpack,則不會占用什么服務端資源,因為他大部分邏輯都是在前端執行的。

參考資料

[1]leetcode:https://leetcode.cn/problems/two-sum/。

[2]codemirror:https://codemirror.net/。

[3]@codesandbox/sandpack-client:https://www.npmjs.com/package/@codesandbox/sandpack-client。

[4]codesandbox-client/packages/app:https://github.com/codesandbox/codesandbox-client/tree/master/packages/app。

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2024-05-16 20:48:23

ReactReact 19React 編譯器

2021-10-27 15:23:10

語言PHP開源

2017-11-10 07:08:24

前端優化策略

2020-07-02 14:12:52

C++語言編程

2024-06-14 09:21:32

2023-06-07 15:29:33

MySQL事務面試

2017-03-27 11:29:33

微軟Windows XP安全

2020-06-12 11:05:38

微信微信 ID修改微信號

2018-10-07 06:30:40

代碼設計模式面向對象原則

2021-08-09 11:32:30

左葉子節點二叉樹

2015-05-29 17:13:30

IT運維管理BTIM

2021-12-01 11:50:50

HashMap面試Java

2020-01-02 10:06:16

Java 8Java 14

2025-06-04 11:06:54

比特幣區塊鏈挖礦

2020-06-03 08:15:50

IO軟件

2014-07-16 16:23:41

浪潮服務器

2016-06-21 17:44:17

阿里云

2019-02-18 15:14:03

系統紅包測試

2024-03-11 10:15:29

2020-12-14 07:31:57

JDKJVM監控
點贊
收藏

51CTO技術棧公眾號

国产精品一区二区在线看| 亚洲精品伦理在线| 国产精品久久久久久久午夜| 国产网站在线| 欧美色播在线播放| 可以在线看的黄色网址| 雨宫琴音一区二区在线| 欧美一级免费看| 成人免费91| 日韩久久免费视频| 羞羞电影在线观看www| 亚洲成av人片一区二区梦乃| 中文字幕网av| 久久综合资源网| 婷婷无套内射影院| 蜜桃91丨九色丨蝌蚪91桃色| 韩国成人一区| 亚洲视频一二| 99热最新在线| 国产精品av久久久久久麻豆网| 国产成人一区二区在线| 蜜臀av一区| 77777少妇光屁股久久一区| 日本综合精品一区| 操人视频在线观看欧美| 久久福利在线| 久久久久999| 国产精一区二区| 欧美多人乱p欧美4p久久| 91成人小视频| 欧美另类精品xxxx孕妇| 18国产精品| 91超碰caoporn97人人| 亚洲免费观看高清完整版在线观| 68精品国产免费久久久久久婷婷| 久久草在线视频| 国产91色在线| 日韩.com| 国产一区二区三区色淫影院| 久久精品日韩欧美| 一级日韩一区在线观看| 国产成人精品免费| 欧美伦理视频在线观看| 一区二区在线免费| 国产在线一二| 精品国免费一区二区三区| 久久久男人天堂| 色悠悠久久88| 99国产精品久久一区二区三区| 琪琪亚洲精品午夜在线| 亚洲乱码电影| 日本a级片久久久| 国产精品一区二区在线观看不卡| 久久久999视频| 亚洲一区二区三区三| 国产免费永久在线观看| 欧美精品一区二区在线观看| 台湾佬成人网| 国产福利久久精品| 亚洲成人原创| 一本色道婷婷久久欧美| 99久久伊人精品| aaaaaaa大片免费看| 日本精品一级二级| 七七成人影院| 精品国产一区久久久| 久久99性xxx老妇胖精品| 99视频在线免费观看| 激情综合色综合久久综合| 男人靠女人免费视频网站| 夜夜夜精品看看| 国产激情小视频在线| 精品国产一区二区三区久久狼5月| 欧美精品一区二区三区中文字幕| 国产尤物91| 久久蜜臀中文字幕| 91社区在线| 欧美黑人极品猛少妇色xxxxx| 欧美超碰在线| 久久久无码中文字幕久...| 亚洲欧美日韩在线播放| 啪啪免费视频一区| av在线播放资源| 日韩在线免费av| 国产高清一区二区| 曰韩不卡视频| 玉米视频成人免费看| 欧美诱惑福利视频| 亚洲我射av| 上原亚衣加勒比在线播放| 99久久99久久综合| 亚洲日本高清| 亚洲欧美日韩中文在线制服| 日韩精品第一区| 亚洲av首页在线| 欧美视频在线观看 亚洲欧| 激情开心成人网| 亚洲综合在线中文字幕| 国产成a人亚洲精品| 国产一区电影| 国内精品久久久久伊人av| 日本免费新一区视频| 亚洲夫妻av| 欧美激情奇米色| 精彩视频一区二区| 你懂的免费在线观看| 91精品国产91| 丰满白嫩尤物一区二区| 国产成人在线视频免费观看| 国产成人一区三区| 久久综合av免费| 丰满的护士2在线观看高清| 成人xxxx视频| 亚洲黄色录像片| 国产精品一区二区精品视频观看| 中文字幕中文字幕在线中心一区| 欧美性猛交xxxx黑人猛交| 国产精品毛片视频| 日本三级免费网站| 日韩精品在线电影| 国产女优一区| 国产系列在线观看| 在线不卡的av| 永久91嫩草亚洲精品人人| 在线观看免费污视频| 久久久精品欧美| 国产福利一区二区三区视频 | 日韩欧美四区| 美脚丝袜脚交一区二区| 亚洲成色777777女色窝| 欧美一区=区| 91网页在线观看| 91天堂在线视频| 亚洲综合成人在线视频| 婷婷综合一区| jizz亚洲大全| 18性欧美xxxⅹ性满足| 国产精品久久久久影院亚瑟 | 97超碰人人看人人 | 欧美一区免费视频| 欧美乱熟臀69xxxxxx| 精品动漫3d一区二区三区免费版| 天堂在线视频中文网| 国产精品久久9| 中文字幕一区二区三区四区| 视频精品一区| 91精品国产高久久久久久五月天| 国语自产精品视频在线看一大j8| 国产精品乱人伦| 国产精品视频一区二区三区四蜜臂| 成人午夜天堂| 国产精品久久久久久亚洲调教| 亚洲欧美综合另类在线卡通| 国产一区二区精品福利地址| 欧美中在线观看| 久久香蕉综合色| 久久综合九色综合97_久久久| 欧美成人免费全部网站| 香港三级韩国三级日本三级| 久久中文字幕在线| 亚洲欧美一区二区三区孕妇| 欧美aaaa视频| aiai在线| 亚洲国产一区二区精品视频 | 日韩欧美亚洲国产精品字幕久久久 | 亚洲人成77777| 日韩黄在线观看| 成人ar影院免费观看视频| 亚洲一级大片| 男女18免费网站视频| 粉嫩av一区二区三区免费观看| 制服丝袜亚洲播放| 国产福利精品一区二区| 国产精品色呦| 亚洲天堂2017| 亚洲最大免费| 国内久久久精品| 欧美日本精品一区二区三区| 国产精品白丝jk白祙喷水网站| 豆花视频一区二区| 台湾av在线二三区观看| 日韩中文不卡| 欧美激情影音先锋| 欧美性猛交xxxx乱大交蜜桃| 国产黄人亚洲片| 亚洲精品合集| 2024最新电影在线免费观看| 亚洲国产精品久久久久婷蜜芽| 国产精品香蕉在线观看| 亚洲精品自在久久| 亚洲精品中文在线| 奇米888四色在线精品| 亚洲高清在线一区| 国产视频精选在线| 日韩av一二三四区| 久久国产主播精品| 久久国产精品99国产精| 欧美日韩国产高清一区| aaa亚洲精品| 99热免费精品在线观看|