具体描述
				
				
					产品特色
        编辑推荐
                                      《JavaScript Web应用开发》介绍了用于提升软件质量和改进开发流程的技术:首先教你如何制定能优化产品质量的过程,制定好过程后,每次修改代码后都会执行一些任务,每次提交后都会运行测试,还能自动部署;其次集中介绍如何设计模块化的组件,以及如何使用这些组件构建稳定的应用。内容包括自动化开发、测试和部署过程;JavaScript基础知识和模块化实践;开发模块化、可维护且经过良好测试的应用;掌握异步流程,理解MVC模式,设计REST API。       
内容简介
     《JavaScript Web应用开发》是面向一线开发人员的一本实用教程,对新的Web开发技术与程序进行了全面的梳理和总结,为JavaScript开发人员提供了改进Web开发质量和开发流程的新技术。本书主要分两大块,首先是以构建为目标实现JavaScript驱动开发,其次介绍如何管理应用设计过程中的复杂度,包括模块化、MVC、异步代码流、测试以及API设计原则。      
作者简介
     Nicolas Bevacqua,是JavaScript开源社区的活跃成员,自由Web开发者,关注模块化JavaScript、构建过程和新锐设计理念,偶尔进行公开演讲,还是一名充满激情的作家。他维护着多个开源项目,还开设了一个博客,发表关于Web、性能、渐进增强和JavaScript开发相关的文章,地址是ponyfoo.com。Nico现在和他的女友玛丽安一起生活在阿根廷布宜诺斯艾利斯。      
内页插图
          精彩书评
     “享受这段改进开发流程的旅程吧。” 
  ——Addy Osmani,就职于谷歌  
  “JavaScript开发者必读的一本书!” 
  ——Stephen Wakely,就职于汤森路透公司  
  “现代JavaScript生态系统这一迷宫的指南。” 
  ——Jonas Bandi,就职于IvoryCode GmbH      
目录
   第一部分 构建过程 
