编辑推荐
1.介绍新的响应式解决方案。
2.深入浅出,从基础触发,逐步引入更高阶技术。
3.注重实战,将知识运用到实践中,解决正在遇见或者即将遇见的问题。
4.知其然并知其所以然,了解技术的前生今世;开拓思维,挖掘更多的解决方案。
内容简介
响应式Web设计的理念是让页面根据用户行为以及设备环境(屏幕尺寸、分辨率等)进行相应的响应和调整。响应式网页设计就是一个网站能够兼容多种终端,而不是为每种终端做一个特定的版本。
本书分为两部分,首部分是前端的基本响应式技术,涉及响应式布局、图片的处理、解决问题的思路以及一些进阶的技巧等;第二部分在以上内容的基础上,加入了对页面进行性能调优的内容,包括如何确立性能指标,如何使用不同的工具衡量性能,以及如何解决常规的性能问题等。
本书适合有兴趣学习响应式技术的前端从业人员和其他相关人员阅读。
作者简介
李光毅 曾就职于爱奇艺,现任百度高级前端工程师,主要负责前端Web 产品开发, 以及后端Node.js 框架维护。 在HTML、JavaScript 等前端技术方面略有心得,喜欢对Web 性能吹毛求疵,同时也对ASP.NET、MongoDB、Python 等技术有着浓厚的兴趣。业余时间曾经喜欢折腾硬件编程,如Kinect for Windows、Leap Motion 等,现在爱好使用Unity 写游戏。热爱前端,乐于分享。
目录
第1章 概述及任务介绍 1
1.1 为什么需要响应式设计 1
1.1.1 产品形态需要 1
1.1.2 性能与商业考虑 3
1.2 本书的线索 3
1.3 写作思路 4
1.4 定义响应式 5
1.5 本书任务 6
第2章 响应式中要面对的问题 9
2.1 像素密度 9
2.2 CSS像素 14
2.3 视口 17
2.3.1 桌面浏览器的视口 17
2.3.2 移动设备浏览器的视口 18
2.3.3 设备宽度 20
小结 21
第3章 布局 23
3.1 写在编码前的话 23
3.1.1 写出好的代码 24
3.1.2 代码的浏览器适配问题 25
3.1.3 仰望星空与脚踏实地 26
3.2 全局样式 27
3.3 无懈可击的导航栏 30
3.3.1 桌面端 30
3.3.2 移动端导航栏 37
小结 40
第4章 布局——响应式篇 41
4.1 媒体查询 41
4.1.1 为什么需要媒体查询 41
4.1.2 什么是媒体查询 44
4.1.3 媒体查询中的逻辑 45
4.1.4 媒体查询的策略 46
4.1.5 导航栏与媒体查询 51
4.1.6 polyfill 56
4.2 伸缩布局 58
4.2.1 为什么需要伸缩布局 58
4.2.2 快速入门 58
4.2.3 基本应用 60
4.2.4 回归导航栏flexbox.css 62
4.3 相对单位 63
4.3.1 相对单位em 65
4.3.2 相对单位rem 67
4.3.3 如何使用这几种单位 68
4.4 标题布局 70
4.4.1 背景 71
4.4.2 文字居中 73
4.5 响应式文字 79
4.5.1 标题 79
4.5.2 正文内容 83
小结 89
第5章 响应式图片 91
5.1 万能的100% 91
5.2 响应式图用例 93
5.3 srcset语法 96
5.3.1 移动优先或桌面优先 97
5.3.2 计划赶不上变化 98
5.3.3 家长式管理 99
5.4
元素 99
5.4.1 sizes 99
5.4.2 元素和元素 102
5.4.3 polyfill 105
5.4.4 元素的未来 105
5.5 放弃图片 105
5.5.1 事实上我们并不需要图片 105
5.5.2 数据 URI 105
5.5.3 CSS形状 107
5.5.4 图标字体 110
5.6 后端方案 118
5.6.1 前端配置 118
5.6.2 后端配置 119
5.6.3 注意 119
5.7 优化标题的背景图片 120
5.7.1 image-set 120
5.7.2 渐进式图片 120
5.7.3 媒体查询 122
5.7.4 无需图片 123
小结 124
第6章 脚本与性能:入门篇 125
6.1 为何要选择脚本 125
6.2 为何要谈性能 126
6.3 如何衡量性能 126
6.3.1 页面加载时间 127
6.3.2 速度指数—加载时间并非万能 129
6.3.3 帧数 133
6.3.4 工具与测试 136
6.4 传统脚本的性能优化指南 147
6.4.1 懒加载初级版本 147
6.4.2 优化点1:滚动事件的回调函数 153
6.4.3 优化点2:重绘与回流 157
6.4.4 优化点3:选择器 161
小结 163
第7章 脚本与性能:提高篇 165
7.1 避免脚本 165
7.1.1 样式实现 166
7.1.2 脚本实现 168
7.1.3 回到导航栏 170
7.2 封装与加载器 175
7.3 性能优化思路 181
7.4 后端能做什么 185
7.4.1 RESS 185
7.4.2 其他 187
小结 187
第8章 工程问题 189
8.1 安装Node.js 189
8.2 Bower 192
8.2.1 什么是Bower 192
8.2.2 安装Bower 193
8.2.3 使用Bower 194
8.2.4 进阶使用 195
8.3 Grunt 198
8.3.1 什么是Grunt 198
8.3.2 安装Grunt 198
8.3.3 使用Grunt 199
8.4 Yeoman 203
8.4.1 什么是Yeoman 203
8.4.2 安装Yeoman 204
8.4.3 生成项目 205
小结 206
后记 207 前言/序言
《高效能前端架构:从设计到落地》 简介: 在这个信息爆炸、用户期待瞬息万变的时代,Web应用的性能与响应能力已不再是锦上添花,而是决定成败的关键要素。当用户每一次点击、每一次滑动都可能成为流失的导火索,当竞争对手的产品以丝滑的体验脱颖而出,构建一个既能快速响应用户需求,又能轻松应对复杂业务场景的前端架构,就成为每一位开发者必须面对的挑战。 《高效能前端架构:从设计到落地》并非一本简单罗列技术框架的“速成宝典”,而是深入剖析现代Web应用为何会“慢”的根源,并系统性地构建一套贯穿项目生命周期的、可落地的高效能前端架构体系。本书从前端性能的多个维度出发,结合大量真实案例和行业最佳实践,为读者提供一套清晰、系统且实用的解决方案,帮助开发者们摆脱性能瓶颈的困扰,打造出用户喜爱、业务驱动的卓越Web产品。 本书内容概要: 第一部分:深度洞察性能瓶颈,理解高效能的基石 在构建高效能架构之前,我们必须首先理解“慢”的本质。本部分将带领读者深入剖析影响Web应用性能的各项核心因素,并非泛泛而谈,而是层层剥茧,直击要害: 浏览器渲染机制的深度解析: 我们将抛开表面的HTML、CSS、JavaScript,深入到浏览器内部,详细讲解渲染树的构建、布局计算、绘制过程以及关键渲染路径。理解这些底层机制,是优化性能的“知其然”与“知其所以然”的关键。我们将探讨JavaScript执行对渲染的影响,CSS的解析与计算复杂度,以及如何在满足视觉需求的同时,尽量减少重排(Layout)和重绘(Repaint)的发生,从而有效缩短页面加载时间,提升交互流畅度。 网络请求的“隐形杀手”: 网络是Web应用性能的命脉。本部分将剖析HTTP/HTTPS协议的演进,从HTTP/1.x的头部冗余、多连接瓶颈,到HTTP/2的多路复用、头部压缩,再到HTTP/3的QUIC协议带来的突破性进展,逐一分析其对性能的影响。我们将深入讲解DNS解析、TCP握手、SSL/TLS握手的开销,以及如何通过CDN、预连接、HTTP/2 Server Push等技术来大幅缩减网络往返时间(RTT)。同时,还会探讨资源加载策略,如按需加载、懒加载、预加载等,如何在保障用户体验的前提下,最大化利用网络带宽。 JavaScript执行效率与内存管理: JavaScript作为前端的核心,其执行效率和内存占用直接影响着应用的响应速度和稳定性。本部分将深入分析JavaScript的事件循环机制(Event Loop),理解同步、异步任务的执行顺序,以及宏任务与微任务的区别。我们将探讨如何编写高性能的JavaScript代码,避免阻塞主线程,识别并解决内存泄漏问题,以及JavaScript引擎的优化原理,例如JIT编译、V8引擎的垃圾回收机制等。 资源优化与打包策略: 静态资源,如图片、CSS、JavaScript文件,是构成Web应用的基础。本部分将详细讲解各种资源优化的策略。对于图片,我们将深入探讨不同的格式(JPEG, PNG, WebP, AVIF)及其适用场景,以及如何进行有损与无损压缩,实现“轻量级”的图片加载。对于CSS和JavaScript,我们将详细讲解代码的压缩、合并、拆分,以及Tree Shaking、Scope Hoisting等高级打包技术,如何通过Webpack、Rollup等工具,实现按需打包、代码分割,减少首屏加载的资源总量。 第二部分:构建健壮高效的前端架构体系 理解了性能瓶颈,接下来的核心任务便是如何构建一个能够从根本上解决这些问题的架构。本书将为您勾勒出高效能前端架构的设计蓝图: 模块化与组件化设计哲学: 良好的模块化和组件化是提升代码可维护性、可复用性和可扩展性的基石。本部分将深入探讨不同的模块化方案(CommonJS, AMD, ES Modules),并重点讲解如何运用组件化思想,将复杂的UI拆解成独立、可组合的单元。我们将讨论如何设计高内聚、低耦合的组件,以及组件之间的通信模式,如何利用Vue的Slots、React的Composition API等技术,构建灵活且易于维护的组件库。 响应式设计在架构层面的考量: 响应式设计早已超越了简单的媒体查询。本部分将探讨如何在架构层面实现真正的响应式。从数据层面到视图层,如何设计能够适应不同屏幕尺寸、不同设备的用户界面。我们将讨论响应式布局的多种实现方式,以及如何结合CSS的Grid、Flexbox等特性,实现优雅的响应式过渡。更重要的是,我们将探讨在JavaScript层面,如何基于设备的特性(如屏幕尺寸、像素密度、网络状况)动态调整资源加载、UI渲染策略,实现真正的“按需响应”。 状态管理的新思路与实践: 复杂应用的状态管理是前端架构中的一大挑战。本部分将超越Redux、Vuex等经典模式,探讨更灵活、更高效的状态管理策略。我们将分析不同状态的生命周期,例如全局状态、局部状态、路由状态、服务端状态。重点讲解Hooks、Context API在React中的应用,以及Pinia、 Zustand等新兴的状态管理库的优势。我们将通过实际案例,演示如何根据业务场景选择最适合的状态管理方案,避免状态膨胀和数据同步的混乱。 工程化提效:从脚手架到自动化部署: 高效能的前端架构离不开强大的工程化支撑。本部分将系统性地梳理前端工程化的关键环节。从自定义脚手架的搭建,到自动化测试(单元测试、集成测试、端到端测试)的引入,再到CI/CD流程的构建,我们将逐一讲解如何通过工具链的优化,提升开发效率,保障代码质量,并实现快速、可靠的部署。我们将深入探讨Webpack、Vite等构建工具的配置技巧,以及Linting、Code Formatting等代码规范工具的重要性,如何构建一套“开箱即用”且高度可定制化的开发环境。 第三部分:面向未来的性能优化与架构演进 Web技术日新月异,保持对未来趋势的敏锐洞察,并能将新技术融入现有架构,是保持高效能的关键。 WebAssembly:突破JavaScript性能边界: WebAssembly(Wasm)的出现为Web带来了前所未有的性能潜力。本部分将深入介绍WebAssembly的核心概念,它如何与JavaScript协同工作,以及在哪些场景下可以发挥其最大优势,例如计算密集型任务、图像处理、游戏引擎等。我们将探讨如何将C/C++/Rust等语言编译成WebAssembly,并将其集成到现有Web应用中,从而实现突破JavaScript性能瓶颈。 服务端渲染(SSR)与静态站点生成(SSG)的权衡与应用: 本部分将详细阐述服务端渲染(SSR)和静态站点生成(SSG)的核心原理,以及它们各自的优缺点。我们将分析在SEO优化、首屏加载速度、用户体验等方面,SSR和SSG能带来的显著提升。通过对比Next.js, Nuxt.js, Astro等框架的实践,读者将能理解如何根据业务需求,灵活选择最适合的渲染策略,甚至混合使用,以达到最佳的性能和用户体验。 微前端架构的探索与实践: 随着项目规模的不断扩大,单体前端应用的维护成本也随之增加。本部分将深入介绍微前端的概念,它如何将一个大型前端应用拆解成多个独立、可独立开发、部署的子应用。我们将探讨不同的微前端实现方案,例如基于iframe、基于Web Components、基于JavaScript沙箱等,并分析其在技术选型、路由管理、状态隔离、性能优化等方面的挑战与解决方案。 数据预取与预渲染:极致的用户体验: 为了进一步提升用户体验,本部分将探讨数据预取(Data Fetching)和预渲染(Prefetching)的高级技术。我们将分析如何通过智能的数据预取策略,在用户可能需要之前就加载好所需数据,从而消除等待。同时,将深入讲解如何利用预渲染技术,在首屏加载时就渲染好部分关键内容,甚至生成静态HTML,极大地提升页面的可感知加载速度。 《高效能前端架构:从设计到落地》以其深度、广度和落地性,旨在成为您在构建高性能Web应用过程中的一位得力助手。无论您是初涉前端领域的新手,还是经验丰富的资深开发者,本书都将为您提供宝贵的启示和实用的工具,帮助您打造出既能满足当前业务需求,又能从容应对未来挑战的卓越前端系统。
这本书就像是一本武林秘籍,但它不是那种虚无缥缈的理论,而是充满了招式和内功心法,并且都是经过实战检验的。作为一个长期在前端一线摸爬滚打的开发者,我深知“高性能”和“响应式”这两个词的重量,也明白其中蕴含的挑战。这本书用一种非常直观和易于理解的方式,将这些复杂的概念拆解开来,并且提供了大量可供参考的实际案例。我特别喜欢其中关于服务器端渲染(SSR)和静态站点生成(SSG)的章节,这部分内容对于提升页面的首屏加载速度和SEO优化非常有帮助。作者在讲解的时候,并没有仅仅停留在框架的使用层面,而是深入探讨了它们在性能方面的优势和劣势,以及如何根据项目需求做出最佳选择。我之前也尝试过引入SSR,但总是感觉有些摸不着头绪,读完这本书,我对SSR的工作流程和关键配置有了清晰的认识,也理解了为什么它能在某些场景下带来巨大的性能提升。此外,书中关于资源预加载和预连接的讨论,也让我受益匪浅。我之前总是忽视这些细节,但事实证明,这些小的优化能够积少成多,对整体性能产生显著影响。这本书的语言风格非常朴实,没有华丽的辞藻,但字里行间都透露着作者深厚的功力和丰富的经验。我感觉自己就像是在和一位经验丰富的同行交流,收获良多。