Skip to main content

· 5 min read
加菲猫

image

题图:爱心猫

📒 PNPM 如何给第三方库打补丁

https://github.com/antfu/pnpm-patch-i

📒 「Go框架」iris框架中mvc使用进阶

📒 Go1.20 arena 能手动管理内存了,怎么用

⭐️ Go语言空结构体这3种妙用,你知道吗

⭐️ 一文吃透 Go 内置 RPC 原理

⭐️ 外观模式,一个每天都在用,却被多数人在面试中忽视的模式

📒 一起玩转Vue中的JSX:让你一次性掌握它的特性!

📒 分享6款yyds的可视化搭建开源项目

📒 类型编程原理和编写类型安全代码

📒 前端食堂技术周刊第 71 期:LightningCSS、State of React Native、Sandpack 2.0、ChatGPT 与前端、2023

📒 「每周译Go」在 Go 中定义方法

📒 「读源码」为什么注册路由时没有传入上下文,在接口方法中却能取到

⭐️ 一文告诉你如何判断Go接口变量是否相等

📒 PHP vs Go,为什么 Go 不支持命名参数调用函数

📒 MDH 前端周刊第 88 期:错误处理、CSS 嵌套、应用模块化、useWorker

React 实现了下发服务器端函数的引用,类似 RPC 。

https://twitter.com/wongmjane/status/1625166863062958081

React Native 年度报告显示 Turborepo 是最受欢迎的 monorepo 工具。

https://results.stateofreactnative.com/monorepo-tools/

Nextjs 新增了 Api routes 的替代品 route handler 。

https://beta.nextjs.org/docs/routing/route-handlers

React Hook Form 支持跨框架使用了,建议更名为 @tanstack/hook-form,哈哈。

https://github.com/react-hook-form/core

《How to handle errors in React: full guide》。直接 try…catch 会有不少限制,但使用 React 官方的 ErrorBoundary 也有不少限制。这个限制是,React生命周期之外的错误不捕获,比如 resolved promises, async code with setTimeout, various callbacks and event handlers。怎么解?dan 给了个 Hack 方案,简单说就是 try {} catch(e) { setState(() => throw e) }。基于此,我们可以稍微封装下,比如 useThrowAsyncErroruseCallbackWithErrorHandling,这样就不需要每次声明一个新的 setState 了。同时也可以考虑用 bvaughn/react-error-boundary

https://www.developerway.com/posts/how-to-handle-errors-in-react

《TypeScript Brand type with Zod》。Brand Type 可以用来创建一个新类型,比如把 string 包装成 Email。然后结合 Type Guards,即可确保类型安全,又能做数据校验。Type Guards 的部分可以用 zod 。

https://linux-china.davao.page/blog/2023-02-16-ts-brand-with-zod/

《Modularizing React Applications with Established UI Patterns》。好文,作者通过案例教你如何用成熟的 UI 模式把 React 应用模块化。说人话就是,把大组件拆小。几个思路,1)提取子组件以拆分视图,2)提取非视图逻辑到 hooks,3)提取领域模型以封装逻辑。但是也要注意别过度优化。

https://martinfowler.com/articles/modularizing-react-apps.html

《React Component Composition》。图解 Composition。

https://punits.dev/jargon-free-intros/react-component-composition/

Umi 例行每周四发一版,我觉得有趣的功能包括,1)基于 @clack/prompts 优化 create-umi 界面,2)优化命令行执行速度,该 lazyImport 的 lazyImport,同时优化了 @ant-design/icons 集合的读取方式,3)新增 legacy 模式支持做产物的 es5 校验,4)升级 Vite 到 4.1。

Umi 新增 Roadmap 2023,是 Umi 团队每周迭代的一部分,每周四更新,有兴趣共享的同学欢迎直接回 issue 认领。一个非 docs PR 即可加入 Umi Contributor 群。

Umi 团队新增一条规则,每人每周需共享 1-2 个想法,每周三开 Discussion 征集,这是试运行第一周的 Discussion 链接

MDH 前端周刊第 88 期:错误处理、CSS 嵌套、应用模块化、useWorker

📒 Golang 语言标准库 io 详解

📒 Go语言爱好者周刊:第 177 期 — Go 版 ElasticSearch

· 6 min read
加菲猫

image

题图:Bigfish x 情人节。

📒 ChatGPT ✖️ 前端 = 有点er意思

📒 基于gpt3引擎实现CLI版本的chatgpt~(数量取胜的go语言学习法)

📒 基于qwik和iris(go)写全栈啦-短链服务(数量取胜的go语言学习法)

📒 云原生运维相关文章

Linux 命令行工具之 jq 最佳实践

令人拍手叫绝的运维小技巧

2022年 SRE、DevOps技能图谱

Linux 命令工具之 grep

Linux 命令工具之 awk

Golang中的逃逸分析

据说成功人士都是这样管理时间的

📒 告别“复制粘贴”,带你自己配一个Babel

⭐️ Go 陷阱 - 接口方法调用

📒 【面试高频题】难度 4/5,单调栈的热门运用

📒 【第2858期】React 纪录片心得 — 重新思考最佳实践

⭐️ Go 陷阱 - 缓冲区内容不输出

⭐️ 百里挑 15 个 Git 技巧

📒 组件库实战——按需加载工程化

📒 Go 也要过情人节,并发布了安全更新 Go 1.20.1 和 Go 1.19.6

Go 1.20.1 发布了

Go 也要过情人节,并发布了安全更新 Go 1.20.1 和 Go 1.19.6

📒 前端食堂技术周刊第 70 期:Volar 的新开端、Lighthouse 10、良好的组件设计、React 纪录片、2022 大前端总结

⭐️ 聊聊 Ant Design V5 的主题(上):CSSinJS 动态主题的花活

⭐️ Go 高性能 - 字符串拼接 1000+ 倍优化

📒 技术角度告诉你ChatGPT是什么?和一些深度思考

📒 闲鱼大终端UI组件库——FishUI建设之路

📒 ChatGPT 相关

AI量化投资训练营-基础班

https://twitter.com/kliu128/status/1623472922374574080/

https://tanstack.com/

https://platform.openai.com/docs/api-reference/completions/create#completions/create-prompt

https://huggingface.co/datasets/fka/awesome-chatgpt-prompts

https://github.com/f/awesome-chatgpt-prompts

