视野修炼-技术周刊第87期 | Nodejs 15 周年

欢迎来到第 87 期的【视野修炼 - 技术周刊】,下面是本期的精选内容简介

🔥强烈推荐

  1. js 中的经典八股
  2. merge-anything - 深度合并对象的库
  3. DOM 树深度对渲染性能的影响

🔧开源工具&技术资讯

  1. Node.js 15周年
  2. 页面元素测量工具
  3. Best Cookier - cookie管理插件
  4. ShotEasy - 在线的图片压缩

📚 教程&文章

  1. 2024 应该了解的 Node.js 特性
  2. CSS 长度单位介绍 - 非常全面的指南
  3. 仅使用CSS实现计时器

​也推荐大家关注一下最后的推荐内容(周刊的主要内容来源渠道)

下面开始本期内容的介绍,预计阅读时间 8 分钟。

🔥强烈推荐

1. js 中的经典八股

js 复制代码
Number.parseInt(0.0000005) === 5 // true
Number.NaN === Number.NaN // false

(() => {
  try {
    return 1
  }
  finally {
    return 2
  }
})() === 2 // true

Math.max() < Math.min() // true

好奇结果为什么会是这样?可以看看这篇文章,很多经典的问题 👍🏻。

2. merge-anything - 深度合并对象的库

使用示例

ts 复制代码
import { merge } from 'merge-anything'

const starter = { name: 'Squirtle', types: { water: true } }
const newValues = { name: 'Wartortle', types: { fighting: true }, level: 16 }

const evolution = merge(starter, newValues, { is: 'cool' })
// returns {
//   name: 'Wartortle',
//   types: { water: true, fighting: true },
//   level: 16,
//   is: 'cool'
// }

完整的 TS 类型支持。

ts 复制代码
import type { Merge } from 'merge-anything'

interface A1 { name: string }
interface A2 { types: { water: boolean } }
interface A3 { types: { fighting: boolean } }

type Result = Merge<A1, [A2, A3]>

作者还有很多其它好用的小工具项目。

收藏起来,一定有机会用得上这个。

3. DOM 树深度对渲染性能的影响

作者在使用 lighthouse 分析网页性能时发现了这个警告。

然后开始了影响的探究,下面是它的测试结论,GitHub: 测试代码

作者的测试机器 Mac M1,CPU速度降低4倍。

下面时设置 CPU 降速的位置。

有额外的样式场景下,DOM重新计算耗时有明显的页面卡顿。

最后作者的大概的结论是:避免有附加样式且过深的嵌套

🔧开源工具&技术资讯

4. Node.js 15周年

时间过得真快,印象中 14 周年才过没多久。

5. 页面元素测量工具

一个 chrome 插件,可以测量 WEB 页面元素的尺寸信息。

部分大公司是会有专门的UI走查工具给设计同学验收页面使用。

笔者很久之前也做过类似的工具,效果差不多。

6. Best Cookier - cookie管理插件

可以便捷的增、删、改、查,非 http-only 的 cookie,支持便捷的导入导出,变化监听。

7. ShotEasy - 在线的图片压缩

没有细看效果,可以先收藏,有需要的时候拿出来用用。

📚 教程&文章

8. 2024 应该了解的 Node.js 特性

文章展示了 Node.js v21 已经开箱即用的一些新特性。

① 测试相关:内置 assert, test, mock 模块搭配使用,内置测试覆盖率。

js 复制代码
import assert from 'node:assert'
import fs from 'node:fs/promises'
import { describe, mock, test } from 'node:test'
import { loadEnv } from '../src/dotenv.js'

describe('dotenv test suite', () => {
  test('should load env file', async () => {
    const mockImplementation = async (path) => {
      return 'PORT=3000\n'
    }
    const mockedReadFile = mock.method(fs, 'readFile', mockImplementation)
    const env = await loadEnv('.env')
    assert.strictEqual(env.PORT, '3000')
  })
})
json 复制代码
{
  "scripts": {
    "test": "node --test ./tests",
    "test:coverage": "node --experimental-coverage --test ./tests"
  }
}

② node watch

sh 复制代码
node --watch app.js

可以平替 nodemon

③ 读取 .env 文件中的环境变量

sh 复制代码
node --env-file=./.env.default --env-file=./.env.development index.js

④ 定时器 Promise

js 复制代码
const {
  setTimeout,
} = require('node:timers/promises')

setTimeout(2000, 'Two seconds later...').then((res) => {
  console.log(res)
})

console.log('Taking a break...')

9. CSS 长度单位介绍 - 非常全面的指南

10. 仅使用CSS实现计时器

😛趣图


篇幅有限,如果你还没看够,可移步后面的推荐渠道,继续游览,历史周刊(<20)移步博客

⭐️强力推荐关注

相关推荐
愚公搬代码18 分钟前
【愚公系列】《Web应用安全》001-VMware的安装
前端·安全
xiaohaiAIgeo19 分钟前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
立少→万能汉编21 分钟前
用“立少→超文本”写静态网页,标签<倍>
服务器·前端·javascript
weixin_4316004429 分钟前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
你挚爱的强哥1 小时前
【chromeDownload】自定义组件:多用于登录框底部提供下载Chrome谷歌浏览器的链接
前端·vue.js·chrome
cindershade1 小时前
用原生 HTML5 视频与 Canvas 实现浏览器端视频抽帧封面
前端
笨鸟先飞,勤能补拙1 小时前
Web 服务器与计算机网络全景原理
运维·服务器·前端·网络·人工智能·计算机网络·web安全
NutShell Wang2 小时前
Wails v3 Beta 实战:用显式对象模型重写你的第一个 Go 桌面应用
前端·人工智能·go·vibe coding
cindershade2 小时前
前端国际化工程实践:语言包拆分、动态加载与日期数字格式统一
前端
kisbad2 小时前
Day 036|OpenAI Agents SDK 快速开始:今天跑通第一个 Agent
java·前端·javascript