Posts
一个免费的博客方案
发布一个博客, 总共分几步? 三步。创建博客站点,写博客,发出去。 博客站点就像是一个空壳博客,存在于我们的电脑上 我们需要在这个站点中写文章 写完了不能只有自己看呀, 就需要发布到网上 下面, 把这三步具像化一点~~ 1. 【创建博客站点】:通过Hugo生成站点 Hugo 是一个静态网站生成器, 我们需要用它制作一个站点。 1.1 安装Hugo 这里记录下 Windows 和 MacOS 下的安装步骤 1.1.1 Windows 打开命令行, 输入: winget install Hugo.Hugo.Extended (待验证) 1.1.2 MacOS 安装:brew install hugo 验证: hugo version 看到输出类似这样的版本, 则表示成功: hugo v0.128.1+extended darwin/arm64 BuildDate=2024-07-02T06:46:41Z VendorInfo=brew 1.2 初始化站点 hugo new site test # 新建一个站点 cd test # 进入站点目录 git init # 初始化git git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke # 添加主题 echo "theme = 'ananke'" >> hugo....
Cron 定时任务详解
Cron 表达式格式 * * * * * * - - - - - - | | | | | | | | | | | +----- day of week (0 - 6) (Sunday=0 or 7) | | | | +------- month (1 - 12) | | | +--------- day of month (1 - 31) | | +----------- hour (0 - 23) | +------------- minute (0 - 59) +--------------- second (0 - 59) 字段说明 位置 字段 范围 1 秒 0 - 59 2 分 0 - 59 3 时 0 - 23 4 日 1 - 31 5 月 1 - 12 或 JAN-DEC 6 星期 0 - 6 或 SUN-SAT(0 和 7 都代表星期天) 7 年(可选) 留空或 1970 - 2099 特殊字符 字符 说明 * 表示任何时间,或者任何值 - 表示一个范围 , 表示一个列表中的值或值范围的分隔符 / 表示起始时间开始触发,然后每隔固定时间触发一次 示例 表达式 说明 0 0 12 * * 每天的中午 12 点触发 15 10 * * * 每天的上午 10 点 15 触发 0 0/5 14 * * 每天的 14 点开始,每 5 分钟触发一次,直到 14:55 0 0 1,15 * * 每月的 1 日和 15 日的午夜 12 点触发 0 0 1 * * sun 每个星期天的午夜 12 点触发 Cron 表达式非常灵活,可以用来创建各种复杂的时间调度规则。
浏览器事件循环-微任务和宏任务,调用栈,渲染队列:布局,绘制与合成
翻译计划: 2024.1 此文翻译自: https://blog.xnim.me/event-loop-and-render-queue#heading-task-queue 已经获取作者授权 此文主旨在于关注事件队列, 执行顺序 以及开发者如何优化代码。 完整思路如下: 事件队列 古老的操作系统不支持多线程, 那时候的事件循环就类似这样一个简单的循环: while (true) { if (execQueue.isNotEmpty()) { execQueue.pop().exec(); } } 在老的操作系统上, 这段代码会疯狂跑满全部cpu。 (真的吗? – 年轻的译者注) 现代操作系统调度器非常复杂, 包括优先级,执行队列, 和其他的技术。 我们可以把事件循环理解为一个圆圈,系统就一圈一圈地检查, 有没有待执行的任务 (pending task)。 下面这些行为, 都会在事件循环里生成任务: script 标签 延迟任务: setTimeout, setInterval, requestIdleCallback 浏览器的事件处理API: click, mousedown, input, blur 等等。 有一些事件是用户初始化的,比如点击事件, tab切换这种 有的事件是来自于代码, 比如 ajax 的响应啥的 promise 状态变化; (关于promise, 可以看这个文章, emmm这篇文章是我准备留给2月份翻译的) DOMMutationObserver, IntersectionObserver 这种 Observer 家族的 RequestAnimationFrame Almost everything we described above is planned through WebAPI (or browserAPI)....
RxJS 响应式编程入门
为什么需要 Observable RxJS 说是弥补关于数据处理场景的一块空白 → 推送多个数据。 这里把我们对数据的处理方式做了两个维度的分类: Type SINGLE MULTIPLE Pull Function Iterator Push Promise Observable Pull 和 Push Pull 就是我要的时候,就能要到。生产者无感。 每个 JS 函数都是在 Pull ES2015 的生成器(function*)弥补了"拉取多个值"的空白 Push 就是我决定啥时候给,消费者无感。 典型例子就是 Promise,等 then 的时候自然会 push 给你 从生产者和消费者的角度理解: 生产者 消费者 Pull 被动:等着要数据的时候再产生数据 主动:会决定啥时候去要数据 Push 主动:按照自己的节奏产生数据,然后推出去 被动:就等着数据(等回调) 代码示例 1. 拉取单个数据 function getNum() { return Math.floor(Math.random() * 10) } function singlePull() { const num = getNum() console.log(num, 'singlePull') } 2. 推送单个数据 function getNumPromise() { return new Promise((resolve, reject) => { setTimeout(() => { resolve(getNum()) }, 1000) }) } function singlePush() { const promise = getNumPromise() promise....