https://github.com/lencx/ChatGPT

📒 细说 Vue 响应式原理的 10 个细节!

📒 MDH 前端周刊第 87 期:re-render、Resumable React、ESLint 性能、监控

《React recursively re-renders child components, but there is a nuance》。Alex Sidorenko 的 React 可视化渲染系列文章 +1。通过可视化的方式告诉你为啥通过 children 渲染子组件,能避免 state 变更时子组件 re-render。

https://alexsidorenko.com/blog/react-render-children-prop/

《Resumable React: How To Use React Inside Qwik》。关于如何在 Qwik 内使用 React,你可以建立 React 应用程序,而无需在用户的浏览器中加载 React。当然,在你需要交互的时候,还是需要动态加载 React(感觉不一定是件好事,没解决问题,只是把问题转移了,可能在交互时会卡一下)。

https://www.builder.io/blog/resumable-react-how-to-use-react-inside-qwik

《Speeding up the JavaScript ecosystem - eslint》。Speeding up 系列的第三篇。1)检测方法是 --cpu-prof + Speedscope(通常还可以用上 hyperfine 跑多次做 benchmark),2)解析器从 @typescript-eslint/parser 换成 @babel/eslint-parser + @babel/preset-typescript 可以节省不少时间,从 2.1s 到 0.6s,缺点是不支持 type-aware 的 linting 规则(我们通常也不会用他们),3)rslint 值得关注。

https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-3/

《Vite with ESLint》。手把手教你如何在 Vite 项目中加上和 Vite 集成的 ESLint,基于 vite-plugin-eslint。但个人感觉 ESLint 不应该集成(因为会影响构建速度),而应该单独用,同时编辑器里也有提示了,所以在提交和 CI 里做校验就够了。

https://www.robinwieruch.de/vite-eslint/

《Custom React Hooks and When to Use Them》。关于自定义 Hooks,是什么、可复用的提取、不可复用的提取、提取数量等,最后还是要注意抽象的代价,抽象不是免费的,有时适当重复反而更好,推荐下 Dan 的 The Wet Codebase 分享。

https://thoughtbot.com/blog/custom-react-hooks

《2022大前端总结和2023就业分析》。来自狼叔的年度大作,推荐。

https://mp.weixin.qq.com/s/SicYTABGjXcJJTqYEbL5dQ

《字节前端监控实践》。感觉含金量挺高的,摘录其中错误报警的部分。1)sourcemap 结果可以用 mozila 的 sourcemap 库进行反解,2)为了保密,sourcemap 不会传到公网,而是传给后端存在内部,Sentry 有类似工具(注:sourcemap 构建慢怎么办?并发多跑一次带 sourcemap 的),3)要做堆栈聚合,合并同类错误,4)通过记录 commit + git blame 可以直接分配报错信息到人。

https://juejin.cn/post/7195496297150709821

MDH 前端周刊第 87 期:re-render、Resumable React、ESLint 性能、监控

📒 「每周译Go」在 Go 中定义结构体

📒 leader要我三天时间搭一套react-cli出来,我答应了

⭐️ Go for range 一不小心就掉坑里了

📒 Go 工具链想主动上报使用数据,你愿意吗

📒 Go语言爱好者周刊:第 176 期 —— 题目来了

· 7 min read
加菲猫

image

题图:dannyhowe @ unsplash。

⭐️ Go 并发编程 - 数据竞态

⭐️ x/exp/maps, slices 纷纷被同意加入 Go 标准库

📒 怎么把自己造的轮子发布到 Go Module上

📒 【面试高频题】难度 2.5/5,综合贪心的序列 DP 题

⭐️ 聊聊Golang饱受争议的error

⭐️ 万字长文告诉你Go 1.20中值得关注的几个变化

📒 向 Swift 学习?Go 考虑简单字符串插值特性

📒 如何从 0 开始配置 Mac

📒 Understanding HTML Form Encoding: URL Encoded and Multipart Forms

📒 从 0 实现 use-context-selector

📒 为什么说Go的函数是“一等公民”

⭐️ Go 陷阱 - 错误处理三剑客

🌟 上次给 UMI 的文档提了两个 PR 被合并,成了 UMI contributor:

image

https://github.com/umijs/umi/releases/tag/v4.0.48

📒 「每周译Go」了解 Go 中的指针

📒 【面试高频题】难度 1/5,简单二叉树寻值问题

var ans, k int

func kthSmallest(root *TreeNode, _k int) int {
k = _k
dfs(root)
return ans
}

func dfs(root *TreeNode) {
if root == nil || k == 0 {
return
}
dfs(root.Left)
if k--; k == 0 {
ans = root.Val
}
dfs(root.Right)
}

常规解法是先遍历所有树节点再排序,或者遍历树节点+优先队列(看做是 top K 问题),但这两种解法都没有利用该树为二叉搜索树的特性,而我们知道,二叉搜索树的中序遍历是有序的,因此我们只需要对二叉搜索树执行中序遍历,并返回第 k 小的值即可。中序遍历有「迭代」和「递归」两种写法。

【面试高频题】难度 1/5,简单二叉树寻值问题

📒 TypeScript 5.0 将支持全新的装饰器写法!

⭐️ Go异步任务处理解决方案:Asynq

📒 MDH 前端周刊第 86 期:CRA 未来、吐槽 React、React 清依赖小技巧、Darkmode

《The Future of Create React App and Why It Exists》。Dan 写了篇长文梳理了 CRA 的问题和规划。一些问题包括,1)脚手架的困境,一旦 clone 就很难再更新,然后你的项目配置会逐渐变得陈旧,要么放弃,要么需要花大量精力换新,2)因为是 CSR 所以有空 HTML 的问题,但 Dan 也并不喜欢 MPA,比如 astro,混用多种技术影响 DX,完整的页面刷新让客户端状态失效影响 UX,3)请求瀑布问题,比较好的解法是让数据获取和路由结合,这就需要元框架,4)懒加载(await import)问题,引入额外的请求瀑布,解法是数据获取+路由+构建工具,一样也需要元框架。Dan 期望 CRA 具备 SSG and SSR, automatic code splitting, no client-server waterfalls, route prefetching, navigation preserving client UI state 等功能,然后考虑多 CRA 的多条路,决定不做了,把 CRA 变成一个社区方案的启动器。

