首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 函数式vs.面向对象:响应未知和不确定
02 | 如何通过闭包对象管理程序中状态的变化?
03 | 如何通过部分应用和柯里化让函数具象化?
04 | 如何通过组合、管道和reducer让函数抽象化?
05|map、reduce和monad如何围绕值进行操作?
06 | 如何通过模块化、异步和观察做到动态加载?
07 | 深入理解对象的私有和静态属性
08|深入理解继承、Delegation和组合
09|面向对象:通过词法作用域和调用点理解this绑定
10|JS有哪8种数据类型,你需要注意什么?
11|通过JS引擎的堆栈了解闭包原理
12|JS语义分析该用迭代还是递归?
13 | JS引擎如何实现数组的稳定排序?
14 | 通过SparkPlug深入了解调用栈
15 | 如何通过哈希查找JS对象内存地址?
16 | 为什么环形队列适合做Node数据流缓存?
17 | 如何通过链表做LRU/LFU缓存?
18 | TurboFan如何用图做JS编译优化?
19 | 通过树和图看如何在无序中找到路径和秩序
20 | 算法思想:JS中分治、贪心、回溯和动态规划
21 | 创建型:为什么说Redux可以替代单例状态管理
22|结构型:Vue.js如何通过代理实现响应式编程
23 | 结构型:通过jQuery看结构型模式
24 | 行为型:通过观察者、迭代器模式看JS异步回调
25 | 行为型:模版、策略和状态模式有什么区别?
26|特殊型:前端有哪些处理加载和渲染的特殊“模式”?
27|性能:如何理解JavaScript中的并行、并发?
28|性能:通过Orinoco、Jank Busters看垃圾回收
29|网络:从HTTP/1到HTTP/3,你都需要了解什么?
30|安全:JS代码和程序都需要注意哪些安全问题?
31|测试(一):开发到重构中的测试
32|测试(二):功能性测试
33|测试(三):非功能性测试
34|静态类型检查:ESLint语法规则和代码风格的检查
35|Flow:通过Flow类看JS的类型检查
36|包管理和分发:通过NPM做包的管理和分发
37|编译和打包:通过Webpack、Babel做编译和打包
38|语法扩展:通过JSX来做语法扩展
39|Polyfill:通过Polyfill让浏览器提供原生支持
40|微前端:从MVC贫血模式到DDD充血模式
41|大前端:通过一云多端搭建跨PC/移动的平台应用
42|元编程:通过Proxies和Reflect赋能元编程
当前位置:
首页>>
技术小册>>
JavaScript进阶实战
小册名称:JavaScript进阶实战
### 26 | 特殊型:前端有哪些处理加载和渲染的特殊“模式”? 在前端开发中,处理加载与渲染的效率直接关系到用户体验的优劣。随着Web应用的日益复杂,开发者们不断探索并实践各种特殊模式以优化页面的加载速度和渲染性能。这些模式不仅涉及代码的组织结构,还包括资源加载策略、异步处理、数据绑定与组件化等多个层面。本章节将深入探讨几种在前端开发中广泛应用的特殊模式,旨在帮助读者更好地理解并应用这些技术来提升Web应用的性能。 #### 1. **懒加载(Lazy Loading)** **概述**: 懒加载是一种常用的优化技术,它允许页面或应用仅在需要时才加载资源(如图片、视频、脚本、样式表等)。这种按需加载的方式可以有效减少初始加载时间,提高页面响应速度,并节省带宽资源。 **实现方式**: - **图片懒加载**:通过JavaScript监听滚动事件,当图片进入视口(viewport)时再加载图片。可以使用`Intersection Observer API`来更高效地实现。 - **代码分割(Code Splitting)**:在构建Web包时,将代码分割成多个小块,用户仅加载当前路由或功能所需的代码块。Webpack、Rollup等现代构建工具支持代码分割。 - **组件懒加载**:在单页面应用(SPA)中,利用Vue、React等框架提供的异步组件功能,实现组件级别的懒加载。 **案例**: 假设一个电商网站首页包含多个商品图片,使用图片懒加载技术,只有当用户滚动到图片位置时,图片才开始从服务器加载,这大大减少了首页的加载时间。 #### 2. **预加载(Preloading)与预读取(Prefetching)** **概述**: 预加载和预读取是两种优化资源加载的技术,它们虽然目的相似,但实现方式和应用场景有所不同。 - **预加载(Preloading)**:明确告诉浏览器哪些资源是即将需要的,浏览器会提前加载这些资源,但不会改变页面的加载顺序。适用于关键资源,如关键CSS文件、JavaScript库等。 - **预读取(Prefetching)**:浏览器在空闲时预测并下载用户可能需要的资源,但不会阻塞当前页面的加载。适用于非关键资源,如未来导航页面的资源。 **实现方式**: - 使用HTML标签`<link rel="preload">`来指定需要预加载的资源。 - 使用`<link rel="prefetch">`来指定可能预读取的资源。 **案例**: 在单页面应用中,当用户访问某个页面时,可以使用`<link rel="prefetch">`来预加载下一个页面的资源,从而缩短用户点击链接后的等待时间。 #### 3. **服务器端渲染(SSR)与客户端渲染(CSR)的混合使用** **概述**: 服务器端渲染(SSR)和客户端渲染(CSR)各有优缺点,现代Web应用常采用两者混合的方式以达到最佳效果。 - **SSR**:页面在服务器端生成HTML,直接发送给浏览器。优点包括首屏加载快、SEO友好;缺点则是服务器压力大,每次请求都需重新渲染。 - **CSR**:页面在客户端通过JavaScript动态生成HTML。优点包括用户体验流畅、交互性强;缺点则是首屏加载可能较慢,SEO需额外处理。 **混合模式**: - **同构应用(Isomorphic/Universal Rendering)**:使用React、Vue等框架开发的应用,可以在服务器和客户端共享同一套代码。服务器先渲染出首屏,客户端接管后继续渲染后续内容。 - **SSR + CSR Hybrid**:部分页面采用SSR以保证首屏速度和SEO,其他页面或页面部分采用CSR以提供更好的用户体验。 **案例**: 一个新闻网站的首页使用SSR渲染,确保用户能立即看到最新新闻,而新闻详情页则采用CSR,允许用户在不重新加载页面的情况下进行评论、点赞等操作。 #### 4. **增量更新(Incremental Rendering)与骨架屏(Skeleton Screens)** **增量更新**: 增量更新是指在页面加载过程中,逐步渲染页面的各个部分,而不是一次性渲染整个页面。这可以减少用户等待的感知时间,提升用户体验。 **骨架屏**: 骨架屏是一种占位符技术,用于在内容加载完成前显示一个大致的页面结构,让用户知道页面正在加载中,并给出内容的预期形状。 **实现方式**: - 使用CSS和JavaScript结合,先渲染一个轻量级的骨架屏,然后逐步替换为真实内容。 - 在现代前端框架中,如React,可以利用React Suspense和React Lazy来实现组件级别的增量加载和错误边界处理。 **案例**: 一个社交媒体应用,在用户滚动查看更多帖子时,每加载一批新帖子,先显示一个简化的帖子骨架屏,然后逐步填充图片、文字等实际内容。 #### 5. **虚拟滚动(Virtual Scrolling)** **概述**: 虚拟滚动是一种技术,它只渲染可视区域内的DOM元素,当用户滚动时动态加载和卸载屏幕外的元素。这种技术可以极大地减少DOM的数量,提高长列表或大数据量渲染的性能。 **实现方式**: - 监听滚动事件,计算哪些元素应该被渲染。 - 使用CSS来隐藏不可见元素,或者使用JavaScript来动态创建和销毁DOM节点。 - 现代前端框架如React提供了虚拟列表组件(如`react-window`、`react-virtualized`),可以更方便地实现虚拟滚动。 **案例**: 一个拥有成千上万条记录的消息列表,使用虚拟滚动技术,即使数据量巨大,也能保持流畅的滚动体验。 #### 总结 前端处理加载和渲染的特殊模式多种多样,每种模式都有其适用场景和优缺点。开发者应根据具体的应用需求、用户体验目标以及技术栈选择合适的模式。通过综合运用懒加载、预加载、混合渲染、增量更新、骨架屏和虚拟滚动等技术,可以显著提升Web应用的性能和用户体验。随着前端技术的不断发展,新的模式和工具不断涌现,持续关注并实践这些新技术,将有助于我们构建更快、更流畅、更用户友好的Web应用。
上一篇:
25 | 行为型:模版、策略和状态模式有什么区别?
下一篇:
27|性能:如何理解JavaScript中的并行、并发?
该分类下的相关小册推荐:
npm script实战构建前端工作流
ES6入门指南
WebSocket入门与案例实战
JavaScript面试指南
JavaScript入门与进阶
javascript设计模式原理与实战
编程入门课:Javascript从入门到实战
web前端开发性能优化实战
深入学习前端重构知识体系
剑指javascript
Node.js 开发实战
经典设计模式Javascript版