是否感觉自己发开的应用像建立在浮沙之上,是否需要创建一年以上不能重写的应用程序?本书会给出扩展性场景和真实示例,指导你构建经久不衰的应用程序,并从可寻址性、可测试性和组件组合等角度向你展示如何处理可扩展性。大规模框架需要能够“缩小”的能力、从出错组件恢复的能力,以及“扩大”并管理新功能或更多用户的能力。在此之上,你可以用任何JavaScript工具集构建起可扩展的应用。
√识别、评估影响应用程序可扩展性的外部影响因素。
√在大型JavaScript应用程序中构建组件。
√探索可扩展的组件间通信技术。
√定制、配置组件满足扩展需求。
√在各种规模和复杂性的情况下,确保应用程序有*好的用户体验。
√创建在各种环境中都可移植、可测试的应用。
√通过删除或重构组件来进行架构方面的权衡。
√设计以可扩展方式失败的组件。
本书将带你设计和实现能从多个维度(如寻址能力、可配置性和性能)可伸缩的JavaScript的应用程序体系架构;了解常见的JavaScript缩放陷阱,并通过真实的解决方案和策略解决这些问题。内容包括:确定和评估应用程序的外部扩展影响力,创建构成大规模JavaScript应用程序的组件,对可扩展组件间的通信进行设计,设计一个不受限于环境的便携的且可测试的应用程序,等等。
Adam Boduch在开发大型 JavaScript应用方面有近 10年的工作经验。在转型为前端工程师之前,他曾使用 Python与 Linux参与了许多大型云计算产品的构建。Adam拥有非常丰富的开发经验,擅长处理复杂的场景,提高软件的可扩展性。他编写了很多 JavaScript方面的书籍,其中包括 Lo-Dash Essentials,并且,他还热衷于优化用户体验和性能。
Adam现居住于多伦多,是 Virtustream的一名高级软件工程师。
关于审校者
August N. Marcello III是一位充满激情的软件工程师,在客户端的 Web应用架构相关的设计、实现、部署方面,有着近 20年的工作经验。他专注于基于 SaaS创造良好的用户体验,并将其传播到 Web生态系统,这无论从个人还是从专业角度来说都极具价值。对新兴通用技术的热爱以及对先进的 JavaScript平台的专注,驱动着他在技术上精益求精。在工作之余,他会参加越野跑、山地自行车骑行,或者陪伴家人和朋友。他的个人网站为: www.augustmarcello.com。
Yogesh Singh毕业于印度 JSS技术教育学院。他是一位全栈 Web开发者,在服务端 Web开发栈方面( ASP.NET以及 Node.js)很有经验,而且熟练掌握 HTML、CSS以及 JavaScript。
Yogesh热爱 JavaScript以及相关的库和框架( Backbone、 AngularJS、jQuery和 Underscore)。
他开始从事的是数据挖掘和数据仓库方面的工作,在数据库开发方面十分专业。他是 MSSQL的微软认证解决方案成员(MCSA)。
Yogesh自学能力很强,喜欢学习算法和数据结构,并在斯坦福大学 Coursera上获得了算法课的结业证明。
他曾就职于 OLX India和 MAQ Software,目前为 Gainsight公司的全栈开发者。
业余时间,他喜欢在 http://mylearning.in上写博客。他的 LinkedIn简历地址为 https://www.linkedin.com/in/yogesh21。
Nikolay Sokolov是一名软件工程师,他在云计算、自动化部署和企业软件开发方面有着丰富的经验。现在就职于 Tonomi(http://tonomi.com/),负责基于弹性组件模型分发云应用的自动管理包。
可通过 https://twitter.com/chemikadze随时联系他。
Serkan Yersen是一名洛杉矶的软件开发者。他是一些开源库的作者,例如: ifvisible.js、underscore.py以及 kwargs.js。Serkan专门从事构建大型 JavaScript应用,以及为用户广泛的应用创建 UI。2006年至 2012年,就职于 http://www.jotform.com/期间,他开发了一个复杂的表单生成器,供上百万用户使用。现在,他就职于 Home Depot和 Redbeacon(http://www.redbeacon.com/),负责 Web应用开发。你可以访问他的个人网站:http://serkan.io/。
关于译者
本书翻译工作由月影领衔的奇舞团翻译小组承担,由王韦华、黄小璐、黄薇负责翻译。王韦华网名 Aztack,前端技术专家。曾就职百度、奇虎 360等国内知名互联网公司。拥有丰富的 Web前端开发经验,擅长 JavaScript、Ruby、Java、C++等语言。
个人博客:https://aztack.wang
黄小璐
毕业于华中科技大学计算机学院。现为奇虎 360软件开发工程师。曾参与开源项目
[stcjs](https://github.com/stcjs/stc)(高性能前端工作流系统)。参与翻译了《高性能 HTML5》等书。
黄薇
毕业于中山大学,于 2013年加入奇舞团,近期参与了 Nova.js(Web Component框架)、声享(在线制作 PPT)等项目,对大型 JavaScript 应用有浓厚的兴趣和丰富的开发经验。
以上三位译者曾共同参与《移动 Web手册》一书的翻译工作。
1 扩展JavaScript 应用1
影响扩展的因素2
对可扩展的需要 2
不断增长的用户 3
添加新功能 3
雇佣更多的开发者 4
架构角度5
浏览器是一个独特的环境5
组件设计 7
组件通信 7
加载时间 8
响应性 9
可寻址性 9
可配置性 10
架构性取舍11
确定不可变内容 11
从开发的便捷性考虑性能 11
性能的可配置性 12
从可替换性考虑性能 13
可寻址性的开发便捷性 13
性能的可维护性 13
减少功能以提高可维护性 14
利用框架 15
框架与类库16
一致地实现模式 16
内建的性能 16
利用社区智慧 16
框架并非天生支持扩展 17
小结17
2 可扩展性的影响因素 19
扩展用户20
许可证费用 20
订阅费用 21
消耗费用 21
广告支持 21
开源 22
与用户沟通 23
支持机制 24
反馈机制 25
提示用户 26
用户维度 26
扩展用户示例 27
扩展功能28
应用价值 28
“杀手级”功能与“杀死”应用的功能 29
数据驱动的功能 30
与竞品比较 30
修改已有的功能 31
支持用户分组和角色 32
增加新服务 32
扩展功能示例 34
开发的可扩展性34
寻找开发资源 35
开发职责 36
资源过多 36
扩展开发示例 37
影响因素检查表37
用户检查清单 38
功能清单 39
开发者清单 41
小结41
3 组件组合 43
通用组件44
模块 44
路由器 46
模型/集合50
控制器/视图53
模板 55
应用特定的组件 56
扩展通用组件56
识别公用数据、功能 56
扩展路由器组件 57
扩展模型/集合58
扩展控制器/视图59
将功能映射到组件60
通用功能 61
特定功能 61
解构组件62
维护和调试组件 62
重构复杂组件 64
可插拔的业务逻辑64
扩展与配置 65
无状态的业务逻辑 65
组织组件代码66
小结67
4 组件的通信与职责 69
通信模型69
消息传递模型 70
事件模型 70
通信数据结构71
命名约定 71
数据格式 72
公共数据 73
可追踪的组件通信74
订阅事件 74
全局事件日志 74
事件的生命周期 77
通信的开销77
事件的频率 78
回调函数执行时间 80
事件复杂度 81
通信责任区82
后端API 82
Web Socket 用于更新状态 83
DOM 更新 85
松耦合的通信86
替换组件 86
应对意外事件 87
组件分层90
事件流向 90
开发者的职责 91
构建代码思维导图 91
小结92
5 寻址和导航 93
实现路由的方法93
Hash URI 94
传统URI 94
路由是如何工作的95
路由的职责 95
路由事件 96
URI 的结构和模式96
编码信息 97
设计URI 97
将资源映射到URI99
手动创建URI 99
自动生成资源URI 99
触发路由103
用户行为 103
重定向用户 104
路由配置104
静态路由声明 105
注册事件 105
禁用路由 105
故障排查108
路由器冲突 108
记录初始配置 110
记录路由事件 110
处理非法资源的状态 110
小结111
6 用户偏好和默认设置113
偏好类型113
地区 113
行为 114
外观 115
支持地区115
决定支持哪些地区 115
维护地区 116
设置地区116
选择地区 117
存储地区偏好 117
URI 中的地区 118
通用组件配置118
选择配置的值 119
存储和硬编码默认值 119
对后端的影响 120
加载配置值 121
配置行为122
启用和禁用组件 122
改变数量 123
改变顺序 124
配置通知 126
行内选项 126
改变外观127
主题工具 127
选择一个主题 128
单独的样式偏好 128
性能影响128
可配置地区的性能 129
可配置行为的性能 129
可配置主题的性能 132
小结132
7 加载时间和响应速度135
组件构件135
组件依赖 135
构建组件 136
加载组件137
加载模块 137
懒惰的模块加载 138
模块加载的延迟 139
通信瓶颈141
减少间接引用 141
分析代码 143
组件优化145
维护状态的组件 145
处理副作用 146
DOM 渲染技术 148
API 数据150
加载延迟 150
处理大数据集 151
优化运行时组件152
小结153
8 可移植性和测试 155
与后端解耦155
模拟后端API 155
前端入口 156
模拟工具 157
生成模拟数据集 158
执行操作 159
功能设计过程159
设计API 160
实现模拟数据 160
实现功能 161
协调模拟数据与真实数据 162
单元测试工具163
框架自带的工具 163
独立的单元测试工具 164
工具链和自动化 165
测试模拟场景166
模拟API 和测试固件 166
场景生成工具 167
端到端测试和持续集成168
小结169
9 缩小规模171
扩展限制171
JavaScript 文件体积 172
网络带宽 173
内存消耗 175
CPU 消耗177
后端能力 179
互相矛盾的功能180
重叠的功能 181
冗余的功能 182
用户需求 182
设计失效183
多余的组件 184
低效的数据处理 186
过度创建标记 190
应用组合191
功能的启动 191
新功能的影响 192
重要的库 192
小结193
10 处理错误195
快速失效195
使用质量约束 196
提供有意义的反馈 196
当无法快速失效时…… 197
容错198
区分关键行为 198
探测和控制错误行为 199
禁用出错组件 202
优雅地降级功能 203
故障恢复204
重试失败操作 204
重启组件 207
用户手动干涉 208
当我们无法从故障中恢复…… 209
性能和复杂度210
异常处理 210
状态检查 211
通知其他组件 211
记录日志和调试212
有意义的错误日志 212
为潜在故障发出警告 213
通知和指导用户 214
改进架构214
记录错误场景 215
改进组件分类 215
复杂导致出错 216
小结216
能够一直正常运行的应用只是特例,大部分的JavaScript应用多多少少都有些问题。而这些问题产生的原因是由于我们总是习惯性地忽略可扩展性。这本书介绍了如何通过扩展前端架构来提高软件质量。扩展JavaScript应用是一件有趣的事情,需要考虑很多因素:用户、开发者、开发环境、浏览器环境等。我们的任务就是全面考虑这些因素,从而提供最佳的用户体验。我们要扩展什么?为何要扩展?本书将为大家解答这些问题。
本书内容
第1章,扩展JavaScript应用,介绍了何为可扩展的JavaScript应用,以及扩展JavaScript应用与扩展其他应用的区别。
第2章,可扩展性的影响因素,介绍了如何理解可扩展的需求,设计出更好的架构。
第3章,组件复合,介绍了构成架构核心的模式,以及如何以之为蓝图组合组件。
第4章,组件的通信与职责,介绍了组件之间的通信是如何制约扩展的。组件的通信模式功能有决定性作用。
第5章,寻址和导航,详细介绍了拥有指向不同资源的URI的大型Web应用,以及如何设计才能应对不断增长的URI数量。
第6章,用户偏好和默认设置,介绍了设置用户偏好的必要性,以及可配置的组件对扩展应用的重要性。
第7章,加载时间和响应速度,介绍了文件数量的增加是如何降低应用效率的。在添加新功能时,要有所舍弃,才能保证UI的响应速度。
第8章,可移植性和测试,介绍了如何编写不依赖于特定环境的JavaScript代码,包括创建可移植的模拟数据和测试代码。
第9章,缩小规模,介绍了移除无用或错误组件对扩展系统其他部分的重要性。
第10章,处理错误,介绍了优秀的JavaScript架构不会因为某个组件的错误而崩溃。许多时候,在设计时充分考虑对错误的处理是成功扩展的关键。
阅读本书的条件
NodeJS
代码编辑器/集成开发环境
一个现代Web浏览器
本书读者
本书的目标读者是对前端架构感兴趣的高级JavaScript工程师。阅读本书无须预备框架知识,但本书介绍的大部分概念都来自于框架,例如Backbone、Angular、Ember。阅读本书需要扎实的JavaScript语言知识基础,本书中所有的示例代码都使用ECMAScript 6语法编写。
约定
在阅读本书时,你会发现许多代表不同类型信息的不同文本样式。这里展示了一些例子及其含义详解。
正文中的代码、数据库表名、文件夹名、文件名、文件后缀、路径、URI示例、用户输入,以及Twitter用户名等均按以下格式展示:“以users/31729为例。路由器应该找到一个模式,能够匹配该字符串,并能够提取出变量31729”。
代码块按以下格式展示:
// 渲染试图的各个部分。
// 各部分可能有renderer,也可能没有。
// 但不管有没有renderer,内容都会被返回。
警告和重要注解都会按此格式展示。
提示和技巧都会按此格式展示。
下载示例代码
你可以从下载所有已购买的博文视点书籍的示例代码文件。
勘误表
虽然我们已经尽力确保内容的准确性,但错误仍然可能存在。如发现任何错误,可登录博文视点官网提交勘误信息。一旦勘误信息被本书作者或编辑确认,即可获得博文视点奖励积分,可用于兑换电子书。读者可以随时浏览图书页面,查看已发布的勘误信息。
这本书就像是为我量身定做的一份“大型JavaScript应用设计蓝图”。我一直觉得,在构建一个复杂的Web应用时,仅仅掌握前端技术是不够的,还需要有更宏观的设计理念和工程化思维。而这本书,正好填补了我在这方面的知识空白。 我尤其欣赏书中关于“架构设计”的章节。它没有泛泛而谈,而是从实际出发,讲解了如何根据业务需求选择合适的架构模式,如何进行合理的模块划分,以及如何设计清晰的API接口和数据流。它让我明白,一个健壮的架构,是支撑大型应用长期发展和维护的基石。书中对领域驱动设计(DDD)在前端的应用也给我带来了很多启发,让我学会如何将业务逻辑与技术实现更好地分离。 书中关于“测试策略”的详细论述,也让我对“写测试”这件事有了全新的认识。我之前一直觉得测试是一件很耗时的事情,但这本书让我看到了测试的价值——它不仅能够保证代码质量,更能提升开发效率,减少后期返工。它详细讲解了不同类型的测试(单元测试、集成测试、端到端测试)以及如何构建一个全面的测试体系,让我对如何写出更可靠的代码有了更清晰的规划。 另外,书中关于“安全性”的讨论也让我受益匪浅。在构建面向用户的应用时,安全性是不可忽视的重要环节。它详细讲解了常见的Web安全威胁,以及如何在JavaScript开发中采取有效的防护措施。这部分内容,对于提升我开发应用的安全性,保护用户数据,有着非常实际的指导意义。 这本书的语言风格清晰明了,逻辑严谨,而且案例丰富。作者用非常专业的视角,结合实践经验,为我们描绘了一幅大型JavaScript应用的最佳实践图景。我相信,这本书将成为我个人技术成长道路上的一个重要里程碑,我也会把它推荐给所有希望在大型JavaScript应用开发领域有所建树的开发者。
评分这本书真的让我眼前一亮,作为一名在大型JavaScript项目一线摸爬滚打了几年,经历过无数次重构、性能瓶颈和团队协作的开发者,我一直在寻找一本能够系统梳理和提升我技术视野的书籍。读完这本书,我感觉就像是为我多年来在实践中积累的零散经验提供了一个坚实的理论框架和清晰的指导方向。它不仅仅是罗列一些技术点,更重要的是它深入探讨了为什么这样做是“最佳实践”,以及在不同场景下权衡利弊的思考过程。 尤其让我印象深刻的是,书中对模块化设计和代码组织方式的论述。很多时候,我们在项目初期为了快速迭代,可能会忽视长远的架构考虑,导致后期维护困难重重。这本书提供了一系列行之有效的方法,比如如何构建可维护的组件系统,如何进行有效的代码拆分以应对日益增长的代码库,以及如何通过清晰的接口和抽象来降低模块间的耦合度。它让我重新审视了之前的一些编码习惯,并且在后续的项目中积极实践了书中提到的设计原则。 另一个亮点在于性能优化和可维护性方面的深入分析。在大型应用中,性能瓶颈往往是隐藏的,而这本书则系统地讲解了如何定位和解决这些问题,从数据请求的优化到前端渲染的效率提升,再到内存泄漏的排查。更重要的是,它强调了“可维护性”与“性能”并非对立,而是可以通过良好的设计和实践相互促进。它提出的代码风格规范、自动化测试策略以及代码评审机制,都极大地提升了团队的开发效率和代码质量。 这本书的语言风格也十分友好,虽然是技术书籍,但作者的讲解清晰易懂,逻辑性强。它并没有一味地堆砌枯燥的理论,而是结合了大量的实际案例和代码示例,使得抽象的概念变得具体而生动。我常常会在读到某个章节时,联想到自己过去遇到的类似问题,然后恍然大悟,感觉作者就像是我的技术知己,提前预料到了我的困惑,并给出了最合适的解答。 总而言之,这本书对我来说,不仅仅是一本技术手册,更是一次宝贵的学习经历。它帮助我建立了一个更宏观的技术视野,让我能够从更高的层面去理解和设计大型JavaScript应用。它所传达的“实践出真知”的精神,以及那些经过时间检验的“最佳实践”,都将是我未来职业生涯中不可或缺的宝贵财富。我强烈推荐给任何正在或即将从事大型JavaScript项目开发的开发者,相信它会给你带来意想不到的收获。
评分我一直在寻找一本能够帮助我提升在大型JavaScript项目中的开发效率和代码质量的书籍,而这本书,无疑达到了我的期望,甚至超出了。它不像市面上很多技术书籍那样,仅仅罗列一些零散的技巧,而是提供了一个系统性的、全局性的视角,帮助我理解大型应用开发的全貌。 让我印象最深刻的是书中关于“代码演进”的讨论。很多时候,我们对一个项目,尤其是那些历史悠久的大型项目,常常会感到无从下手,不知道如何改进。这本书提供了一套行之有效的方法论,比如如何进行代码的重构、如何逐步引入新的技术栈、如何平衡新技术和旧代码的兼容性。它让我明白,大型应用的优化和维护是一个持续演进的过程,而不是一蹴而就的。 书中关于“团队协作”和“沟通机制”的章节也给我带来了很多启发。在大型项目中,团队成员之间的沟通和协作是至关重要的。这本书讲解了如何通过清晰的代码规范、统一的开发流程、以及高效的沟通工具来提升团队的整体效率。它强调了“集体智慧”的重要性,以及如何通过有效的协作来克服个人能力的局限。 此外,书中对于“前端监控”和“灰度发布”等概念的讲解,也让我对如何保障大型应用在生产环境中的稳定运行有了更深的认识。它讲解了如何通过埋点、日志收集和用户行为分析等手段,来全面了解应用的运行状况,并如何通过灰度发布来降低新功能上线带来的风险。 这本书的优点在于,它既有理论的高度,又有实践的深度。它不仅仅是告诉我们“应该怎么做”,更是深入分析了“为什么这么做”,以及“在什么场景下这么做最合适”。我真心觉得,这本书的价值远远超过了它的价格,它为我提供了一种全新的思考方式和解决问题的框架。我极力向所有正在从事或将要从事大型JavaScript项目开发的同行们推荐这本书,相信它一定会给你带来意想不到的收获。
评分这本书给我最深刻的感受是,它像一位经验丰富的老兵,用最朴实但却最锐利的语言,指出了我们在构建大型JavaScript应用时常犯的错误,并提供了避免这些错误的“地图”。我之前一直以为,只要技术栈选得对,代码写得勤,大型应用自然就能越做越大。但这本书让我意识到,这其中还有太多值得深入思考和精心设计的环节。 特别是关于异步编程和状态管理的章节,简直是为我量身定做的。我常常在处理复杂的异步流程时感到力不从心,各种回调地狱和难以追踪的错误让我头疼不已。这本书详细阐述了Promise、Async/Await等现代JavaScript异步模式的应用,以及如何通过事件驱动、消息队列等方式来优雅地管理复杂的异步任务。而且,书中对不同状态管理方案(如Redux、Vuex等)的深入剖析,以及它们各自的优缺点和适用场景,让我对如何构建健壮、可扩展的状态管理系统有了全新的认识。 书中关于构建可维护、可测试的代码的章节也让我受益匪浅。很多时候,我们为了赶进度,会忽略代码的可读性和可测试性。结果就是,当项目迭代到一定阶段,任何一个小小的改动都可能引发连锁反应,导致Bug频发,团队士气低落。这本书提供了一系列切实可行的建议,比如如何进行单元测试、集成测试,如何利用CI/CD流水线来自动化测试和部署,以及如何通过代码审查来保证代码质量。这些建议,虽然听起来有些“费时”,但从长远来看,绝对是节省成本、提升效率的最佳途径。 此外,书中对前端性能优化和安全性方面的讲解也十分到位。它并没有仅仅停留在表面的技巧,而是深入剖析了性能瓶颈的根源,以及如何从架构层面和具体实现上着手进行优化。对于安全性,它也提供了许多实用的建议,例如如何防止XSS攻击、CSRF攻击等,并强调了“安全无小事”的理念。 总而言之,这本书就像是一盏明灯,照亮了我在大型JavaScript应用开发道路上的迷茫。它提供了一个清晰的思考框架,让我能够更系统、更深入地理解构建复杂应用的挑战,并学会如何用更成熟、更有效的方式来应对。我把它视为一本“必读”的书,强烈推荐给每一位追求卓越的JavaScript开发者。
评分这本书的内容,简直是我过去几年在JavaScript开发中摸爬滚打、踩坑无数后,最渴望得到的一份“攻略”。它没有故弄玄虚,而是直击大型应用开发的痛点,并给出了非常接地气的解决方案。我常常会在阅读过程中,对照自己的项目经历,感叹“原来是这样!”或者“当初要是这么做就好了!”。 书中关于工程化和项目组织的讲解,让我对“大型”二字的含义有了更深刻的理解。它不仅仅是代码量的堆砌,更重要的是如何通过合理的工程体系来管理庞杂的系统。从项目初始化、模块划分、依赖管理,到构建流程、打包优化,这本书都给出了非常详尽的指导。它让我明白,一个优秀的大型JavaScript应用,背后一定有一个强大而高效的工程化支撑。 让我特别惊喜的是,书中对微前端和跨团队协作的讨论。在分布式团队和复杂业务需求的背景下,微前端已经成为一种趋势,而这本书则系统地阐述了微前端的架构模式、技术选型、通信机制以及路由管理等关键问题。它帮助我理解了如何将一个庞大的单体应用拆分成独立、可部署的微前端,以及如何在这种模式下保证团队的独立性和整体性。 另外,书中对可观测性(Observability)的强调也让我耳目一新。在大型系统中,及时发现和诊断问题至关重要,而可观测性就是实现这一目标的关键。它讲解了如何通过日志、指标和分布式追踪来全面监控应用的运行状态,从而快速定位和解决潜在的问题。这部分内容,对于提升系统的稳定性和可用性有着极其重要的意义。 总的来说,这本书为我提供了一个全新的视角来审视和构建大型JavaScript应用。它不仅传授了技术,更重要的是培养了一种工程思维和解决问题的能力。我相信,这本书将会成为我未来在大型项目开发中的一本常备参考书,并且我也会毫不犹豫地把它推荐给我的同事们。
评分不错
评分挺好的,书本质量满意,最喜欢京东的物流
评分老公买来看的,用卷省不少
评分看了几页,还行吧。。。。。。。。。
评分快递送货快,价格实惠。
评分今年的书单
评分可以可以可以
评分学习学习
评分看的云里雾里的
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有