先简单说一下原理吧,在网页上和服务器上建立一个ws连接,然后网页获取用户输入传给服务端,服务端解析用户输入,在服务端shell执行命令并将执行输出通过ws传给网页渲染到页面上。
以上原理说起来简单,但是完全自己实现是不太现实的。下面我把实现用到的库和插件以及使用方式简单说一下。
黑科技JS代码整理 是不是很void 666
1 | "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);定义一个变量rate是1到5的值 |
1 | (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] |
1 | try { |
1 | # 解压 |
需要非root用户启动
【报错】max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 内存过小 解决:
1 | # 1.sudo vi /etc/sysctl.conf 文件最后添加一行 |
一分钟安装nodejs
,版本(>=10.13.0)
1 | npm i -g @nestjs/cli |
1 | # 将创建 project 目录, 安装node模块和一些其他样板文件,并将创建一个 src 目录,目录中包含几个核心文件。 |
1 | // main.ts |
Nest 旨在成为一个与平台无关的框架。 通过平台,可以创建可重用的逻辑部件,开发人员可以利用这些部件来跨越多种不同类型的应用程序。 从技术 上讲,Nest 可以在创建适配器后使用任何 Node HTTP 框架。 有两个支持开箱即用的 HTTP 平台:express 和 fastify。 您可以选择最适合您 需求的产品。
平台 | 描述 |
---|---|
express | Express 是一个众所周知的 node.js 简约 Web 框架。 这是一个经过实战考验,适用于生产的库,拥有大量社区资源。 默认情况下使 |
用 @nestjs/platform-express
包。 许多用户都可以使用 Express ,并且无需采取任何操作即可启用它。|
|fastify|Fastify 是一个高性能,低开销的框架,专注于提供最高的效率和速度。 在这里阅读如何使用它。|
无论使用哪种平台,它都会暴露自己的 API。 它们分别是 NestExpressApplication 和 NestFastifyApplication。
将类型传递给 NestFactory.create() 函数时,如下例所示,app 对象将具有专用于该特定平台的函数。 但是,请注意,除非您确实要访问底层平 台API,否则无需指定类型。
1 | const app = await NestFactory.create<NestExpressApplication>(AppModule); |
1 | npm run start |
每一个ReactElement对应一个Fiber对象
记录节点的各种状态
串联整个应用形成的结构
例如:FiberRoot的current指向RootFiber 的 child —->App 的child —> div 的child—->input 的sibling
属性:
1 | return // 指向父节点(每个节点只会有一个父节点) |
用于记录组件状态的改变
存放于Fiber对象的UpdateQueue中:UpdateQue单项链表的结构
多个Update可以同时存在:例如一个事件里面存在三个setState,创建三个update放到UpdateQueue中
1 | // 创建或更新updatequeue |
详解见:https://react.jokcy.me/book/update/expiration-time.html
1 | // ReactFiberReconciler.js中 |
1 | // 目前粗略的理解目前为止到js加载完成的时间差 |
1 | function recomputeCurrentRendererTime() { |
1 | const UNIT_SIZE = 10 |
1 | function computeExpirationForFiber(currentTime: ExpirationTime, fiber: Fiber) { |
1 | export const HIGH_PRIORITY_EXPIRATION = __DEV__ ? 500 : 150; |
1 | export const LOW_PRIORITY_EXPIRATION = 5000; |
1 | function computeExpirationBucket( |
计算为了将固定时间间断的,多次setState数据的更新当成一次更新,在这个时间间断内优先级是一样的
今天开始学习react源码相关的内容,源码基于版本v16.6.0
。React16相较于之前的版本是核心上的一次重写,虽然主要的API都没有变化,但是增加了很多能力。并且首次引入了Fiber
的概念,之后新的功能都是围绕Fiber
进行实现,比如AsyncMode
,Profiler
等。
问题:react仅仅1000多行代码,而react-dom却将近2w行
答: React主要定义基础的概念,比如节点定义和描述相关,真正的实现代码都是在ReactDom里面的,也就是“平台无关”概念,针对不同的平台有不同的实现,但 基本的概念都定义在React里。
Flow 是 facebook 出品的 JavaScript 静态类型检查⼯具。所谓类型检查,就是在编译期尽早发现(由类型错误引起的)bug,⼜不影响代码运⾏(不需要运⾏时动态检查类型),使编写 JavaScript 具有和编写 Java 等强类型语⾔相近的体验。
简单示例🌰
1
2
3npm install -g flow-bin
flow init
touch index.js
1 | // index.js 进行类型注释 |
webpack是一个模块打包工具,可以使用它管理项目中的模块依赖,并编译输出模块所需的静态文件。它可以很好地管理、打包开发中所用到的HTML,CSS,JavaScript和静态文件(图片,字体)等,让开发更高效。对于不同类型的依赖,webpack有对应的模块加载器,而且会分析模块间的依赖关系,最后合并生成优化的静态资源。
webpack 最出色的功能之一就是,除了 JavaScript,还可以通过 loader 引入任何其他类型的文件。
自动发布:更新完代码后,自动构建出线上发布代码并传输给发布系统。
Entry(入口):Webpack 执行构建的第一步将从 Entry 开始,可抽象成输入。
axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是:
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
作为一个优秀的 HTTP 库,axios 打败了曾经由 Vue 官方团队维护的 vue-resource,获得了 Vue 作者尤小右的大力推荐,成为了 Vue 项目中 HTTP 库的最佳选择。
虽然,axios 是个优秀的 HTTP 库,但是,直接在项目中使用并不是那么方便,所以,我们需要对其进行一定程度上的配置封装,减少重复代码,方便调用。下面,我们就来聊聊 Vue 中 axios 的封装。
它来了,它来了,16.8版本hooks
成功加入(^▽^)
你还在为该使用无状态组件(Function)还是有状态组件(Class)而烦恼吗? —— 拥有了hooks,你再也不需要写Class了,你的所有组件都将是Function。
你还在为搞不清使用哪个生命周期钩子函数而日夜难眠吗? —— 拥有了Hooks,生命周期钩子函数可以先丢一边了。
你在还在为组件中的this指向而晕头转向吗? —— 既然Class都丢掉了,哪里还有this?你的人生第一次不再需要面对this。