https://github.com/reactjs/reactjs.org/pull/5487#issuecomment-1409720741

《React I Love You, But You're Bringing Me Down》。骂得好,哈哈,爱之深,责之切啊。如果你想吐槽 React,照着念就完了。1)表单没有稳定官方方案,一路用社区库过来,目前相对好的是 Formik 和 React-hook-form,看看人家 Svelte,2)Context 太敏感,一碰就 re-render,为了性能而拆大量的 Provider 瀑布流组件,太难看了,提供一个 useContextSelector 有那么难吗?3)关于 DOM 和 ref,React.forwardRef + TypeScript 写通用组件太难了,同时 ref 不仅仅是 关于 dom,每次用 ref 都是因为 useEffect API 太奇怪,换句话说,refs 是对 react 创造的问题的一种解决方案,4)关于 useEffect,需要阅读一篇 61 页 的论文才能用好也太难了,看看人家 Solid.js,5)关于 Hooks 规则,Rules of Hooks 不容易记住,6)关于老父亲 Facebook,略。那作者为啥还留下?因为「It's the ecosystem, stupid.」

https://marmelab.com/blog/2022/09/20/react-i-love-you.html

《Little React Things: Cleaning up dependencies - Zeke Hernandez》。Zeke Hernandez 介绍了一个减少列表项 rerender 的小技巧,虽然对用户来说性能提升不明显,但至少打开 react devtool 的「Highlight Updates」时会看起来很爽,这就够了。方法是,event handler 用 useCallback 包一下,同时清空依赖,没有依赖就不会触发 event handler 生成新的了。那依赖怎么清?1) setState 无需写入依赖,2)setState 用 function 的形式。

https://www.zekehernandez.com/posts/cleaning-up-dependencies

《4 Common Mistakes Made by Node.js Developers》。文章介绍了 4 个 Node 开发的常见错题。1)没有明确定义的日志级别,可尝试 winston, pino, morgan 等库,2)无脑选择 Docker 基础镜像,又大又耗性能,比如 node:18 300M+,选 slim 或 alpine 就够了,slim 70M,alpine 50M,3)签署 JWT 时不使用非对称加密,对称加密不够安全,4)Storing passwords without unique salting。

https://amplication.com/blog/4-common-mistakes-made-by-nodejs-developers

MDH 前端周刊第 86 期:CRA 未来、吐槽 React、React 清依赖小技巧、Darkmode

⭐️ Go 陷阱 - nil != nil

⭐️ Go1.20 那些事:错误处理优化、编译速度提高、PGO 提效等新特性,你知道多少

📒 Go语言爱好者周刊:第 175 期 — Go 2023 调查问卷

· 5 min read
加菲猫

image

题图:烟花兔。

📒 10 GitHub Repositories You Should Know as a JavaScript Developer

⭐️ Go 高性能 - 字符串 & 切片转换提升 10 倍+

⭐️ Go 高性能 - 两种内存大小为 0 的数据类型

⭐️ Taro 正式发布 3.6 版本:支持跨端路由、请求库,支持纵向拓展鸿蒙、Web 端平台插件,小程序持续集成 CI 能力升级

⭐️ 深入理解 go sync.Cond

📒 React团队回应用Vite替换Create React App的建议

📒 React为什么不将Vite作为默认推荐

⭐️ 将Roaring Bitmap序列化为JSON

📒 Flag 2023

📒 Go 1.20 已发布!性能和构建速度上有很大提升!

⭐️ Go 工程化 - 如何实现 implements

⭐️ 「好文推荐」转Go必看 《 Go 工程化 - 面向对象,存在吗》

⭐️ Go字符串操作不是你想的那么简单!

📒 相关文章推荐

24个JavaScript循环遍历方法,你都知道吗

JavaScript 数组方法 reduce 的妙用之处

⭐️ 为什么 Go 不支持 []T 转换为 []interface

📒 「Go框架」深入理解web框架的中间件运行机制

📒 TypeScript 5.0 beta 发布:新版 ES 装饰器、泛型参数的常量修饰、枚举增强等

📒 【面试高频题】难度 2/5,简单的复工面试题

⭐️ 如何使用jenkins搭建一个中小企业前端项目部署环境

⭐️ 这些关于 Golang timezone 时区的坑, 我已经帮你踩过了

📒 还能这样玩?Go 将会增强 Go1 向前兼容性

⭐️ 一文入门Go云原生微服务「爆肝6千字」

⭐️ sourcegraph 出品的并发库 conc 详解

⭐️ Go语言实现的可读性更高的并发神库

📒 MDH 前端周刊第 85 期:MDH Weekly 官网、2023 趋势、CSS Wish List、Astro

《10 Web Development Trends in 2023》,ROBIN WIERUCH 分析了 2023 年 Web 开发的 10 个趋势,推荐一读。10 个领域包括元框架、应用和渲染模式、Edge ServerLess、数据库复兴、JavaScript Runtime、MonoRepo、Utility-First CSS、类型安全、构建工具、AI 驱动开发。

https://www.robinwieruch.de/web-development-trends/

《20 Things I've Learned in my 20 Years as a Software Engineer》,一篇老文,讲述 20 年工作经验工程师的 20 条 Tips,我读完很有收获,推荐一读。

https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/

《Capture heap snapshots in Node.js》。作者介绍了关于捕获堆快照的 3 个方法,1)node --inspect index.mjs--inspect-brk,2)借助 Node 12 支持的 --heapsnapshot-signal flag,node --heapsnapshot-signal=SIGUSR1 index.mjs,3)用 v8.writeHeapSnapshot() method 手动写。

https://pawelgrzybek.com/capture-heap-snapshots-in-node-js/

《Things I want to see in JavaScript and Frontend development in 2023》,Paul Armstrong 关于 2023 年期望发生的变化。1)axios 别发展了,因为用浏览器原生支持的 fetch 可以省去 7-11kB 的尺寸,2)CSS 方案更少分歧,主要是 tailwind 和 css in js 之间,3)少一些资本支持的开源,因为当资本进入时,同时意味着他们期望得到巨大的金钱回报,4)少 eslint 规则和配置,自动帮你改代码或能解实际错误的规则除外,5)react 要不振作起来要不就 gg 吧,作者吐槽了好多都在点上,主要是发货太慢。

