JS
未读Promise什么是promise作为异步函数,有四种状态
Pending 进行中(Pending) 用 new Promise() 创建对象
Fulfilled 成功(Resolved) 用 .then() 处理成功的结果
Rejected 失败 (Rejected) 用 .catch() 处理失败
Finally 结束 () 用 .finally() 结束
怎么用异步函数
1234567891011const step_1 = new Promise((resolve, reject) => { //Promise对象 setTimeout(() => resolve("奶茶"), 1000);});const step_2 = (tea) => new Promise((resolve, reject) => { //函数 setTimeout(() => resolve(tea + "+珍珠"), 1000);});const step_3 = (tea) ...
JS
未读GO?VO?AO?我用 「剧场演出」 来比喻这些概念
GO (Global Object)全局上下文对象(就是全局变量)
12var globalProp = "剧场灯光"; // 🎯 放入GOfunction stageManager() { /*...*/ } // 🎯 放入GO
预编译阶段
1234GO = { globalProp: undefined, // 先摆上道具标签 stageManager: function(){...} // 导演剧本提前挂好}
执行阶段
1234GO = { globalProp: "剧场灯光", // 道具就位 stageManager: function(){...}}
VO (Variable Object)变量对象
每个执行上下文都有
上下文创建到销毁
AO (Activation Object)活动对象
函数调用时临时创建,调用结束销毁
用一个面试题例子来理解12345 ...
技术探索
未读
音视频,音频和视频并不是在一起处理的,而是分开处理至最后合成的音视频
开源脚本 media-source-extract 可以无差别提取网页显示的所有media
media下载后为音频视频双文件
配合 mkvtoolnix 混流器可合成为原视频,感兴趣可以尝试一下
录制原理
播放原理
解封装(分离音视频) → 解码(H.264/AAC → RGB/PCM) → 同步(DTS/PTS 控制播放顺序) → 渲染
位深(单位 | bit)
举个例子:
CSS的颜色通常基于每通道8bit的RGBA模型 👉 rgba(255,255,255,0.5),整体颜色深度为32位
帧率(单位 | fps)帧率即 FPS 每秒有多少帧画面
帧率↑ 流畅↑ 性能需求↑
人眼对图像的暂留时间为 1/24 秒,因此 24fps 被认为是连续的
电影帧率一般是 24fps
电视剧一般是 25fps
监控行业常用 25fps
音视频通话常用 15fps
码率(单位 | Mbps)视频文件在 单位时间内使用的数据流量 。比如1Mbps。
码率 ...
技术探索
未读FFmpeg实战ffmpeg
Hyper fast Audio and Video encoder 超快音视频编码器 (类似剪辑)
ffplay:
Simple media player 简单媒体播放器
ffprobe:
Simple multimedia streams analyzer 简单多媒体流分析器
处理流程1ffmpeg -i test 1920x1080.mp4 -acodec copy -vcodec libx264-s 1280x720 test 1280x720.flv
ffmpeg命令
复用器和解复用器的区别
复用器(Multiplexer, MUX):(E)
功能:将多个信号或数据流合并成一个单一的信号或数据流进行传输。
应用场景:在数据传输中,复用器常用于将多个低速信号合并为一个高速信号,以便在单一通道上传输,从而提高传输效率。
解复用器(Demultiplexer, DEMUX):(D)
功能:将单个合并后的信号或数据流分解回原始的多个信号或数据流。
应用场景:在数据接收端,解复用器负责将传输过来的合并信号还原为原始的多个信号,以 ...
资源
未读力扣Hot1001.两数之和for1234567891011121314var twoSum = function(nums, target) { const map = new Map();// 创建一个哈希表用于存储已遍历的数字及其索引 for (let i = 0; i < nums.length; i++) { const now = nums[i]; const oth = target - now;// 目标值的补数 if (map.has(oth)) {// 检查哈希表 return [map.get(oth), i];//返回当前索引和补数的索引 } map.set(now, i);// 将当前数字及其索引存入哈希表 }};
forEach
1>forEach((element, index, array) => { /* … */ })
123456789101 ...
技术探索
未读前端模块化规范通常来说,一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数。目前流行的js模块化规范有CommonJS、AMD、CMD、UMD以及ES6的模块系统。
AMD / CMD / CommonJs 是JS模块化开发的标准规范,目前对应的实现是
RequireJs / SeaJs / nodeJs
简介CommonJS
CommonJS用同步的方式加载模块。在服务端,模块文件都存放在本地磁盘,读取非常快,所以这样做不会有问题。但是在浏览器端,限于网络原因,更合理的方案是使用异步加载。
NodeJS 是 CommonJS 规范的主要实践者
有4个重要的环境变量为模块化实现提供支持
module
exports
12345678910// 定义模块math.jsvar total = 10;function add(a, b) { return a + b;}// 需要向外暴露的函数、变量module.exports = { add: add, total: to ...
技术探索
未读nrmnrm(npm registry manager)是npm的镜像管理工具
能帮助你在加载国外的资源太慢时快速切换npm源
安装npm install -g nrm,全局安装nrm
使用查看所有源1nrm ls
显示类似以下信息
1234567* npm ---------- https://registry.npmjs.org/ yarn --------- https://registry.yarnpkg.com/ tencent ------ https://mirrors.tencent.com/npm/ cnpm --------- https://r.cnpmjs.org/ taobao ------- https://registry.npmmirror.com/ npmMirror ---- https://skimdb.npmjs.com/registry/ huawei ------- https://repo.huaweicloud.com/repository/npm/
其中 * 号表示当前使用的源。
切换源相比 npm config set ...
组件库
未读我的 Vue3 文档内置标签component
动态组件
根据 currentTabComponent 的值判断是否要渲染组件
1<component v-bind:is="currentTabComponent"></component>
keep-alive
每次切换新标签的时候,Vue 都会创建一个新的 currentTabComponent 实例。
1234<!-- 失活的组件将会被缓存!--><keep-alive> <component v-bind:is="currentTabComponent"></component></keep-alive>
slot⭐
子组件的占位符
在父组件引用的中 写入的内容
会被 插进子组件内 并渲染回父组件
12345678910<!-- 父组件 --><Button> <div>这是默认插槽的内容</div></Button><!- ...
技术探索
未读PostCSSPostCSS中文网
处理CSS代码的工具,通过一系列的插件来实现最新的CSS特性
插件介绍Autoprefixer
兼容各种浏览器特有的前缀
1box-sizing: border-box;
12-webkit-box-sizing-moz-box-sizing
PostCSS-Preset-Env
使用最新的CSS特性,转移为主流浏览器支持的版本
1234567.box{ background: #000000; &:hover{ background: #000000; }}
123.box:hover{ background: #000000;}
Autoprefixer
兼容各种浏览器特有的前缀
1box-sizing: border-box;
12-webkit-box-sizing-moz-box-sizing
大前端
未读Plugins 开发插件 | Vue.js
前言Vue3中,一个插件通常是一个对象
通常我们开发的插件通过全局导出
1export default myPlugin
从而在项目的入口文件中使用
1app.use(myPlugin)
基础开发plugins/MyButton.vue123<template> <button>我的按钮</button></template>
index.ts123456import MyButton from './MyButton.vue'export default{ install:(app,options)=>{ app.component('myButton', MyButton) }}
main.js123import MyButton from './plugins/MyButton.ts'create(App).use(MyButton).m ...