第1章 构建优先  2 
1.1 问题出现了  2 
1.1.1 45分钟内每秒损失17万美元  3 
1.1.2 构建优先  3 
1.1.3 繁琐的前戏  4 
1.2 遵守构建优先原则,提前计划  5 
1.3 构建过程  7 
1.4 处理应用的复杂度和设计理念  8 
1.5 钻研构建优先原则  12 
1.5.1 检查代码质量  12 
1.5.2 在命令行中使用lint工具  15 
1.6 总结  18 
第2章 编写构建任务,制定流程  19 
2.1 介绍Grunt  20 
2.1.1 安装Grunt  21 
2.1.2 设置第一个Grunt任务  23 
2.1.3 使用Grunt管理构建过程  24 
2.2 预处理和静态资源优化  26 
2.2.1 详述预处理  26 
2.2.2 处理LESS  28 
2.2.3 打包静态资源  31 
2.2.4 简化静态资源  32 
2.2.5 创建子图集  34 
2.3 检查代码完整性  36 
2.3.1 清理工作目录  36 
2.3.2 使用lint程序检查代码  37 
2.3.3 自动运行单元测试  38 
2.4 首次自己编写构建任务  38 
2.5 案例分析:数据库任务  39 
2.6 总结  41 
第3章 精通环境配置和开发流程  42 
3.1 应用的环境  42 
3.1.1 配置构建模式  43 
3.1.2 环境层面的配置  47 
3.1.3 开发环境有什么特别之处  48 
3.2 配置环境  48 
3.2.1 瀑布式存储配置的方法  49 
3.2.2 通过加密增强环境配置的安全性  50 
3.2.3 使用系统级方式设置环境层面的配置  52 
3.2.4 在代码中使用瀑布式方法合并配置  53 
3.3 自动执行繁琐的首次设置任务  54 
3.4 在持续开发环境中工作  54 
3.4.1 监视变动,争分夺秒  55 
3.4.2 监视Node应用的变动  56 
3.4.3 选择一款合适的文本编辑器  57 
3.4.4 手动刷新浏览器已经过时了  58 
3.5 总结  58 
第4章 发布、部署和监控  59 
4.1 发布应用  60 
4.1.1 优化图像  60 
4.1.2 缓存静态资源  62 
4.1.3 内嵌对首屏至关重要的CSS  64 
4.1.4 部署前要测试  65 
4.2 预部署操作  65 
4.2.1 语义化版本  66 
4.2.2 使用更改日志  67 
4.2.3 提升版本号时提交更改日志  67 
4.3 部署到Heroku  68 
4.3.1 在Heroku的服务器中构建  70 
4.3.2 管理多个环境  71 
4.4 持续集成  71 
4.4.1 使用Travis托管的CI  72 
4.4.2 持续部署  73 
4.5 监控和诊断  74 
4.5.1 日志和通知  74 
4.5.2 调试Node应用  76 
4.5.3 分析性能  78 
4.5.4 运行时间和进程管理  78 
4.6 总结  79 
第二部分 管理复杂度 
第5章 理解模块化和依赖管理  82 
5.1 封装代码  83 
5.1.1 理解单一职责原则  84 
5.1.2 信息隐藏和接口  86 
5.1.3 作用域和this关键字  87 
5.1.4 严格模式  90 
5.1.5 提升变量的作用域  91 
5.2 JavaScript模块  92 
5.2.1 闭包和模块模式  92 
5.2.2 原型的模块化  93 
5.2.3 CommonJS模块  94 
5.3 管理依赖  95 
5.3.1 依赖图  95 
5.3.2 介绍RequireJS  98 
5.3.3 Browserify:在浏览器中使用CJS 模块  100 
5.3.4 Angular管理依赖的方式  100 
5.4 理解包管理  102 
5.4.1 Bower 简介  103 
5.4.2 大型库,小组件  104 
5.4.3 选择合适的模块系统  105 
5.4.4 学习循环依赖  105 
5.5 ECMAScript 6新功能简介  106 
5.5.1 在Grunt任务中使用Traceur  107 
5.5.2 Harmony中的模块  107 
5.5.3 创建块级作用域的let关键字  108 
5.6 总结  109 
第6章 理解JavaScript中的异步流程控制方法  110 
6.1 使用回调  110 
6.1.1 跳出回调之坑  111 
6.1.2 解开混乱的回调  112 
6.1.3 嵌套请求  114 
6.1.4 处理异步流程中的错误  116 
6.2 使用async库  119 
6.2.1 使用瀑布式、串行还是并行  119 
6.2.2 异步函数式任务  123 
6.2.3 异步任务队列  124 
6.2.4 制定流程和动态流程  125 
6.3 使用Promise对象  127 
6.3.1 Promise对象基础知识  127 
6.3.2 链接Promise对象  130 
6.3.3 控制流程  132 
6.3.4 处理被拒绝的Promise对象  133 
6.4 理解事件  134 
6.4.1 事件和DOM  134 
6.4.2 自己实现事件发射器  135 
6.5 展望:ES6生成器  138 
6.5.1 创建第一个生成器  138 
6.5.2 生成器的异步性  140 
6.6 总结  141 
第7章 使用模型-视图-控制器模式  142 
7.1 jQuery力不胜任  142 
7.2 在JavaScript中使用MVC模式  145 
7.2.1 为什么使用Backbone  146 
7.2.2 安装Backbone  147 
7.2.3 使用Grunt和Browserify编译Backbone模块  147 
7.3 介绍Backbone   148 
7.3.1 Backbone视图  149 
7.3.2 创建Backbone模型  152 
7.3.3 使用Backbone集合组织模型  154 
7.3.4 添加Backbone路由器  155 
7.4 案例分析:购物清单  157 
7.4.1 从静态购物清单开始  157 
7.4.2 添加删除按钮  159 
7.4.3 把物品添加到购物车中  161 
7.4.4 实现行内编辑  164 
7.4.5 服务层和视图路由  170 
7.5 Backbone和Rendr:服务器和客户端共享渲染  172 
7.5.1 Rendr简介  172 
7.5.2 理解Rendr 的样板代码  174 
7.5.3 一个简单的Rendr应用  176 
7.6 总结  182 
第8章 测试JavaScript组件  184 
8.1 JavaScript测试速成课  185 
8.1.1 隔离逻辑单元  185 
8.1.2 使用TAP  186 
8.1.3 编写第一个单元测试  186 
8.1.4 在浏览器中运行使用Tape编写的测试  187 
8.1.5 筹备、行动和断言  188 
8.1.6 单元测试  188 
8.1.7 便利性优于约定  189 
8.1.8 案例分析:为事件发射器编写单元测试  189 
8.1.9 测试事件发射器  190 
8.1.10 测试.on方法  192 
8.1.11 驭件、侦件和代理  193 
8.1.12 模拟  194 
8.1.13 介绍Sinon.js  195 
8.1.14 监视函数的调用情况  195 
8.1.15 代理require调用  196 
8.2 在浏览器中测试  198 
8.2.1 伪造XHR请求和服务器响应  198 
8.2.2 案例分析:测试DOM交互  200 
8.3 案例分析:为使用MVC模式开发的购物清单编写单元测试  209 
8.3.1 测试视图路由器  209 
8.3.2 测试视图模型的验证  214 
8.4 自动运行Tape测试  216 
8.4.1 自动运行浏览器中的Tape测试  217 
8.4.2 持续测试  218 
8.5 集成测试、外观测试和性能测试  218 
8.5.1 集成测试  219 
8.5.2 外观测试  219 
8.5.3 性能测试  220 
8.6 总结  221 
第9章 REST API设计和分层服务架构  222 
9.1 规避API设计误区  222 
9.2 学习REST API设计  223 
9.2.1 端点、HTTP方法和版本  224 
9.2.2 请求、响应和状态码  227 
9.2.3 分页、缓存和限流  229 
9.2.4 为API编写文档  231 
9.3 实现分层服务架构  232 
9.3.1 路由层  233 
9.3.2 服务层  233 
9.3.3 数据层  234 
9.3.4 路由层  234 
9.3.5 服务层  234 
9.3.6 数据层  235 
9.4 在客户端使用REST API  235 
9.4.1 请求处理层  236 
9.4.2 中止旧请求  236 
9.4.3 使用一致的方式处理AJAX错误  237 
9.5 总结  238 
附录A Node.js的模块  240 
附录B 介绍Grunt  242 
附录C 选择合适的构建工具  249 
附录D JavaScript代码质量指南  257       
前言/序言
       
				 
				
				
					《前端架构师之路:从理论到实践的精进之道》  这是一本关于如何构建、维护和演进复杂前端应用的书。 它不仅仅是一份技术手册,更是一份通往资深前端开发者的思维指南。在如今瞬息万变的技术浪潮中,前端开发早已不再是简单的页面搭建,而是上升到了架构设计、性能优化、可维护性、团队协作以及技术选型的战略层面。本书将带领读者深入剖析前端架构的核心要素,帮助开发者从“码农”蜕变为能够引领技术方向的“架构师”。  第一部分:夯实基础,理解架构的基石  在深入探讨架构之前,我们必须对构成前端应用的基本单元和与之相关的底层原理有深刻的理解。这一部分将带领读者重温那些看似基础,实则至关重要的知识点,并从架构的视角去重新审视它们。     精通 JavaScript 生态:        现代 JavaScript 深度剖析: 逃离 ECMAScript 的表面,深入理解事件循环、闭包、原型链、模块化(CommonJS, ES Modules, AMD)的底层机制,以及它们的性能影响。掌握 Promise, async/await 的异步编程模式,以及 Generator 的高级用法,为构建可预测、高效的异步系统奠定基础。        TypeScript 的架构价值: 学习如何利用 TypeScript 的强类型特性,在开发早期捕获潜在错误,提升代码的可读性和可维护性。深入理解泛型、装饰器、条件类型等高级特性,以及如何将其应用于构建大型、健壮的项目。        npm/Yarn 包管理与模块化策略: 不止于安装依赖,更要理解模块解析、版本冲突解决、锁文件(lock file)的原理,以及如何设计和发布可复用的 npm 包。探讨 monorepo(多包仓库)的优势与挑战,以及在大型项目中的应用。     理解浏览器渲染原理:        从 HTML 到像素的旅程: 深入剖析 DOM 解析、CSS 解析、样式计算、布局(Layout/Reflow)、绘制(Paint/Repaint)、合成(Composite)等关键渲染阶段。理解浏览器是如何将代码转化为用户可见界面的,并从中提炼出优化性能的切入点。        JavaScript 对渲染的影响: 探讨 JavaScript 在渲染过程中扮演的角色,理解同步脚本、异步脚本、defer、async 的加载和执行时机,以及它们如何影响页面的首次加载时间和用户交互体验。        关键渲染路径优化: 学习如何通过减少 DOM 节点、优化 CSS 选择器、使用 CSSOM 和 DOM 的高效组合、延迟非关键资源的加载等策略,缩短页面的“白屏”时间,提升用户感知性能。     掌握网络通信与协议:        HTTP/2 和 HTTP/3 的新特性: 理解 HTTP/2 的多路复用、头部压缩、服务器推送等特性如何改善低延迟和高并发场景下的性能。初步了解 HTTP/3 在 QUIC 协议上的改进,以及其对实时通信的潜力。        RESTful API 设计原则: 学习如何设计规范、易于理解和维护的 RESTful API,包括资源命名、HTTP 方法的使用、状态码的含义、请求与响应的格式等。        GraphQL 的优势与适用场景: 探索 GraphQL 相对于 REST 的灵活性,理解其查询语言、类型系统和 resolver 的设计,以及在需要灵活数据获取的前端应用中的应用。  第二部分:前端架构设计,构建可扩展的系统  拥有坚实的基础后,我们将进入前端架构的核心领域。这一部分将聚焦于如何设计出健壮、灵活、易于维护和扩展的前端系统。     模块化与组件化设计:        超越基础的组件化: 深入探讨组件的生命周期、props/state 管理、事件处理、插槽(slots)和上下文(context)的使用,以及如何设计具有良好封装性、可组合性和可复用性的组件。        设计模式在前端的应用: 学习并实践如观察者模式、工厂模式、单例模式、高阶组件(HOC)、渲染属性(Render Props)等常见设计模式,并理解它们在解决特定前端问题时的优雅之处。        UI 库与设计系统的构建: 了解如何构建或使用一套统一的 UI 库和设计系统,以实现代码的复用、设计的一致性,并提升团队协作效率。     状态管理策略:        从局部状态到全局状态: 学习 Redux、Vuex、MobX 等主流状态管理库的设计理念和核心概念,理解其在处理复杂应用状态时的优势。        React Context API 的高级用法: 探索如何有效地利用 React 的 Context API 来管理应用状态,并了解其与 Redux 等库的权衡。        GraphQL 与状态管理: 学习如何结合 GraphQL 客户端(如 Apollo Client, Relay)来管理服务端数据,并将其与本地状态管理相结合。        状态管理的最佳实践: 探讨如何组织和划分状态、避免状态膨胀、以及如何进行状态的持久化和同步。     路由与导航架构:        声明式路由与编程式路由: 掌握 React Router, Vue Router 等路由库的使用,理解声明式路由的声明性和编程式路由的灵活性。        嵌套路由与动态路由: 学习如何设计复杂的嵌套路由结构,以及如何处理带有参数的动态路由。        导航守卫与权限控制: 探讨如何实现路由的导航守卫,以进行身份验证、权限校验、页面跳转前的预处理等。        服务端渲染 (SSR) 与路由: 理解 SSR 对路由的特殊要求,以及如何配置和实现 SSR 下的路由。     数据获取与 API 交互:        Ajax 的进化: 回顾并深入理解 Fetch API 的强大之处,以及如何利用它进行高效的网络请求。        HTTP 缓存策略: 学习并应用 HTTP 缓存机制,如 ETag, Last-Modified, Cache-Control 等,以减少服务器负载,提升页面加载速度。        API 封装与抽象: 学习如何将复杂的 API 调用封装成易于使用的服务层,并实现请求的拦截、响应的处理、错误处理等。        GraphQL 数据获取: 深入理解 GraphQL 查询的构建、变量的使用、以及错误处理机制。  第三部分:性能优化与工程化实践  一个优秀的架构不仅要功能强大,更要高效、稳定。这一部分将聚焦于如何通过各种手段来提升前端应用的性能,并采用现代化的工程化手段来保障开发效率和代码质量。     前端性能优化深度探索:        资源优化: 代码分割(Code Splitting)、懒加载(Lazy Loading)、图片优化(格式、尺寸、懒加载)、字体优化、CSS 优化(关键 CSS、去冗余)等。        渲染性能优化: 虚拟滚动(Virtual Scrolling)、列表性能优化、DOM 操作的最小化、Canvas 与 WebGL 的应用场景。        网络性能优化: CDN 的使用、HTTP 压缩、预加载(Preload)、预连接(Preconnect)。        打包与构建优化: Webpack, Rollup, Vite 等打包工具的深入配置,理解 tree shaking, scope hoisting, DllPlugin 等优化手段。     构建工具与模块打包:        Webpack 核心概念与高级配置: Entry, Output, Loaders, Plugins, Mode, Optimization 等核心概念的深入理解,以及如何配置自定义 Loader 和 Plugin。        Rollup 的优势与适用场景: 学习 Rollup 在打包库和 ES Module 上的优势,以及其配置方法。        Vite 的快速开发体验: 理解 Vite 基于 ES Modules 的原生支持,以及其极快的冷启动和热更新速度。        构建流程的自动化: 学习如何集成 Linting (ESLint, Stylelint), Formatting (Prettier), Testing (Jest, Vitest) 到构建流程中。     自动化测试与质量保障:        单元测试: 学习使用 Jest, Vitest 等框架编写针对组件、函数、服务等的单元测试。        集成测试: 理解集成测试在验证组件之间交互和整体功能方面的作用。        端到端 (E2E) 测试: 掌握 Cypress, Playwright 等工具,编写模拟用户行为的 E2E 测试。        测试驱动开发 (TDD) 与行为驱动开发 (BDD): 探讨 TDD 和 BDD 的开发理念,以及它们如何提升代码质量和可维护性。     代码质量管理与规范:        Linting 与 Formatting: 深入理解 ESLint, Stylelint, Prettier 的配置与使用,以及如何建立统一的代码风格规范。        Git 版本控制与协作: 掌握 Git 的高级命令,理解分支策略(如 Git Flow)、Code Review 的流程,以及如何高效地进行团队协作。        CI/CD 持续集成/持续部署: 学习如何使用 Jenkins, GitHub Actions, GitLab CI 等工具,实现代码的自动化构建、测试和部署。  第四部分:前端架构演进与未来趋势  技术是不断发展的,前端架构也需要与时俱进。这一部分将探讨前端架构的演进方向,以及未来可能的发展趋势。     微前端架构:        解决单体应用的痛点: 理解微前端的概念,以及它如何解决大型单体前端应用在团队协作、技术栈选择、独立部署等方面的挑战。        主流微前端方案: 学习qiankun, single-spa 等主流微前端框架的设计原理、实现方式和应用场景。        微前端的挑战与权衡: 探讨微前端在通信、状态共享、路由、性能等方面带来的新问题,以及如何进行权衡。     服务端渲染 (SSR) 与静态站点生成 (SSG):        SSR 的优势与挑战: 理解 SSR 如何提升 SEO 和首屏加载速度,并学习 Next.js, Nuxt.js 等框架的 SSR 实现。        SSG 的应用场景: 探讨 SSG 在博客、文档、产品展示等内容型网站上的优势,以及像 Gatsby, Astro 等框架的应用。        混合渲染模式: 理解 ISR (Incremental Static Regeneration) 等混合渲染模式,以及如何结合 SSR 和 SSG 的优势。     WebAssembly (Wasm) 的潜力:        Wasm 的概念与优势: 了解 WebAssembly 的设计理念,以及它在提升性能、运行原生代码方面的潜力。        Wasm 在前端的应用场景: 探索 Wasm 在图形图像处理、音视频编解码、游戏开发、复杂计算等领域的应用。     低代码/无代码平台与前端架构:        理解低代码/无代码的演进: 探讨低代码/无代码平台对传统前端开发模式的影响。        架构师在低代码时代的定位: 思考架构师如何设计更灵活、可扩展的低代码平台,以及如何与低代码开发者协作。     跨平台开发与前端的融合:        React Native, Flutter, Electron: 了解这些跨平台框架在移动端和桌面端的应用,以及它们与 Web 端技术栈的融合。        Web 技术向其他平台的延伸: 探讨 Web 技术如何赋能其他平台的开发。  《前端架构师之路:从理论到实践的精进之道》 将通过大量的代码示例、真实的案例分析和深入的思考,带领读者一步步掌握前端架构设计的精髓。无论你是初出茅庐,希望快速提升技术视野的开发者,还是身经百战,渴望突破职业瓶颈的资深工程师,本书都将是你宝贵的参考和指引。它不仅教授你“怎么做”,更重要的是让你理解“为什么这么做”,从而培养出卓越的前端架构思维,在职业生涯中不断精进,成为真正引领行业发展的技术专家。