https://paularmstrong.dev/blog/2023/01/20/javascript-and-frontend-things-to-see-in-2023/

MDH 前端周刊第 85 期:MDH Weekly 官网、2023 趋势、CSS Wish List、Astro

📒 Typescript 严格模式有多严格

📒 一个全新的 JavaScript 事件!

📒 DevopsCamp 第一期作业: 《cobra - 03 交互式命令(简单)》 解题答案

· 8 min read
加菲猫

image

题图:擅用工具的兔子工程师。

📒 相关文章推荐

修复生产版本 Node 程序的内存泄露问题 — Kent 在他的 Node 程序中遇到了各种奇怪的内存和 CPU 使用率峰值问题,于是他决定查找原因。这篇文章完整介绍了他对此的探寻过程,最戏剧性的是根本原因完全出乎他的意料。

https://kentcdodds.com/blog/fixing-a-memory-leak-in-a-production-node-js-app

在 Go 应用中嵌入 React UI — Flipt 通过一个 Go 构建的单一二进制文件为其 web 应用提供服务,并将静态资源嵌入其中。Go 在 1.16 版本中支持原生嵌入后,帮助 Flipt 走上了一条通往 React 的道路,而且不需要 Next.js 就可以实现很好的效果。

https://www.flipt.io/blog/embedding-react-in-go

在 Next.js v13 中使用异步 React — React 正在原生的支持异步,现在你可以在 Next.js 中试用它,作者提供了一个快速概览。

https://swizec.com/blog/async-react-with-nextjs-13/

React Native 发布了 v0.71 — 这是一个“功能丰富”的版本,包括“默认 TypeScript 文件”,使用 Flexbox Gap 简化布局,以及受网络标准启发的可访问性、样式和事件 props。

https://reactnative.dev/blog/2023/01/12/version-071

用 React Hook Form 和 Zod 构建表单 — 这是作者承诺的一系列录屏视频中的第一个,不仅涉及到开发一个集成后端 API 的表单,还涉及到开发时常遇到的一些问题。该视频的时长长达 95 分钟。

https://www.youtube.com/watch?v=FXWD_etMJWA

⭐️ lerna + dumi + eslint多包管理实践

⭐️ PHP转Go实践:xjson解析神器「开源工具集」

⭐️ 经过99次失败后, 我总结了几点 Golang 反射的经验(附源码)

📒 前端食堂技术周刊第 68 期:Astro 2.0、Nuxt v3.1.0、Bun v0.5、TS 实现 Stage 3 Decorators 提案

Turborepo 1.7

Turborepo 1.7 专注于改善开发者体验,为任务带来更多清晰性,主要特性如下:

  • 改进对持久化任务的支持,"persistent": true
  • 更清晰的输出,需要明确指定 outputs
  • 支持全局安装
  • 只显示错误的输出模式,让日志更清晰,turbo build --output-logs=errors-only

Turborepo 1.7

Turborepo 1.7 发布视频版

加速 JavaScript 生态系统之模块解析

module resolution (模块解析)有着大量的性能损耗,本文对此进行探讨并给出以下建议:

  • 尽可能避免调用文件系统
  • 尽可能使用缓存来表面调用文件系统
  • 使用 fs.stat 或者 fs.statSync 时,总是设置 throwIfNoEntry: false
  • 尽可能限制向上遍历的行为

https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-2/

React 新文档中的最佳实践

https://sebastiancarlos.com/react-js-best-practices-from-the-new-docs-1c65570e785d

React 服务器组件深度指南

https://www.plasmic.app/blog/how-react-server-components-work

📒 一篇文章告诉你 golang 环境变量的所有基础操作

📒 CSS 原生嵌套语法来了!

📒 腾讯云开发者 2022 年度热文

手把手实践一个DAPP,通往Web3.0之路!

探秘微信业务优化:DDD从入门到实践

揭秘前端眼中的Rust!

⭐️ 【好文分享】基于Jira的运维发布平台的设计与实现

📒 DevopsCamp 第一期作业: 《cobra - 02 配置文件的读取与保存(简单)》 解题答案

📒 《DevOpsCamp作业: cobra - 01 实现编译与参数绑定(简单)》 解题答案

📒 TS、Vue、React、SSR、Node、Deno、Bun:回顾2022,展望2023

📒 MDH 前端周刊第 84 期:tRPC、Zod、慢 Jest、React Debounce、SSSVG

《6 Common SVG Fails (and How to Fix Them)》,出自 CSS Tricks。作者梳理了 6 种常见错误(编者注:后几种感觉不常见),包括 viewbox 错误、width 和 height 缺失、无意 fill 或 stroke 的颜色、id 缺失、clipping 和 masking 冲突、命名空间缺失,并给出了针对这些问题的解法。

https://css-tricks.com/6-common-svg-fails-and-how-to-fix-them/

《为何开发人员开始喜欢tRPC啦?》。tRPC 的优点包括:1)无需再次封装,直接使用函数调用远程服务,2)与Zod深度结合,可以直接使用Zod进行数据校验,3)使用非常简单,可以用在任何框架中,4)tRPC over HTTP协议非常简单,无论客户端还是服务端实现都非常简单。

https://linux-china.davao.page/blog/2023-01-14-why-trpc/

《Zod: The Next Biggest thing after Typescript》。看完这篇文章后,你可能不想再使用任何其他的验证库了!

https://dev.to/jareechang/zod-the-next-biggest-thing-after-typescript-4phh

《Speeding up the JavaScript ecosystem - module resolution》,出自 marvinhagemeist。构建、测试、Lint 时有个性能大户是 module resolution,即如何找到文件,虽然规范层有规范层的解法(ESM 引用文件要带后缀),但在规范没大范围落地之前,也可以有一些解法。作者总结了几点,1)尽量避免对文件系统的调用,2)尽可能多的缓存以避免调用文件系统,3)当你使用 fs.stat 或 fs.statSync 时,总是设置 throwIfNoEntry: false,找不到文件时不抛错而是给 undefined,4)尽可能地限制向上的遍历行为。看完这篇,我给 umi 提了个 pr,调整了 webpack 配置里 extensions 的顺序。

https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-2/

https://github.com/umijs/umi/pull/10326

