目前已经有很多成熟的方案,为 hexo
或者自建博客提供音乐播放器插件使用。
我将从不同的角度介绍这几种方式:
目前已经有很多成熟的方案,为 hexo
或者自建博客提供音乐播放器插件使用。
我将从不同的角度介绍这几种方式:
JS
是单线程在此之前,请注意进程和线程的区别。单线程的特性,决定了JS
引擎在任何时候都只有一个主线程来执行任务。
为什么是单线程?
js
的主要作用是和用户互动以及操作dom
.想象一个场景,在浏览器环境下,我们需要使用
js
来操作dom
,它可能是 插入 dom 或者 删除 dom,如果js
是多线程,那么可能存在两种操作同时执行的情况,这是自相矛盾的…
然而,有些任务在执行的过程中是非常耗时的,比如定时器或者监听事件…它们会阻塞主线程的执行,导致页面卡顿。
JS
是非阻塞性的为了避免主线程被阻塞,JS
引擎将任务分为两种:同步任务(代码)和异步任务(代码)
常见的异步代码:
setTimeout、setInterval、AJAX/Fetch、事件绑定监听、promise.then、promise.catch...
请注意:promise
本身是同步任务(代码),仅 then
和 catch
是异步的
协调同步任务和异步任务执行,从而使 JS
的执行是非阻塞的,就需要事件循环(Event Loop
)机制来实现。
Before
…前段时间封装了mobile-cascade
组件,详见Mobile 端的级联选择单多选组件实现,有很多的弊端,例如前置依赖了其他的 UI
库基础组件(input/checkbox/tabs...
),此外功能相对较单一(不支持 remote/checkStrictly/single...
等模式)…
由于需求迭代,需要在移动端实现一个类似于 pc-tree
的组件,因此在前者的基础上进行了二次封装和优化,最终实现了 mobile-tree
组件。
elementUI
存在很多已知或者未知的问题需要我们去发现并解决,但不可否认它确实在曾经取得过很好的认可。
在使用 el-form-item
组件时,正常情况下,我们经常需要自定义校验规则来规范用户输入,比如这样:
<el-form-item prop="name" label="姓名" :rules="rules.name">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item prop="age" label="年龄" :rules="rules.age">
<el-input-number v-model="form.age"></el-input-number>
</el-form-item>
...
public rules = {
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
age: [{ required: true, message: '年龄不能为空', trigger: 'change' }],
}
当然你也可以把 rules
绑定到 el-form
上,因为两者在校验过程中起的作用和我所描述的问题并不冲突。
😏😏😏 问题的产生往往是来自于部分特殊需求:
介绍在
vue/react
项目中常用的一些插件。例如自动引入、按需导入等等…持续更新中…