Codesandbox是如何实现的?他会面临leetcode一样的服务器压力么?这个问题的本质其实是问 —— 用户在Codesandbox中写的代码,究竟是在前端还是后端编译成静态资源的?毕竟,如果是在后端完成,会增加服务器压力 。
文章插图
大家好,我卡颂 。
codesandbox是前端工程师经常使用的「代码在线运行环境」,页面如下:
【这么多人用Codesandbox,他服务器扛得住么?】
文章插图
他的应用场景很广,比如:
- 有代码逻辑要分享,分享个codesandbox链接 。
- 有新想法需要验证,又不想本地起个项目,用codesandbox 。
- 技术文档演示Demo,用codesandbox 。
毕竟,同样作为在线代码运行环境(主要是跑算法题)的leetcode[1],如果同时刷题的人多了,提交后都还得排队:
文章插图
codesandbox是如何实现的?他会面临leetcode一样的服务器压力么?
codesandbox的分类这个问题的本质其实是问 —— 用户在codesandbox中写的代码,究竟是在前端还是后端编译成静态资源的?毕竟,如果是在后端完成,会增加服务器压力 。
比如,对于下面这段React代码:
// mAIn.jsximport { createRoot } from "react-dom/client";import { Cpn } from "./Cpn";function App() {return (<Cpn />);}createRoot(document.getElementById("root")).render(<App />);
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 需要编译JSX语法,比如将<App/>编译为_jsx(App, {}) 。
- 需要解析并提前下载所有依赖,比如这里的react-dom、react包 。
- 需要解析模块依赖关系,比如main.jsx导入了Cpn.jsx中的Cpn组件 。对于不支持ESM的浏览器,需要将代码打包 。对于支持ESM的浏览器,需要处理引入路径 。
- 如果涉及到其他资源,比如图片、文字、html文件,需要有相应的处理 。
在这个例子中,这些工作都能在浏览器完成,比如:
- 对于所有第三方依赖,可以在浏览器中直接请求CDN 。
- 涉及编译的工作(比如编译JSX、模块依赖分析),本质其实是字符串的解析,可以用浏览器版本的babel实现 。
- 使用了Docker的项目 。
- 类似Next.js这样的全栈项目 。
两者的区别可以用下图概括:
- 纯前端项目:编译与执行都能在浏览器完成 。
- 全栈项目:项目编译在服务端进行,浏览器负责项目执行 。
文章插图
他们分别对应codesandbox的两种运行环境:
- Browser Sandbox:基于浏览器的本地运行环境 。
- Cloud Sandbox:基于MicroVM的云端运行环境 。
文章插图
可以发现:
- 纯前端项目(比如React项目、纯JS项目)使用Browser Sandbox 。
- 需要服务端运行环境(比如Docker项目、全栈框架项目)使用Cloud Sandbox 。
推荐阅读
- 半年多过去了,ChatGPT的排名快“垫底”了?
- 玩玉几多年,几多自欺欺人,几多沾沾自喜?
- 吃了李子柒的苦,却没有李子柒的命,彭传明的非遗之路有多艰难?
- 何炅被保姆实名举报,更多内幕被揭开,堪称现实版农夫与蛇
- 为什么很多服务行业青睐蓝色职业套裙?
- 适合在广州养植的多肉植物品种 适合在广州养植的多肉植物品种有哪些
- 一块砖的尺寸 一块砖的尺寸多少厘米
- 果冻乙女心多肉怎么养才长得好 果冻乙女心怎么养出果冻色
- 多肉植物钱串子怎么养才长得好
- 总局收视榜公布:肖战新剧进前三,而第一名,凭啥能这么狠?