《How to debounce and throttle in React without losing your mind》,作者是 NADIA MAKAREVICH,必读作者系列。关于如何在 React 中做 debounce 和 throttle 而不失去理智。作者先介绍了 debouce 和 throttle 的区别,以及各自的场景是什么,比如 throttle 的场景是拥有自动保存功能的编辑器,及时保存用户输入,以减少因意外情况可能导致的数据丢失。然后介绍了在 React 中使用 debouce 有多困难,你会面临 re-render、陈旧的 state、陈旧的闭包等问题,最终解法是 useRef + useEffect + 保存函数到 ref.current,因为 ref 是 mutable 的,不会有闭包数据陈旧问题。

https://www.developerway.com/posts/debouncing-in-react

MDH 前端周刊第 84 期:tRPC、Zod、慢 Jest、React Debounce、SSSVG

📒 一期每日一GO群分享-flag、viper、协程池、异常处理

· 7 min read
加菲猫

image

封面图:卷饼兔。

⭐️ 装了啥 2023

  • 编辑器主 WebStorm 开发项目,辅 VSCode 临时编辑项目,再辅 CotEditor 临时打开文件(注:如果是 Rust 项目,会用 VSCode)
  • WebStorm 插件只装了两个,Github Copilot、Inspection Lens,前者大幅提升编码效率,后者大幅提升编码体验
  • 编程字体用 Monolisa、Dank Mono 和 Operator Mono,一个用久了看腻了切另一个
  • Terminal 工具是 iTerm2 + zsh + oh-my-zsh 的组合,zsh 额外装了 zsh-autosuggestions 和 fast-syntax-highlighting 插件

装了啥 2023

📒 Golang 相关文章

Golang实现一个linux命令ls命令(命令行工具构建)

GO并发之好用的sync包

Go语言原子操作

Go 并发安全与锁

Go定时器的三种实现方式

10秒改struct性能直接提升15%,产品姐姐都夸我好棒

📒 相关文章推荐

关于未捕获 Promise 异常状态的问题 — 你可能会无感知地遇到 promise 的异常问题,Jake 就解决了这么一个关于 promise 报 unhandled promise rejection 错误的问题。

https://jakearchibald.com/2023/unhandled-rejections/

关于 React 'Concurrent Mode' 的所有内容都在这 — 本文对 Concurrent Mode 进行深入的、以实例为导向的探索(并发模式已经是整合到 React 18 中的一组功能,而不是一个独特的"模式")。

https://blog.codeminer42.com/everything-you-need-to-know-about-concurrent-react-with-a-little-bit-of-suspense/

使用 GitHub Copilot 编写单元测试? — 即使你觉得像 Copilot 这样的 AI 工具在编写生产代码上不太靠谱,但它可能在快速编写单元测试上有一定的作用。

https://www.strictmode.io/articles/using-github-copilot-for-testing

类型安全的 React Query —— 一切都与信任有关 — 类型定义应该是值得信赖的。如果他们不是,他们“成为一个纯粹的建议”断言这篇文章建议可以做些什么来使他们成为这样。

https://tkdodo.eu/blog/type-safe-react-query

Zustand vs Signals:对比 React 状态管理库 — 将最时髦的状态管理库之一——zustand 与 Signals 进行比较,后者是 Preact 团队最新发布的一个状态管理库。

https://medium.com/@kevinschaffter/zustand-vs-signals-e664bff2ce4a

⭐️ 掌握了这篇 Dockerfile 中的 ARG 作用域, 就算 Build 镜像 CI 入门了 【文末抽奖】

⭐️ 「Go语言进阶」并发编程详解 | 文末抽奖

📒 前端食堂技术周刊第 67 期:2022 State of JS、ESLint 2022、pnpm 2022、大淘宝 Web 端技术概览

📒 MDH 前端周刊第 83 期:React Query、CSS 3D、JavaScript Wrapped 2022、React 新文档

《Type-safe React Query》,Dominik 的每篇文章都值得深入阅读。React Query 的类型可以定义在哪?1)useQuery<Todos>,2)const queryFn: Promise<Todos>,3)axios.get<Todos>,4)res.data as Todos,5)不定义。不定义怎么有类型?用 zod,然后定义 schema,schema 不仅可用于校验后端数据,还会返回类型。

https://tkdodo.eu/blog/type-safe-react-query

《Data binding in React: how to work with forms in React》,johnwcomeau 的每篇文章也值得阅读,这篇比较新手向,深入解答了面试必问问题「受控和不受控」。

https://www.joshwcomeau.com/react/data-binding/

《Clever Code Considered Harmful》,johnwcomeau 这周的另一篇文章。判断代码好不好的一个标准是,一个初级开发人员,一个职业生涯刚刚起步的人,会不会在理解这段代码时遇到困难?

https://www.joshwcomeau.com/career/clever-code-considered-harmful/

《React JS Best Practices From The New Docs》,Sebastian Carlos 阅读完 React 新官网文档后总结的 160 条笔记。我帮我节省了大量时间,我读完他的笔记后记了 20 多条笔记。但如果有空,还是应该完整阅读 React 的新文档。

https://sebastiancarlos.medium.com/react-js-best-practices-from-the-new-docs-1c65570e785d

《JavaScript Wrapped 2022》,作者整理了 TypeScript、React、Angular、Vue、SSR、Node|Deno|Bun 的 2022 发展和 2023 展望,建议熟读。

https://vived.io/javascript-wrapped-2022-frontend-weekly-vol-119/

《3D in CSS》,交互式的 3D CSS 教程。主要是 4 个 CSS 属性,包括 perspective、perspectiveOrigin、translateZ 和 rotate3d。

https://garden.bradwoods.io/notes/css/3d

《Building a fast, animated image gallery with Next.js》,Vercel 把 Next.js Conf 2022 的照片搬上网,同时把这套代码开源。技术栈包括 Cloudinary、Next.js 图像组件、imagemin、Framer Motion、以及用 ai 生成 alt 文本等。

https://vercel.com/blog/building-a-fast-animated-image-gallery-with-next-js

《Our top Core Web Vitals recommendations for 2023》,本文 Google DevRel 团队认为在 2023 年提高 Core Web Vitals 性能的最有效方法的最佳实践集合。涉及的性能指标包括 LCP、TTFB、CLS、FID 和 INP,同时给出了每个指标提升的注意点和可执行操作。

https://web.dev/top-cwv-2023/

