

Frontend
vite-plugin-vue-layouts 使用记
前言: unplugin-vue-router 是 unplugin 的一款插件,旨在在 src/pages
等目录下使用文件驱动的 routing 来避免手写 vue-router 配置带来的麻烦与潜在的失误,是约定优于配置的一个展现。
vite-plugin-vue-layouts 是与 unplugin-vue-router 非常般配的一款插件,旨在为 views 指定共享的 layout,在复杂前端工程上或许非常有用。
二者是 vuetify 前端框架推荐使用的插件。
然后就被它的【刻意的设计】坑了一把
Not so nerdy WWW guidelines for bloggers
A blogging guide, built for minimalists who aren’t quite as nerdy.
随机句子生成器与一场有趣的WASM尝试
一时兴起想写一个随机句子生成器。正巧在学上下文无关语言 (Context-Free Language, CFL),意识到句子的结构很大程度上是一个上下文无关语法。查阅 X-bar 理论得到也确实类似如此。
同时正好在学 Rust,所以试了一下拿 Rust 编写这个生成器,并编译到 WebAssembly (WASM)。效果很成功!
一晚上搓出的 So Simple 博客主题
花了几个小时写下了 So Simple.
这是一个致力于“尽可能少写 CSS”的主题。实际上也确实,整个主题几乎全部是裸的 HTML。排列从上到下,没有什么值得插入的元素,就像在读报纸一样。
这个主题是返璞归真的一次尝试。希望它能让我满意。
试着复刻一个vue的计算属性
之前对于 Vue 的响应式封装(这里主要思考的是 computed),主要是用用,其实是懒得思考背后的原理的。毕竟原理其实可以用一句话说明:计算属性对别的属性产生有向的依赖关系,这个依赖关系构成一个有向无环图(DAG),图上的某个节点更新后重新计算其所有后置节点即可。
但是仔细想来,内部其实有一些时间复杂度的问题。显然,我们不能暴力调用回调函数(会卡出指数级时间复杂度 O(2n) 下面会详细解释)。同时朴素的做法很难解决这样的问题:
const a = ref([]);
const b = computed(() => a.join(","));
for (let i = 1; i <= n; i++) {
a.value = a.value.concat([i]);
}
注意到对于一个网页而言,我们实际上期望 b
能在整个宏任务跑完以后才更新。所以实际上a.value
的 setter 触发的更新必须要进行推迟。
这篇文章讲讲我怎么在思考这些的过程中试着复刻一个 vue 的计算属性 computed
的
Frontend Javascript Algorithm Code Vue