2022-08-14 00:37:46
前端开发中越早知道越好的小技巧和小知识涵盖语言特性、开发工具、性能优化、工程实践等多个方面,以下是一些关键点:
HTML/CSS 基础
语义化标签:使用 <header>、<section>、<article> 等语义化标签替代 <div>,提升代码可读性和 SEO 效果。
CSS 层叠上下文:理解 z-index 的生效条件(需配合 position 属性),避免因层叠顺序混乱导致的布局问题。
居中方案:掌握 Flexbox 和 Grid 布局实现水平垂直居中的方法,减少对 margin: auto 或 transform: translate(-50%, -50%) 的依赖。
CSS 性能优化:减少复杂选择器(如嵌套过深)、避免频繁重绘(如慎用 box-shadow)、使用 will-change 提前告知浏览器元素可能的变化。
JavaScript 核心
执行上下文与调用栈:理解函数调用时执行上下文的创建过程(变量环境、词法环境),以及调用栈如何管理函数执行顺序。
闭包的应用:利用闭包实现数据私有化(如模块模式)、缓存计算结果(如记忆化技术),但需注意内存泄漏问题。
Promise 与异步处理:优先使用 async/await 替代回调地狱,结合 Promise.all 处理并行请求,用 try/catch 捕获异步错误。
深拷贝与浅拷贝:区分 Object.assign()、展开运算符 ... 的浅拷贝特性,掌握 JSON.parse(JSON.stringify(obj)) 的局限性(无法处理函数、循环引用)。
React 开发
生命周期管理:
Mounting 阶段:componentDidMount 是发起网络请求或操作 DOM 的最佳时机,避免在 render 中直接执行副作用。
Updating 阶段:shouldComponentUpdate 或 React.memo 可优化性能,但需谨慎比较 props/state 变化。
Unmounting 阶段:在 componentWillUnmount 中清除定时器、取消订阅,防止内存泄漏。
setState 的异步性:理解 setState 的批量更新机制,在异步操作中需通过回调或 useEffect 获取最新状态。
Virtual DOM 与 Diff 算法:理解 React 通过 key 属性高效复用 DOM 节点,避免在列表渲染中使用索引作为 key。
Hooks 规范:遵循 useEffect 的依赖项规则,避免无限循环;将相关逻辑封装到自定义 Hook 中提升复用性。
TypeScript 实践
类型定义:为函数参数、返回值、组件 props 定义明确的类型,利用 interface 或 type 描述复杂数据结构。
泛型与工具类型:使用 Partial<T>、Pick<T, K> 等工具类型简化类型操作,通过泛型实现可复用的组件或函数。
类型推断:利用 as const 断言字面量类型,或通过 ReturnType<T> 获取函数返回类型,减少冗余代码。
工程化与工具链
Webpack 配置:
代码分割:通过 SplitChunksPlugin 拆分公共依赖,利用动态导入(import())实现按需加载。
缓存优化:为文件名添加 [contenthash],结合 cache-loader 或 babel-loader 的 cacheDirectory 选项提升构建速度。
Babel 插件:编写自定义插件处理特定语法转换(如将 JSX 转换为自定义模板引擎语法)。
ESLint 规范:遵循 Airbnb 或 Standard 规则集,通过 eslint-config-prettier 解决与 Prettier 的冲突。
性能优化
图片优化:使用 WebP 格式、响应式图片(srcset)、懒加载(loading="lazy")减少首屏加载时间。
资源预加载:通过 <link rel="preload"> 提前加载关键 CSS/JS,利用 prefetch 预取非关键资源。
服务端渲染(SSR):对 SEO 敏感或首屏性能要求高的场景采用 Next.js 等框架实现 SSR。
安全实践
XSS 防护:对用户输入进行转义(如 textContent 替代 innerHTML),使用 CSP(Content Security Policy)限制脚本来源。
CSRF 防御:在表单中添加 csrf_token,或通过 SameSite Cookie 属性限制跨站请求。
JSONP 安全:仅在可信 API 中使用,避免恶意脚本注入。
调试与监控
Source Map:生产环境保留 Source Map 以便调试,但需通过服务器配置限制访问权限。
错误监控:集成 Sentry 等工具捕获前端异常,通过 window.onerror 或 Promise.catch 记录未处理错误。
性能监控:使用 Performance API 测量关键指标(如 FCP、LCP),结合 Lighthouse 生成优化报告。
软技能
代码可维护性:遵循单一职责原则,拆分复杂组件为小函数或子组件,添加清晰的注释和 JSDoc。
版本控制:使用 Git 分支策略(如 Git Flow)管理开发流程,通过 commitlint 规范提交信息。
文档编写:为组件库或工具函数编写使用示例和 API 文档,利用 Storybook 或 Swagger 生成可视化文档。