《The hardest part of web dev》,关于 timing 的知识。其中 react 中,1)渲染函数在React更新DOM之前运行,2)useInsertionEffect回调在React更新DOM后运行,但在浏览器重新计算页面布局之前,3)useLayoutEffect回调在浏览器重新计算页面布局后运行(考虑到useInsertionEffect回调注入的任何CSS),但在浏览器重新绘制之前,4)useEffect回调在浏览器完成重绘后运行。

https://alexvipond.dev/blog/the-hardest-part-of-web-dev

MDH 前端周刊第 83 期:React Query、CSS 3D、JavaScript Wrapped 2022、React 新文档

📒 自从项目上了SkyWalking,睡觉真香!

⭐️ Go 语言 Web 应用怎么使用 Nginx 部署

⭐️ 发现conc并发库一个有趣的问题

⭐️ 醒醒吧,未来不会有 Go2 了!

⭐️ Go语言中常见100问题-#27 Inefficient map initialization

⭐️ 「每周译Go」了解 Go 中的 init

⭐️ Go 设计模式|组合,一个对数据结构算法和职场都有提升的设计模式

📒 八个 Web Components 前端框架,一定有一个你用得上

📒 Go语言爱好者周刊:第 174 期

· 10 min read
加菲猫

📒 相关文章推荐

Gluon:基于网站创建桌面应用的框架 — 这是一种使用 Node 和已安装的浏览器把 Web 站点构建为桌面应用的新方案。值得注意的是,Gluon 同时支持 Chromium 和 Firefox。Deno 也可以替代 Node。已经支持 Windows 和 Linux,本周刚刚完成了对 macOS 的初步支持。

https://gluonjs.org/

Node v19.3.0 (Current) 发布 — 这是几周前发布的版本,v19.3 是一个典型的增量更新版本,内容包含了 npm 升级到 v9.2.0,这本身是一个足够需要阅读发行说明的内容。

https://nodejs.org/en/blog/release/v19.3.0/

构建同构 JS 库的五大挑战 — 同构(isomorphic)的意思是代码可以同时在客户端和服务器上以最小调整就可以运行的代码或者库。

https://doordash.engineering/2022/12/06/five-challenges-to-building-an-isomorphic-javascript-library/

2023 年如何发布 npm — 这是一个指南,描述了如何在 2023 年将开源包发布到 npm 以及需要注意的事项。如果你想在 2023 年编写和发布一个包,你需要用 Typescript 编写它并将其发布为 ES 模块。

https://blog.taskli.st/posts/how-to-publish-to-npm-in-2023

🌟 2022 年的 JavaScript 新星项目 — Michael Rambeau 第七次以 JavaScript 领域的"趋势项目"综述为我们的 2023 年度揭幕。Bun 占据了 2022 年的头把交椅,但我们会把其他的留给你去看。一些特邀作者也分享了他们对生态系统的看法。

https://risingstars.js.org/2022/en

Evan You 回顾 2022 年与展望 2023 年 — 你可能会因为 Vue.js 和 Vite 而认识 Evan,在这里他回顾了 2022 年 Vue 世界发生的事情(比如 Vue 3.x 成为新的默认版本)以及我们在 2023 年 可以期待的事情,包括神秘的 Vapor 模式。他还提醒我们,Vue 2.x 还有一年才会失效。

https://blog.vuejs.org/posts/2022-year-in-review.html

JS Function Composition:有什么大不了的? — James 关于 JavaScript 基础知识的文章总是很受欢迎,去年我们得到了一篇新鲜的文章,关注一个常见的活动:函数组成。"这有什么大不了的?"他问道。

https://jrsinclair.com/articles/2022/javascript-function-composition-whats-the-big-deal/

开发人员面临的十个常见的 JavaScript 问题 — 这可是一篇好文章。如果你已经用 JavaScript 工作了很多年,这些都是你(可能)知道要避免的坑,但是这里有足够的东西可以让你反复思考。

https://www.toptal.com/javascript/10-most-common-javascript-mistakes

Storybook v7.0 进入 Beta 阶段 — 这是近两年来这个流行的前端 UI 开发工具的第一个大版本更新(这里会有 Breaking Change)。有很多新功能,包括性能改进、交互测试等等。在此查看 完整的更改日志。您现在可以通过 迁移指南 尝试 Beta 版。

https://storybook.js.org/blog/7-0-beta

在 React Native 中对 TypeScript 进行头等支持 — 随着新发布的 v0.71,你会得到一个新的“默认是 TypeScript (TS)”的应用程序模板 —— TS 声明随基本包一起发布,文档现在也是 TypeScript 优先的(当然,Flow 或常规 JavaScript 仍然是可以使用的)。

https://reactnative.dev/blog/2023/01/03/typescript-first

在 Reddit 上,有一个关于 为什么人们喜欢使用 Next.js 的讨论。

https://www.reddit.com/r/reactjs/comments/zprham/why_do_people_like_using_nextjs/

⭐️ Next.js 刚刚在 GitHub 中 超过了 Create React App 的 Star 数,如果你喜欢这种受欢迎程度的测量方式。

https://twitter.com/i/web/status/1610165503468658689

3 个导致 App 崩溃的 React 错误 — 一位名为 Jack Herrington 的 React YouTuber 讲解了三个编写 React 时会犯的错误(以及如何解决它们)。

https://www.youtube.com/watch?v=QuLfCUh-iwI

在 TypeScript 中像专家一样处理错误 — “学习我用来处理错误和编写更简洁代码的设计模式。”

https://engineering.udacity.com/handling-errors-like-a-pro-in-typescript-d7a314ad4991?gi=c2ed84ad0ecd

📒 了解JS静态分析,打开前端优化新思路

📒 用代码画一只小兔子给大家拜年啦!

📒 记落地vite到项目中的遇到一个bug, 最终被vite官方merge pr

📒 聊聊Go与TLS 1.3

📒 Google 出品的 Rust 教程

https://github.com/google/comprehensive-rust

📒 你可能并不需要微前端

📒 UMI 微生成器调研

https://umijs.org/docs/guides/generator

https://github.com/umijs/umi/blob/master/packages/preset-umi/src/commands/generators/component.ts

📒 【面试高频题】难度 3.5/5,综合最短路的 DP 问题

🌟 我的信息流 2023.1

