1. 为什么需要整理常用功能代码笔记
作为一个写了十年代码的老程序员,我深刻体会到好记性不如烂笔头这个道理。刚开始工作时,我总是自信地认为常用的代码片段肯定能记住,结果每次遇到类似需求都要重新搜索和调试。直到有一天,我花了整整一下午解决一个本应5分钟搞定的问题后,终于下定决心开始系统地整理常用代码笔记。
代码笔记不同于普通的项目文档,它更像是程序员个人的"武功秘籍"。我把它们分为三类:第一类是高频使用的工具函数,比如日期格式化、字符串处理;第二类是特定场景的解决方案,比如文件上传、权限验证;第三类是容易忘记的配置片段,比如各种框架的初始化配置。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 我的代码笔记管理方法论
2.1 笔记分类体系
我采用三级分类法管理代码笔记:
- 一级分类按技术栈划分(前端/后端/数据库等)
- 二级分类按功能模块划分(用户系统/支付系统等)
- 三级分类按具体场景划分(微信登录/支付宝支付等)
每个代码片段都包含五个要素:
- 使用场景描述
- 完整可运行的代码
- 必要的环境依赖说明
- 常见问题及解决方案
- 最后更新时间戳
2.2 存储工具选择
经过多年实践,我最终选择了VS Code + GitHub Gist的组合方案:
- VS Code的代码片段(Snippets)功能适合存储高频小片段
- GitHub Gist适合存储较完整的模块代码
- 本地Markdown文件用于记录复杂场景的解决方案
特别提醒:一定要定期备份!我曾经因为硬盘损坏丢失过积累半年的笔记,现在会每周自动同步到私有Git仓库。
3. 前端常用代码片段精选
3.1 防抖与节流函数
这两个性能优化函数是前端开发中的常客,但参数和返回值很容易记混。我的标准实现版本:
javascript复制// 防抖函数
function debounce(fn, delay = 300) {
let timer = null
return function(...args) {
if(timer) clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(this, args)
}, delay)
}
}
// 节流函数
function throttle(fn, interval = 300) {
let lastTime = 0
return function(...args) {
let now = Date.now()
if(now - lastTime >= interval) {
fn.apply(this, args)
lastTime = now
}
}
}
使用心得:
- 事件监听器一定要记得移除
- 移动端建议适当延长间隔时间
- 需要立即执行的场景要特殊处理
3.2 文件下载处理
前端文件下载有几种常见场景,这是我最常用的兼容方案:
javascript复制function downloadFile(url, filename) {
// 创建隐藏的a标签
const a = document.createElement('a')
a.style.display = 'none'
document.body.appendChild(a)
// 处理不同浏览器兼容性
if('download' in a) {
a.href = url
a.download = filename
a.click()
} else {
// IE特殊处理
navigator.msSaveBlob(url, filename)
}
// 清理DOM
setTimeout(() => {
document.body.removeChild(a)
window.URL.revokeObjectURL(url)
}, 100)
}
踩坑记录:
- Safari需要特殊处理blob URL
- 大文件要考虑内存释放问题
- 移动端可能有弹出拦截
4. 后端常用代码片段精选
4.1 数据库连接池配置
以Node.js + MySQL为例,生产环境必须使用连接池:
javascript复制const mysql = require('mysql2/promise')
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'yourpassword',
database: 'mydb',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
enableKeepAlive: true,
keepAliveInitialDelay: 0
})
// 获取连接
const getConnection = async () => {
try {
return await pool.getConnection()
} catch (err) {
console.error('获取数据库连接失败:', err)
throw err
}
}
重要参数说明:
- connectionLimit要根据服务器配置调整
- enableKeepAlive可以防止连接超时断开
- queueLimit=0表示无限制排队(慎用)
4.2 JWT鉴权中间件
这是Express框架的JWT验证中间件实现:
javascript复制const jwt = require('jsonwebtoken')
const authMiddleware = (req, res, next) => {
// 从header/cookie/query获取token
const token = req.headers.authorization?.split(' ')[1] ||
req.cookies?.token ||
req.query.token
if (!token) {
return res.status(401).json({ message: '未提供认证令牌' })
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET)
req.user = decoded
next()
} catch (err) {
// 区分过期和其他错误
if (err.name === 'TokenExpiredError') {
return res.status(401).json({ message: '令牌已过期' })
}
return res.status(401).json({ message: '无效令牌' })
}
}
安全建议:
- 一定要设置合理的过期时间
- 敏感操作应该使用短期token
- 考虑加入refresh token机制
5. 开发环境常用配置
5.1 Git全局配置
这些配置能显著提升日常开发效率:
bash复制# 常用别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
# 提高命令输出可读性
git config --global color.ui auto
# 设置默认编辑器
git config --global core.editor "code --wait"
# 优化大仓库性能
git config --global feature.manyFiles true
git config --global core.fscache true
# 防止误操作
git config --global push.default current
5.2 Docker开发环境模板
我的标准开发环境Dockerfile:
dockerfile复制FROM node:16-alpine
# 设置时区
RUN apk add --no-cache tzdata
ENV TZ=Asia/Shanghai
# 创建非root用户
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
# 优化npm安装
WORKDIR /app
COPY package*.json ./
RUN npm install --production && npm cache clean --force
# 复制代码
COPY --chown=appuser:appgroup . .
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
CMD node healthcheck.js || exit 1
EXPOSE 3000
CMD ["node", "server.js"]
优化技巧:
- 使用alpine镜像减小体积
- 分层构建加快重建速度
- 非root用户提升安全性
6. 代码笔记的迭代与维护
积累代码笔记不是一劳永逸的事,我每周会固定花1小时做这些事:
- 删除过时的代码片段(比如基于旧API的实现)
- 合并相似的解决方案
- 补充新发现的最佳实践
- 添加使用场景的示例说明
- 检查所有代码片段的可运行性
特别建议为每个代码片段添加"适用版本"说明,比如:
适用版本:React 18+, Node.js 16+
我还会为复杂的代码片段编写单元测试,确保它们长期可用。当笔记规模变大后,可以考虑搭建本地文档站点,我用VitePress管理近千个代码片段,支持全文搜索和标签过滤。
