首页
关于
Search
1
用 Typecho 搭建一个极简个人站点的完整记录
23 阅读
2
周末去了趟老城区,拍了一些快门
10 阅读
3
把书房改成一间能待住的房间
6 阅读
4
欢迎使用 Typecho
5 阅读
5
一次 MySQL 慢查询的完整排查过程
5 阅读
默认分类
技术笔记
生活随笔
摄影
读书
资源分享
登录
Search
标签搜索
性能
家居
日常
图片
前端
音乐
复盘
MySQL
改造
扫街
独立开发
免费
工具
技巧
Python
书评
毛姆
胶片
渐行渐远渐无书
累计撰写
11
篇文章
累计收到
16
条评论
首页
栏目
默认分类
技术笔记
生活随笔
摄影
读书
资源分享
页面
关于
搜索到
5
篇与
技术笔记
的结果
2026-10-04
用 Typecho 搭建一个极简个人站点的完整记录
记录把博客从 WordPress 迁移到 Typecho 的全过程:环境、性能、踩坑。为什么要换WordPress 插件越来越多之后,首屏 TTFB 从 180ms 涨到了 1.2s。Typecho 核心只有 400 多个文件,够用。环境清单PHP 8.2 + OPcacheMariaDB 10.6Nginx 1.24,开启 Brotli 与 HTTP/3静态资源全部走同域 /usr/uploadsNginx 关键配置location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; }伪静态用 try_files $uri $uri/ /index.php$is_args$args; 即可。结果指标迁移前迁移后TTFB1200ms95ms首页体积2.1MB380KBLighthouse 性能分6297结论:小站点不必为不存在的规模买单。
2026年10月04日
23 阅读
2 评论
0 点赞
2026-10-01
Python 里我常用但同事常忘的 12 个写法
攒下来的小抄,多数是 itertools 和标准库里的边角料。1. itertools.pairwise 取代手滑下标from itertools import pairwise for a, b in pairwise(rows): if b['ts'] - a['ts'] > 60: print('gap', a['id'], b['id'])2. collections.Counter 的算术total = Counter(x) + Counter(y) # 并 only_a = (Counter(x) - Counter(y)) # 差3. str.removeprefix 而不是 [3:]name = raw.removeprefix('user:')4. 一行读完整个文件再处理with open(p, encoding='utf-8') as f: lines = [ln.rstrip() for ln in f if ln.strip()]5. enumerate(start=1) 处理行号其余 7 条(functools.cache、zip(*rows) 转置、dataclass(slots=True)、Path.glob 排序坑、typing.assert_never 穷尽检查、tempfile.NamedTemporaryFile(delete_on_close=False)、os.process_cpu_time_ns)另开一篇写。
2026年10月01日
3 阅读
0 评论
0 点赞
2026-09-30
免费且好用的 6 个独立开发工具(2026 更新)
只列自己每周真的在用的,不铺链接农场。FigJam 免费档:白板协作,画图够用Raycast:命令面板 + 剪贴板历史Cal.com:开源预约,个人版永久免费Plausible:轻量统计,脚本 8KBTinyPNG:批量压图,本地版走 SquooshExcalidraw:手绘风架构图,导出 SVG注意:以上都不需要信用卡。
2026年09月30日
4 阅读
2 评论
0 点赞
2026-09-28
一次 MySQL 慢查询的完整排查过程
线上有个接口 P99 飙到 3.4s,最终定位到一条没走索引的 ORDER BY。排查步骤# 1. 打开慢日志 SET GLOBAL slow_query_log = 1; SET GLOBAL long_query_time = 0.5; # 2. 抓现场 pt-query-digest /var/log/mysql/slow.log --limit 5EXPLAIN 里 rows 是 41 万,Extra 只有 Using where,没有 Using index——典型的排序落盘。修复ALTER TABLE typecho_contents ADD INDEX idx_status_created (status, created DESC);加完索引,同一 SQL 从 2.8s 降到 41ms。阶段耗时rows examined原始2810ms412,663强制索引320ms8,900新复合索引41ms1,024教训:DESC 索引在 MySQL 8.0 才真正生效,5.7 上只是解析通过。
2026年09月28日
5 阅读
3 评论
0 点赞
2026-09-26
关于图片懒加载和 LCP 的几点实测
列表页 12 张封面图全量加载,LCP 890ms;改成首屏 fetchpriority="high" + 其余 loading="lazy" 后 410ms。结论loading="lazy" 对首屏图是负优化,务必排除首屏封面用 AVIF,宽度给到 800px 足够width/height 显式声明,CLS 从 0.21 掉到 0.02CDN 回源时间比格式收益更大,先解决缓存命中<img src="/usr/uploads/2026/10/cover.avif" width="800" height="450" fetchpriority="high" decoding="async" alt="封面">
2026年09月26日
5 阅读
2 评论
0 点赞