⭐️ Go 1.19.5、1.18.10 更新涉及 compiler, linker, net/http, sync/atomic

📒 面试问 Dockerfile 的优化, 千万不要只会说减少层数

📒 Go 服务网络不通?net/http自带的这个工具帮你快速定位

📒 面试官:net/http库知道吗?能说说优缺点吗

⭐️ 模块联邦在微前端架构中的实践

📒 【综合笔试题】难度 4.5/5,经典次短路问题

⭐️ 加大力度!Go 将会增强 Go1 向后兼容性

⭐️ 聊聊Prometheus Gauge的增减操作实现

📒 Git操作不规范,战友提刀来相见!「文末抽奖」

📒 前端食堂技术周刊第 66 期:2022 JS Rising Stars、Lightning CSS、年度最受欢迎文章

📒 写出易维护的代码|React开发的设计模式及原则

📒 MDH 前端周刊第 82 期:Lightning CSS、Tailwindcss、HTTPie AI、chalk-next 投毒

《Zustand vs. Signals》,作者从 DX、性能和 Devtool 三个方面了对比这两个「小众」的状态管理库,简单说就是,1)Zustand 生态和周边更好,而 Signals 性能更好和更自动,2)作者下一个大型项目的选择还是 Zustand,因为对 Signals 的实践以及用的 React 内部 API 不太方向。

https://medium.com/@kevinschaffter/zustand-vs-signals-e664bff2ce4a

Evan You 写了一篇 《2022 Year In Review》,介绍 2022 总结和 2023 规划。2022 主要是默认 Vue 3、Volar 1、Vue Npm 下载量 x2、回传 Vue 3 功能的 Vue 2.7;2023 则是细粒度 Mirror 版本、类 Solid 的 Vapor Mode 编译模式等。

https://blog.vuejs.org/posts/2022-year-in-review.html

《How to ship》 包含了 4 个关于产品如何准时发布的 Tips,1)明确 MAVP(最小实际可行产品)的边界,注意不是偏 DEMO 类的 MVP,2)在前者的基础上削减范围,3)搭配可灵活调整的 Deadline,4)别让自己成为团队卡点。

https://www.industrialempathy.com/posts/how-to-ship/

《React ref Callback Use–Cases》,你可能不知道 ref 除了是 object 以外,还可以是 function,即 ref callback。ref callback 有一些应用场景,比如 mount 时(新增一个 list item 时)做滚动或聚焦、计算 DOM 尺寸或滚动位置、传递 DOM 给多个消费者等。

https://julesblom.com/writing/ref-callback-use-cases

《A React Developer’s First Take on Solid》,一个 React 开发者对 Solid 的第一印象。1)Solid 的优点是小和快,2)同时也有一些由于引入 Proxy 以及 Solid 不同的组件渲染机制后的缺点,比如 prop 不能在函数参数里析构等,3)SolidStart 是一个测试软件,有大量粗糙的边界场景,4)会在真实项目中用吗?不会!

https://jakelazaroff.com/words/a-react-developers-first-take-on-solid/

《Getting started with SolidStart》,SolidStart 入门文章,手把手教你写一个旅行 App。注:SolidStart 是基于 Solid 的元框架。

https://blog.logrocket.com/getting-started-solidstart-solid-js-framework/

《JavaScript Rising Stars 2022》,一年一期,这是第 7 期,可以了解 2022 JavaScript 社区的变化,但是以 Github Star 为衡量标准,并不能完全代表其流行度。

https://risingstars.js.org/2022/zh

MDH 前端周刊第 82 期:Lightning CSS、Tailwindcss、HTTPie AI、chalk-next 投毒

📒 2022 年前端大事记

⭐️ Go1.20 新特性:context支持自定义取消原因

⭐️ Go学设计模式--装饰器和职责链,哪个模式实现中间件更科学

📒 平时的工作如何体现一个人的技术深度?

📒 【第2832期】V8 执行 JavaScript 的过程

⭐️ Golang 库: 为什么 Golang slog 库不支持 Fatal

⭐️ Golang 库: golang slog 怎么设置日志 Debug 等级

⭐️ Golang slog 介绍

⭐️ 一文读懂 Go Http Server 原理

⭐️ 「每周译Go」了解 Go 中的 defer

📒 Go语言爱好者周刊:第 173 期 — 这个并发库真心好

· 2 min read
加菲猫

· 11 min read
加菲猫

📒 相关文章推荐

一个关于 useEffect 的可视化指南 — 奇怪的是,最受欢迎的文章出现在 2022 年的第一期中。作者创建了一系列 React 渲染的可视化指南文章(比如关于 useMemo 和 props 的文章),在这篇文章中他把注意力转向了 useEffect。如果你想了解更多,还有一个关于 头等函数如何工作的可视化演示

https://alexsidorenko.com/blog/useeffect/

我们能承认 React Hooks 是个坏主意吗? — 第二受欢迎的项目是一个“快速链接”,但这个话题有足够的争议,让很多人谈论!Amy 认为“React Hooks 是个坏主意”。不管你喜不喜欢,你都会有自己的看法

https://medium.com/codex/can-we-all-just-admit-react-hooks-were-a-bad-idea-c48120c5188d

2022 React 库 — React 生态系统已经变得如此之大,问题更多的是选择太多,而不是没有需要的东西。如果您正在为一个新项目选择库,那么这个列表(Robin 多年来一直在更新)仍然很有用。希望我们能看到 2023 年的版本

https://www.robinwieruch.de/react-libraries/

回顾 2022 的 React 趋势 — 在今年年初,作者看了看他认为 2022 年重要的事情。他在 Remix、服务端渲染、并发渲染和行为测试方面做得很好,这些都是今年讨论最多的话题

https://www.chakshunyu.com/blog/what-you-should-definitely-look-out-for-in-react-in-2022/

Awesome React Components:一个精心整理的组件清单

https://github.com/brillout/awesome-react-components

React Render Tracker:发现有关意外重渲染的性能问题 — 这个工具可以显示组件树状态随时间变化的差异,这样您就可以更好地研究发生了什么

https://github.com/lahmatiy/react-render-tracker

Plasmo:“它就像浏览器扩展的 Next.js” — 一个面向 React 和 TypeScript 的框架,用于构建您自己的浏览器扩展

https://github.com/PlasmoHQ/plasmo

