前言
前端技术日新月异,但核心知识体系却有章可循。作为一名资深前端工程师,我深知系统学习的重要性——零散的知识点如同孤岛,只有串联成网,才能真正内化为能力。因此,我发起这个为期365天的写作计划,每天一篇技术文章,旨在帮助读者循序渐进地构建完整的前端知识架构,无论你是初学者还是有一定经验的开发者,都能从中获益。
计划概览
本计划按季度划分为四大阶段,每个阶段聚焦一个核心领域,同时穿插实战项目,确保理论与实践结合。全年共约365篇文章,涵盖HTML/CSS、JavaScript、框架、工程化、性能优化、全栈、前沿技术等20+个模块。
整体大纲
| 季度 | 主题 | 核心内容 |
|---|---|---|
| Q1 | 基础重塑 | HTML/CSS进阶、JavaScript核心、ES6+深入 |
| Q2 | 框架与工程化 | React全家桶、Webpack/Vite、工程化最佳实践 |
| Q3 | 性能与原理 | 浏览器原理、性能优化、TypeScript系统课 |
| Q4 | 拓展与架构 | 全栈开发、移动端/桌面端、前沿技术、架构设计 |
详细计划(按月划分)
第一阶段:基础重塑(第1-3个月)
第1月:HTML/CSS 深度之旅
-
第1周:语义化与文档流
- 文章1:HTML5语义化标签的正确使用场景
- 文章2:深入理解块级与行内元素,以及
display的新特性 - 文章3:文档流与格式化上下文(BFC/IFC)实战解析
- 文章4:CSS选择器优先级与继承机制
- 文章5:
box-sizing与边距折叠的终极解决方案 - 文章6:实战:重构一个老旧页面,提升语义化与可访问性
- 文章7:每周总结与Q&A
-
第2周:布局大师
- 文章8:浮动布局的过去与现在(清除浮动的多种方法)
- 文章9:Flexbox完全指南(容器属性、项目属性、实战案例)
- 文章10:Grid网格布局从入门到精通
- 文章11:多列布局与瀑布流实现
- 文章12:响应式设计的核心:媒体查询与断点设置
- 文章13:移动端适配方案(rem、vw/vh、视口)
- 文章14:实战:构建一个响应式官网首页
-
第3周:视觉美化
- 文章15:CSS颜色与渐变(线性、径向、锥形渐变)
- 文章16:字体排版与Web字体加载优化
- 文章17:过渡与动画(transition、animation关键帧)
- 文章18:变换(transform)2D/3D应用
- 文章19:滤镜与混合模式(filter、backdrop-filter)
- 文章20:实战:制作一个炫酷的加载动画库
- 文章21:每周总结与优秀作品展示
-
第4周:预处理与后处理
- 文章22:Sass基础:变量、嵌套、混合、继承
- 文章23:Sass进阶:函数、循环、条件、模块化
- 文章24:Less与Stylus快速对比
- 文章25:PostCSS生态:autoprefixer、stylelint、cssnano
- 文章26:CSS-in-JS方案对比(styled-components、emotion)
- 文章27:原子化CSS(Tailwind CSS)实战
- 文章28:项目:重构一个组件库的样式层
第2月:JavaScript 核心再探索
-
第1周:变量、类型与作用域
- 文章29:JavaScript数据类型详解(含Symbol、BigInt)
- 文章30:隐式转换与装箱/拆箱机制
- 文章31:作用域与作用域链(全局、函数、块级)
- 文章32:闭包的本质与应用场景(防抖、节流、模块化)
- 文章33:执行上下文与调用栈(图解)
- 文章34:垃圾回收与内存泄漏排查
- 文章35:实战:实现一个简易的模块加载器
-
第2周:原型与面向对象
- 文章36:原型与原型链(
__proto__、prototype、constructor) - 文章37:继承的多种实现方式(原型链、盗用构造函数、组合、寄生、ES6类)
- 文章38:ES6 class的语法糖与底层实现
- 文章39:new关键字的工作原理
- 文章40:instanceof与typeof的底层逻辑
- 文章41:对象属性描述符(数据属性、访问器属性)
- 文章42:实战:手写一个发布-订阅事件系统
- 文章36:原型与原型链(
-
第3周:异步编程
- 文章43:事件循环(Event Loop)完全解析(浏览器与Node)
- 文章44:回调地狱与Promise/A+规范
- 文章45:手写Promise(符合Promise/A+标准)
- 文章46:async/await的语法糖与异常处理
- 文章47:Generator函数与协程
- 文章48:异步迭代器与for await...of
- 文章49:实战:并发请求控制(带并发限制的请求队列)
-
第4周:DOM与BOM
- 文章50:DOM树与节点操作(CRUD)
- 文章51:事件流(捕获、冒泡)与事件委托
- 文章52:自定义事件与EventTarget接口
- 文章53:MutationObserver监听DOM变化
- 文章54:BOM核心:window、navigator、location、history
- 文章55:Web Storage(localStorage、sessionStorage)与IndexedDB
- 文章56:实战:实现一个可拖拽的面板
第3月:ES6+ 与现代化特性
-
第1周:语法增强
- 文章57:let/const与暂时性死区
- 文章58:解构赋值的灵活运用
- 文章59:字符串与正则增强(模板字符串、Unicode、新方法)
- 文章60:数值扩展(二进制/八进制、Number新方法、Math方法)
- 文章61:数组扩展(扩展运算符、Array.from、find、flat等)
- 文章62:对象扩展(属性简写、合并、键名计算)
- 文章63:实战:用新语法重构旧项目代码
-
第2周:函数与模块
- 文章64:箭头函数的特点与适用场景
- 文章65:函数参数默认值、剩余参数
- 文章66:尾调用优化与尾递归
- 文章67:ES6模块(export/import)与CommonJS区别
- 文章68:动态import与代码分割
- 文章69:模块循环加载的处理机制
- 文章70:实战:设计一个工具库,使用ES6模块打包
-
第3周:数据结构与集合
- 文章71:Set与WeakSet
- 文章72:Map与WeakMap
- 文章73:Symbol的用途与内置Symbol
- 文章74:迭代器协议与可迭代对象
- 文章75:生成器的高级用法(状态机、异步流控制)
- 文章76:Proxy与Reflect(元编程)
- 文章77:实战:用Proxy实现数据绑定
-
第4周:类型与扩展
- 文章78:装饰器(Decorator)提案与使用
- 文章79:可选链(?.)与空值合并(??)
- 文章80:BigInt与整数运算
- 文章81:globalThis与跨环境访问
- 文章82:ES2023新特性速览(findLast、Hashbang等)
- 文章83:JavaScript未来的发展方向
- 文章84:月度总结与知识图谱梳理
第二阶段:框架与工程化(第4-6个月)
第4月:React 从入门到原理
-
第1周:React基础
- 文章85:React设计哲学与虚拟DOM
- 文章86:JSX语法与Babel编译原理
- 文章87:组件与Props(函数组件、类组件)
- 文章88:State与生命周期(类组件)
- 文章89:事件处理与合成事件
- 文章90:条件渲染与列表渲染(key的作用)
- 文章91:实战:搭建第一个React应用(Create React App)
-
第2周:Hooks 详解
- 文章92:useState与状态管理
- 文章93:useEffect与副作用(清除、依赖、执行时机)
- 文章94:useContext与跨组件通信
- 文章95:useReducer与复杂状态逻辑
- 文章96:useRef与DOM操作、保存变量
- 文章97:自定义Hooks(复用逻辑)
- 文章98:Hooks原理(链表、闭包陷阱)
-
第3周:高级模式与性能
- 文章99:高阶组件(HOC)与render props
- 文章100:Portals与Modal实现
- 文章101:错误边界(Error Boundaries)
- 文章102:Fragment与StrictMode
- 文章103:React.memo与useMemo、useCallback
- 文章104:代码分割与Suspense
- 文章105:实战:优化一个列表组件,避免重复渲染
-
第4周:React原理探秘
- 文章106:Fiber架构与协调过程
- 文章107:Render阶段与Commit阶段
- 文章108:Diff算法详解(单节点、多节点)
- 文章109:事件机制与批量更新
- 文章110:React 18新特性(并发渲染、自动批处理、useTransition等)
- 文章111:手写迷你React(一):渲染与更新
- 文章112:手写迷你React(二):Hooks实现
第5月:React 生态与实战
-
第1周:路由管理
- 文章113:React Router v6基础(BrowserRouter、Routes、Link)
- 文章114:嵌套路由与Outlet
- 文章115:路由传参与获取(useParams、useSearchParams)
- 文章116:路由守卫与权限控制
- 文章117:懒加载与路由级代码分割
- 文章118:与状态管理结合(路由变化触发数据加载)
- 文章119:实战:实现一个带权限的后台管理路由系统
-
第2周:状态管理
- 文章120:Redux核心概念(Store、Action、Reducer)
- 文章121:React-Redux与connect、useSelector、useDispatch
- 文章122:Redux Toolkit(configureStore、createSlice)
- 文章123:Redux异步方案(Thunk、Saga)
- 文章124:Zustand入门与对比
- 文章125:MobX响应式状态管理
- 文章126:实战:从Redux迁移到Redux Toolkit
-
第3周:UI组件库与样式
- 文章127:Ant Design实战与主题定制
- 文章128:Material-UI(MUI)使用指南
- 文章129:Semi Design与字节组件库解析
- 文章130:组件库设计原则(原子设计)
- 文章131:Storybook搭建与文档编写
- 文章132:CSS模块化方案对比(CSS Modules、styled-components)
- 文章133:实战:封装一个通用表格组件
-
第4周:服务端渲染与框架
- 文章134:Next.js入门(Pages、路由、预渲染)
- 文章135:Next.js数据获取(getStaticProps、getServerSideProps)
- 文章136:Next.js API路由与全栈开发
- 文章137:Next.js部署与优化
- 文章138:Gatsby静态站点生成
- 文章139:Remix框架初探
- 文章140:SSR与SSG原理对比
第6月:工程化体系搭建
-
第1周:构建工具
- 文章141:Webpack核心概念(Entry、Output、Loaders、Plugins)
- 文章142:常用Loader解析(babel-loader、css-loader、file-loader)
- 文章143:常用Plugin解析(HtmlWebpackPlugin、CleanWebpackPlugin)
- 文章144:Webpack优化(热更新、缓存、多进程)
- 文章145:Vite原理与使用(基于ESM的构建)
- 文章146:对比Webpack、Vite、Rollup、Parcel
- 文章147:实战:从零配置一个React+Vite项目
-
第2周:代码规范与质量
- 文章148:ESLint配置与规则定制
- 文章149:Prettier与代码格式化
- 文章150:Husky与lint-staged(Git钩子)
- 文章151:Commit规范与Commitizen
- 文章152:EditorConfig与跨编辑器一致性
- 文章153:Code Review指南与自动化
- 文章154:实战:搭建前端团队代码规范脚手架
-
第3周:测试策略
- 文章155:单元测试与Jest基础(断言、匹配器)
- 文章156:React组件测试(Testing Library)
- 文章157:Mock与异步测试
- 文章158:快照测试与覆盖率
- 文章159:E2E测试(Cypress/Playwright)
- 文章160:测试驱动开发(TDD)实战
- 文章161:实战:为组件库编写完整测试用例
-
第4周:包管理与发布
- 文章162:npm/yarn/pnpm对比与使用技巧
- 文章163:package.json全字段解析
- 文章164:语义化版本与依赖管理
- 文章165:发布npm包流程(注册、登录、发布、更新)
- 文章166:Monorepo管理(Lerna、Turborepo、pnpm workspaces)
- 文章167:私有npm仓库搭建(Verdaccio)
- 文章168:实战:发布一个自己的工具库到npm
第三阶段:性能与原理(第7-9个月)
第7月:TypeScript 系统精讲
-
第1周:基础类型与接口
- 文章169:TypeScript环境搭建与编译配置
- 文章170:原始类型与对象类型
- 文章171:数组、元组、枚举
- 文章172:接口(Interface)与类型别名(Type)
- 文章173:函数类型与重载
- 文章174:类型断言与非空断言
- 文章175:实战:用TS重写JavaScript工具函数
-
第2周:高级类型
- 文章176:联合类型与交叉类型
- 文章177:类型保护与类型收窄(typeof、instanceof、in、谓词)
- 文章178:可辨识联合(Discriminated Unions)
- 文章179:泛型基础(泛型函数、接口、类)
- 文章180:泛型约束与条件类型
- 文章181:映射类型与内置工具类型(Partial、Required、Pick等)
- 文章182:实战:实现一个类型安全的EventEmitter
-
第3周:类型编程
- 文章183:条件类型与infer关键字
- 文章184:递归类型与模板字面量类型
- 文章185:协变与逆变
- 文章186:声明文件(.d.ts)编写
- 文章187:模块扩展与全局声明
- 文章188:利用TypeScript增强React Props类型
- 文章189:实战:为第三方库编写类型声明
-
第4周:工程化与框架集成
- 文章190:tsconfig.json配置详解
- 文章191:Webpack/Vite中集成TypeScript
- 文章192:ESLint + TypeScript规范
- 文章193:JSDoc与TypeScript互补
- 文章194:TypeScript在Node.js中的应用
- 文章195:TypeScript 5.x新特性
- 文章196:月度总结:TS在前端架构中的价值
第8月:浏览器与网络原理
-
第1周:渲染原理
- 文章197:浏览器架构与进程/线程模型
- 文章198:导航流程(输入URL到页面显示)
- 文章199:渲染流水线(DOM树、CSSOM、渲染树、分层、绘制、合成)
- 文章200:重排、重绘与合成
- 文章201:硬件加速与层压缩
- 文章202:关键渲染路径优化
- 文章203:实战:分析并优化页面渲染性能
-
第2周:JavaScript引擎与内存
- 文章204:V8引擎工作原理(JIT、内联缓存)
- 文章205:垃圾回收机制(新生代、老生代、标记清除)
- 文章206:内存泄漏检测工具与技巧
- 文章207:微任务与宏任务队列深度剖析
- 文章208:requestAnimationFrame与requestIdleCallback
- 文章209:Web Worker与多线程
- 文章210:实战:用Web Worker优化计算密集型任务
-
第3周:网络协议
- 文章211:HTTP/1.1与队头阻塞
- 文章212:HTTPS与加密握手过程
- 文章213:HTTP/2多路复用与服务器推送
- 文章214:HTTP/3与QUIC协议
- 文章215:WebSocket与实时通信
- 文章216:CDN原理与配置
- 文章217:实战:配置Nginx实现负载均衡与缓存
-
第4周:安全攻防
- 文章218:XSS跨站脚本攻击与防御(CSP、转义)
- 文章219:CSRF跨站请求伪造与防御(Token、SameSite)
- 文章220:点击劫持与X-Frame-Options
- 文章221:SQL注入与ORM防护
- 文章222:中间人攻击与HSTS
- 文章223:前端加密与敏感信息保护
- 文章224:实战:为网站添加安全头
第9月:性能优化实战
-
第1周:加载优化
- 文章225:首屏加载优化指标(FCP、LCP、TTI等)
- 文章226:资源压缩与Tree Shaking
- 文章227:图片优化(格式、压缩、懒加载、响应式)
- 文章228:字体加载优化(font-display、预加载)
- 文章229:代码分割与动态导入
- 文章230:预加载与预连接(preload、preconnect)
- 文章231:实战:使用Lighthouse评估并优化首屏
-
第2周:运行时优化
- 文章232:减少重排重绘的策略
- 文章233:事件节流与防抖
- 文章234:虚拟列表与无限滚动
- 文章235:Web动画性能优化(transform代替left等)
- 文章236:长任务拆分与时间切片
- 文章237:使用WebAssembly加速计算
- 文章238:实战:优化长列表渲染性能
-
第3周:缓存与存储
- 文章239:浏览器缓存机制(强缓存、协商缓存)
- 文章240:Service Worker与离线缓存
- 文章241:IndexedDB大规模数据存储
- 文章242:Web SQL与LocalStorage的替代方案
- 文章243:HTTP缓存头最佳实践
- 文章244:缓存更新策略(CDN刷新、版本控制)
- 文章245:实战:构建一个PWA应用
-
第4周:性能监控与工具
- 文章246:Performance API与性能标记
- 文章247:使用Chrome DevTools分析性能
- 文章248:前端监控体系搭建(错误监控、性能上报)
- 文章249:Sentry接入与错误分析
- 文章250:自定义性能指标与上报
- 文章251:A/B测试与性能评估
- 文章252:月度总结:性能优化 checklist
第四阶段:拓展与架构(第10-12个月)
第10月:全栈开发与Node.js
-
第1周:Node.js基础
- 文章253:Node.js架构与事件驱动
- 文章254:模块系统(CommonJS与ESM)
- 文章255:文件系统操作与流
- 文章256:Buffer与二进制数据
- 文章257:进程与子进程
- 文章258:cluster模块与多核利用
- 文章259:实战:编写一个命令行工具
-
第2周:Web框架(Express/Koa)
- 文章260:Express中间件机制与路由
- 文章261:请求处理与响应
- 文章262:静态文件服务与模板引擎
- 文章263:Koa的洋葱模型与async/await
- 文章264:对比Express、Koa、Fastify
- 文章265:RESTful API设计规范
- 文章266:实战:搭建一个RESTful API服务
-
第3周:数据库与ORM
- 文章267:关系型数据库(MySQL)基础
- 文章268:NoSQL(MongoDB)基础
- 文章269:Sequelize ORM使用
- 文章270:Mongoose ODM使用
- 文章271:数据库连接池与性能
- 文章272:事务与ACID
- 文章273:实战:为博客系统设计数据库模型
-
第4周:全栈项目实战
- 文章274:前后端分离与接口联调
- 文章275:JWT身份认证与鉴权
- 文章276:文件上传与处理(multer)
- 文章277:WebSocket实时通信(Socket.io)
- 文章278:日志与错误处理
- 文章279:部署Node应用(PM2、Docker)
- 文章280:项目:从零构建一个全栈问答社区
第11月:移动端与桌面应用
-
第1周:小程序开发
- 文章281:微信小程序架构与开发流程
- 文章282:小程序组件与API使用
- 文章283:小程序云开发与数据库
- 文章284:多端框架(Taro/uni-app)
- 文章285:小程序性能优化
- 文章286:小程序自动化测试
- 文章287:实战:开发一个天气查询小程序
-
第2周:React Native
- 文章288:React Native环境搭建与原理
- 文章289:组件与样式(Flexbox)
- 文章290:导航(React Navigation)
- 文章291:状态管理与原生模块桥接
- 文章292:热更新与CodePush
- 文章293:性能优化(列表、动画)
- 文章294:实战:构建一个简单的Todo应用
-
第3周:Electron桌面应用
- 文章295:Electron主进程与渲染进程
- 文章296:跨平台配置与打包
- 文章297:IPC通信与菜单
- 文章298:系统通知与托盘
- 文章299:自动更新与分发
- 文章300:性能与安全考虑
- 文章301:实战:开发一个Markdown编辑器
-
第4周:跨端技术对比
- 文章302:Flutter for Web简介
- 文章303:对比React Native、Flutter、Weex
- 文章304:PWA与Native App的融合
- 文章305:桌面端技术选型(Electron vs Tauri)
- 文章306:移动端调试与真机调试
- 文章307:跨端UI组件库设计
- 文章308:月度总结:跨端开发趋势
第12月:前沿技术与架构设计
-
第1周:微前端
- 文章309:微前端核心思想与价值
- 文章310:single-spa原理与使用
- 文章311:qiankun框架详解
- 文章312:微应用通信与隔离
- 文章313:样式隔离与依赖共享
- 文章314:微前端落地实践
- 文章315:实战:将巨石应用拆分为微前端
-
第2周:WebAssembly与新兴技术
- 文章316:WebAssembly基础与Emscripten
- 文章317:Rust与Wasm结合
- 文章318:AssemblyScript入门
- 文章319:WebGPU与图形编程
- 文章320:WebRTC实时通信
- 文章321:Web3与区块链前端
- 文章322:实战:用Wasm实现图像处理滤镜
-
第3周:设计模式与架构
- 文章323:前端常见设计模式(单例、观察者、工厂、策略等)
- 文章324:MVC、MVP、MVVM模式演变
- 文章325:分层架构与DDD在前端的应用
- 文章326:组件化与可复用设计
- 文章327:前端架构文档编写
- 文章328:技术选型方法论
- 文章329:实战:重构老旧项目,引入设计模式
-
第4周:总结与展望
- 文章330:前端知识体系全景回顾
- 文章331:如何持续学习与跟踪新技术
- 文章332:面试题精讲(一):HTML/CSS
- 文章333:面试题精讲(二):JavaScript
- 文章334:面试题精讲(三):框架与工程化
- 文章335:面试题精讲(四):性能与安全
- 文章336:毕业项目:搭建个人技术博客并撰写总结
后记
365天,336篇技术干货(加上穿插的实战与总结,实际超过365篇),这不仅仅是一个写作计划,更是一个共同成长的约定。我将以资深工程师的视角,结合多年实战经验,为你呈现一个系统、深入、实用的前端知识体系。每一篇文章都力求做到:原理+实践+思考,让你不仅知其然,更知其所以然。
希望你能跟随这个计划,每天进步一点点,一年后蜕变为能够独当一面的前端架构师。如果你有任何建议或想要深入探讨的话题,欢迎在评论区留言,我们一起完善这个知识图谱。
明天,我们从HTML/CSS开始,不见不散!