ubuntu crontab 定时执行 node 程序

2024-07-06 · 858 chars · 5 min read

之前一直没有用过 crontab,最近想要定时通过 rclone 备份一些文件,没想到踩到这么多坑:

  • 默认情况下没有开日志
  • crontab 里的 shell 是 sh,环境变量不一样
  • 时区问题,这个在 server 版的 ubuntu 上很容易遗漏
  • 命令执行错误会发邮件,然而一般系统是没有配置邮件的,日志会显示 (CRON) info (No MTA installed, discarding output)

Node.js SEA

2024-07-03 · 2,249 chars · 12 min read

SEA(Single executable applications, 单个可执行应用程序)是从 Node.js v18 起支持的一项实验性功能,可以将 Node.js 程序打包为一个可执行文件,方便在没有 Node 环境的机器上运行,目前还是活跃开发的状态(最新版 v22.3.0)。

不过这个不影响我使用,我的需求很简单,就是为了解决 ubuntu 里定时任务不方便执行 Node.js 程序的问题。低于 v18 的版本,可以考虑使用 vercel/pkg 代替,这里两个都试用一下。

我的常用工具

2023-02-10 · 2,336 chars · 12 min read

说明

记录我的常用工具,随时更新...

Carbon - 代码转图片

作为开发,平时写 PPT、文档、技术方案的时候,经常需要展示代码片段。在不同软件、设备上,让代码片段保持良好且一致的展示,最简单的方式就是转为图片。

Carbon 就是这样一款工具,可以直接安装 IDE 插件,选中代码通过命令跳转到在线编辑。也可以直接打开网站 copy 进去编辑。

正确使用 @babel/preset-env

2022-12-22 · 2,077 chars · 11 min read

@babel/preset-env 想必大家都很熟悉了,它会自动对代码进行转换,添加 polyfill。让我们可以在一定程度上,自由使用最新的语法特性,而不必担心浏览器的兼容问题。

但最近在对一个“老旧工程”进行性能优化的时候,发现引入的 core-js 体积比较大,更严重的是,多了预期之外的 polyfill。

Yield Points

2022-11-02 · 1,063 chars · 6 min read

前端性能优化的关键之一,就是避免长任务(Long Task),尽可能的将长任务拆分为若干个小的任务,使得浏览器可以响应用户操作等高优先级的事情。以往任务的拆分,最简单粗暴的方式就是使用 setTimeout,比如:

fun1()

setTimeout(() => {
  fun2()
}, 0)

这样可以确保 fun1fun2 在两个独立的 Task 中(注意必须是 setTimeout 等 macrotasks,microtasks 不行)。这样虽然可以一定程度上解决问题,但是看着比较丑,逻辑也会被拆的很乱。

更好的 React SSR

2022-09-26 · 6,560 chars · 33 min read

前段时间,我无意中看到了一个新框架:Fresh。宣称是下一代 Web 框架。它列举了很多功能亮点,随便看了几眼没太在意,但有一段话成功的吸引了我:

The single biggest architecture decision that Fresh makes is its usage of the islands architecture pattern. This means that Fresh applications ship pure HTML to the client by default. Parts of server-rendered page can then be independently re-hydrated with interactive widgets (islands). This means that the client is only responsible for rendering parts of the page that are interactive enough to warrant the extra effort. Any content that is purely static does not have related client-side JavaScript and is thus very lightweight.

简单理解就是:Fresh 使用了 Islands Architecture,程序响应给客户端的都是纯 HTML,然后,通过可交互的 widgets 对 SSR 的部分内容进行水化(re-hydrated),静态的部分不需要任何 JS 代码。—— 简直是完美!!

为何这么说呢?这还得从性能优化和 SSR 讲起...

Islands Architecture

2022-08-04 · 2,659 chars · 14 min read

本文来自 patterns.dev

原文地址:https://www.patterns.dev/posts/islands-architecture/

TL;DR

Islands Architecture 鼓励在 SSR 的页面中使用小的、聚焦于交互的代码块。Islands 的输出是渐进增强的 HTML,并且在增强方式上更加具体。不同于 SPA 的全页面渲染,Islands 有多个入口点。这些可交互 Islands 的 JS 代码可以独立请求并执行 hydrate,同时允许页面的其余部分只是静态 HTML。

加载和执行过多的 JS 是很伤性能的。然而,一定程度上的可交互性和 JS 是必不可少的,甚至是静态网站。我们之前聊过 SSR 的变体,这些变体可以允许你平衡:

  • 与客户端渲染(CSR)相当的交互性
  • 与服务端渲染(SSR)相媲美的 SEO 优势