<ClickToComponent />:快速跳转到组件源代码

https://github.com/ericclemmons/click-to-component

要避免的 10 个 React 反模式 — 一个精心呈现的 8 分钟视频,快速介绍了各种替代的更优方法(或至少值得斟酌)

https://www.youtube.com/watch?v=b0IZo2Aho9Y

📒 Golang 相关文章

Go 1.18 新增三大功能之一“模糊测试”使用方式

Go 1.18 新增三大功能之一“泛型”怎么使用

Go 语言开源项目使用的函数选项模式

Go 语言 context 最佳实践

Go 语言 errgroup 库的使用方式和实现原理

Go 语言一次性定时器使用方式和实现原理

  • new:为变量分配存储空间,返回指针类型,一般不常用
  • make:为复合数据类型(slicemapchan)分配存储空间

在 Go 语言中,原生类型都有默认值,即类型的零值

  • 布尔型的零值:false
  • 整型的零值:0
  • 字符串类型的零值:""
  • 指针、函数、接口、Slice、Map、Channel 的零值:nil

需要注意的是,Go 语言类型的零值初始化是递归完成的,即 数组结构体 的每个元素都进行零值初始化。

在 Go 语言中,推荐定义零值可用的结构体,不仅对程序的安全性和正确性非常重要,它还可以无需预先显式初始化即可直接使用,使 Go 程序代码更优雅。

Go 语言为什么建议定义零值可用的结构体

总结一下,短变量声明在同一作用域内重复使用,只是重新赋值,不会重新创建变量(即指针还是同一个),但是如果在不同作用域(例如 if 语句块),就会创建一个新的变量(内存地址与之前不同)。

Go 语言怎么解决编译器错误“err is shadowed during return”

Go 语言怎么处理三方接口返回数据

Go 语言使用 goroutine 运行闭包的“坑”

Go 语言内存逃逸案例

Go 语言逃逸分析

Go 语言怎么使用变长参数函数

Go 语言错误处理为什么更推荐使用 pkg/errors 三方库

Go 项目使用 Makefile

Go 应用程序设计标准

Go 语言整洁架构实践

Go 语言怎么使用 Docker 部署项目

Golang 语言怎么打印结构体指针类型字段的值

Golang 语言怎么避免空指针引发的 panic

Golang 语言该用命名返回值吗

总结一下:

  • unsafe.Pointer 主要用来实现 指针类型转换,任意指针类型 *T 都可以转换为 unsafe.Pointerunsafe.Pointer 可以转换为任何类型的指针值 *T
  • uintptr 主要用来实现 指针运算,实际是数值类型,可以用于存储内存地址。将 unsafe.Pointer 转换为 uintptr,然后使用 uintptr 值进行算术运算,最后将运算结果 uintptr 值再转换为 unsafe.Pointer

Golang 语言中的非类型安全指针

显式类型转换:

// 整型变量省略类型,编译器根据字面量推导默认是 int
var a = 100
a := 100

// 如果需要声明指定类型的整型变量,也可用显式类型转换,例如:
var a = int8(100)
b := int8(60)

变量声明块:

var (
a int = 100
b int = 200
)

var (
c = 300
d = 3.14
f = true
)

var (
e, f, g int = 10, 20, 30
h, i, j string = "a", "b", "c"
)

Golang 语言的多种变量声明方式和使用场景

Golang 语言中的内置函数 make 和 new

深入理解 go reflect - 反射基本原理

go interface 设计与实现

go Context 设计与实现

深入理解 go unsafe

📒 天呐!我用 go 从零开始写了一个 k8s 应用管理工具(附完整代码和开发过程)

⭐️ 没想到在 Docker 容器中设置时区这么简单

📒 先聊聊「内存分配」,再聊聊Go的「逃逸分析」

📒 字节一面:服务端挂了,客户端的 TCP 连接还在吗

📒 详解全网最快Go泛型跳表【内附源码】

📒 2022年Go语言盘点:泛型落地,无趣很好,稳定为王

📒 【第2824期】图解浏览器的多进程渲染机制

📒 在 Docker build 环境持久化 node_modules 目录

想在 docker build 环境中持久化 node_modules 需要使用到 BuildKitmount 功能,该功能有几个前置条件:

  • docker 版本必须高于 18.09
  • BuildKit 需要手工启用,可在 docker build 命令前添加环境变量 DOCKER_BUILDKIT=1 启用
  • 如果前两个条件不满足,则需要具备 Jenkins 和构建机的读写权限,以调整构建环境参数
  • 修改 Dockerfile,使用 RUN --mount=type=cache 运行 npm installnpm run build 指令(--mount=type=cache

开启 BuildKit 还有其他特性,比如输出日志更友好,基本每一步都会输出耗时,就这一条,值了!

实际操作分为 2 步:

修改 Jenkins 配置,在 docker build 命令前加上环境变量。修改后镜像构建命令长这样:

$  DOCKER_BUILDKIT=1 docker build .

修改 Dockerfile,将 RUN npm installRUN npm run build 指令前面加上 RUN --mount=type=cache npm xxx

FROM node:alpine as builder

WORKDIR /app

COPY package.json /app/

RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
--mount=type=cache,target=/root/.npm,id=npm_cache \
npm i --registry=https://registry.npmmirror.com/

COPY src /app/src

RUN --mount=type=cache,target=/app/node_modules,id=my_app_npm_module,sharing=locked \
npm run build

参考:

加3行代码减少80%构建时间

Docker 从入门到实践 - 使用 BuildKit 构建镜像

https://docs.docker.com/build/buildkit/

📒 Monorepo 下 Git 工作流的最佳实践

📒 Prometheus 数据存储那些事儿

📒 Go1.20 一次打破 Go1 兼容性承诺的真实案例

📒 基于 GraphQL 的云音乐 BFF 建设实践

⭐️ 【第2823期】打包JavaScript库的现代化指南

⭐️ 通过分析gin、beego源码,读懂web框架对http请求处理流程的本质

📒 极端情况下Go的Map也会发生内存泄漏

📒 这两个特性将在 Go1.20 中被弃用,受影响最大的居然是国内的面试官

📒 Go:讲一个故事说明使用汇编语言的必要性

📒 Go学设计模式--怕把核心代码改乱,记得用代理模式

📒 Go语言中常见100问题-#25 Unexpected side effects using slice append