具体描述
JavaScript的快速演进带来了更新更快的JavaScript虚拟机以及各种框架,不仅使得它在服务器端的Web程序开发中日益普及,同时也推动了适用于移动设备的富JavaScript程序的开发。
本书由浅入深,语言活泼易懂,旨在帮助读者轻松构建实际应用。而且,书中对于JavaScript秘密特性的深入挖掘,会重塑你原本精湛的技能结构,让你构建出巧妙复杂的应用。
本书特色如下。
广:涵盖内容广泛,包括如何构建backbone应用、JavaScript模板的重要性、Node.js和MongoDB、使用WebGL/Three.js库渲染3D图形,以及如何将桌面应用转换为专门的移动端应用,等等。
深:对一些JavaScript相关的高级主题进行深入解析,这些主题是你在其他JS开发的书中通常难以找到的。
全:除了详细讲解的内容,每章最后还提供了丰富的补充资源,以供读者学习参考。
本书所有代码均可在以下地址下载:www.wiley.com/go/ptl/javascriptprogramming。
无论你是深谙JavaScript技术的资深开发人员,还是具有HTML和CSS经验的Web开发者或设计师,都能从本书中学到必备的技能,构建脱颖而出的杀手级应用。
作者简介
作者简介:
Jon Raasch Web
开发专家。用户体验重度关注者,坚信只要满足了用户的需求,商业目标就能随之达成。除本书外,还著有Smashing WebKit和Smashing Mobile Web Development。现居住在美国俄勒冈州波特兰市。Twitter账号:jonraasch。个人网站:jonraasch.com。
译者简介:
吴海星
2001年毕业于南京理工大学。编程数载代码不过十万,翻译几年码字不过百万。项目不过十几个,带队不到五十人。年过而立,惴惴不安,愈加发奋,孜孜求学,愿凭绵薄之力,贡献于IT社区。除此书外,还译有《量化:大数据时代的企业管理》、《Java程序员修炼之道》。
目录信息
第1章 最佳实践 2
1.1 松耦合 2
1.1.1 紧耦合的问题 2
1.1.2 松耦合的优势 3
1.2 JavaScript MVC和模板 3
1.2.1 MVC 3
1.2.2 模板 5
1.3 开发工具 6
1.3.1 WebKit开发人员工具 6
1.3.2 Weinre 10
1.3.3 版本控制 12
1.3.4 CSS预处理 12
1.4 测试 12
1.4.1 使用Grunt 13
1.4.2 使用QUnit 17
1.5 小结 20
1.6 补充资源 21
第2章 库、框架与插件 22
2.1 选择恰当的JavaScript库 22
2.1.1 jQuery 22
2.1.2 Zepto 24
2.1.3 普通的DOM 25
2.2 使用框架 27
2.2.1 Bootstrap 27
2.2.2 jQuery UI 28
2.2.3 移动框架 28
2.3 其他脚本 28
2.3.1 Modernizr 28
2.3.2 HTML5 Shiv 29
2.4 HTML5样板 29
2.5 寻找jQuery插件 30
2.5.1 去哪里(以及不要去哪里)找 30
2.5.2 要找什么——一个十项检查列表 30
2.6 小结 32
2.7 补充资源 32
第二部分 构建前端
第3章 Backbone.js 36
3.1 初识Backbone 36
3.1.1 Backbone是什么 36
3.1.2 为什么要用Backbone 36
3.1.3 Backbone基础 37
3.1.4 什么时候用Backbone 37
3.1.5 设置Backbone 38
3.2 Backbone中的模型 38
3.2.1 创建一个模型 39
3.2.2 创建计算属性 39
3.2.3 设置默认值 39
3.2.4 使用初始化函数 40
3.2.5 使用Backbone事件 40
3.2.6 模型的校验 41
3.3 使用Backbone中的集合 42
3.3.1 创建集合 42
3.3.2 创建集合事件 43
3.4 理解Backbone视图 43
3.4.1 创建视图 44
3.4.2 使用渲染函数 44
3.4.3 使用Backbone中的视图元素 46
3.4.4 使用嵌套视图 49
3.5 数据的保存及获取 55
3.5.1 与服务器上的模型同步 55
3.5.2 在Backbone中使用LocalStorage API 58
3.5.3 把集合保存在服务器上 59
3.5.4 使用Backbone.sync 65
3.6 使用路由控制器 66
3.6.1 路由如何使用 66
3.6.2 设置路由控制器 67
3.6.3 PushState与Hashchange 69
3.7 再谈事件 70
3.7.1 事件解绑定 71
3.7.2 手动触发事件 71
3.7.3 绑定“this” 71
3.7.4 All事件 72
3.8 操作集合 73
3.8.1 取出集合中的条目 73
3.8.2 集合排序 74
3.9 小结 76
3.10 补充资源 77
第4章 使用JavaScript模板 78
4.1 认识模板 78
4.1.1 为什么使用模板 78
4.1.2 了解不同的模板库 79
4.1.3 做出正确的选择 80
4.2 使用Underscore模板 81
4.2.1 Underscore模板基础知识 81
4.2.2 重温模板的最佳实践 83
4.2.3 在模板中使用JavaScript 85
4.3 在Backbone中使用模板 88
4.3.1 不用模板设置模型和视图 88
4.3.2 用模板渲染视图 89
4.4 小结 92
4.5 补充资源 92
第5章 创建表单 93
5.1 理解渐进式增强 93
5.1.1 渐进式增强方式 93
5.1.2 为什么要渐进式增强 94
5.1.3 决定支持哪个环境 94
5.2 让HTML5替你工作 95
5.2.1 HTML5的输入控件类型 95
5.2.2 交互特性 102
5.3 给老浏览器用Polyfill 104
5.3.1 寻找第三方Polyfill 105
5.3.2 编写自己的Polyfill 105
5.4 连接REST API 112
5.4.1 提交表单 113
5.4.2 构建通用函数 114
5.5 Backbone中的表单 115
5.5.1 设置表单模型 115
5.5.2 设置表单视图 116
5.5.3 将表单域保存到模型中 117
5.5.4 添加校验 118
5.5.5 清理模板 123
5.5.6 必填项 124
5.5.7 提交表单 126
5.5.8 合并代码 128
5.6 小结 132
5.7 补充资源 132
第三部分 编写服务器端JavaScript
第6章 Node.js简介 136
6.1 为什么是Node 136
6.1.1 在实时程序中使用Node 136
6.1.2 Node的工作机制 137
6.2 安装Node 138
6.2.1 在Mac/Linux上安装 138
6.2.2 在Windows上安装 139
6.2.3 检查安装情况 140
6.3 Node入门 140
6.3.1 创建服务器 140
6.3.2 添加内容 141
6.3.3 打包 141
6.3.4 运行脚本 142
6.3.5 简化脚本 143
6.3.6 使用Node REPL 143
6.4 Node模块 145
6.4.1 引入模块 145
6.4.2 外部模块和NPM 146
6.4.3 寻找模块 147
6.5 Node 模式 148
6.5.1 模块和全局变量 148
6.5.2 异步模式 152
6.5.3 事件 154
6.5.4 子进程 155
6.6 小结 158
6.7 补充资源 158
第7章 Express框架 160
7.1 Express入门 160
7.1.1 安装Express 160
7.1.2 创建Express程序 160
7.2 设置路由 161
7.2.1 已有路由 162
7.2.2 创建新的路由 163
7.2.3 POST、PUT和DELETE 163
7.3 渲染视图 164
7.3.1 启用Underscore模板 164
7.3.2 创建视图 166
7.4 处理表单数据 172
7.4.1 创建POST路由 172
7.4.2 将反馈发给模板 173
7.5 发封邮件 178
7.5.1 连到SMTP服务器上 178
7.5.2 构建Email消息 179
7.5.3 发送邮件 179
7.5.4 在结束之前 180
7.6 小结 182
7.7 补充资源 182
第8章 MongoDB 184
8.1 NoSQL数据库有什么好处 184
8.1.1 扩展能力 184
8.1.2 简单性 184
8.2 MongoDB入门 185
8.2.1 安装MongoDB 185
8.2.2 运行MongoDB 186
8.2.3 安装MongoDB模块 187
8.2.4 创建数据库 187
8.3 MongoDB中的CRUD 188
8.3.1 创建集合 188
8.3.2 读取数据 190
8.3.3 更新数据 194
8.3.4 删除数据 196
8.4 Mongoose 197
8.4.1 Mongoose入门 197
8.4.2 创建模型 198
8.4.3 读取数据 200
8.5 数据库上的其他选择 204
8.6 小结 204
8.7 补充资源 204
第四部分 挑战极限
第9章 用WebSockets构建实时程序 208
9.1 WebSockets的工作机制 208
9.1.1 轮询的问题 208
9.1.2 WebSockets方案 209
9.2 Socket.IO入门 210
9.2.1 服务器上的Socket.IO 210
9.2.2 客户端的Socket.IO 211
9.3 构建实时的聊天室 212
9.3.1 创建聊天室视图 212
9.3.2 将消息提交给服务器 214
9.3.3 在服务器端处理消息 215
9.3.4 在客户端显示新消息 216
9.3.5 添加Backbone.js结构 217
9.3.6 添加用户 223
9.3.7 添加时间戳 225
9.3.8 保存到MongoDB中 227
9.3.9 合并代码 229
9.4 小结 233
9.5 补充资源 234
第10章 进入移动领域 235
10.1 搭建移动App 235
10.1.1 检测移动终端 235
10.1.2 设置移动端网站的样式 237
10.1.3 移动端框架 238
10.2 集成触屏 238
10.2.1 基本触摸事件 239
10.2.2 复杂的触摸手势 239
10.3 Geolocation 248
10.3.1 找到用户的位置 248
10.3.2 连接Google地图 249
10.3.3 追踪Geolocation的变化 251
10.4 电话号码和短信 251
10.4.1 静态的电话号码和SMS链接 251
10.4.2 用JavaScript拨打电话和发送短信 252
10.5 PhoneGap 252
10.5.1 PhoneGap的优与劣 253
10.5.2 PhoneGap入门 254
10.5.3 连接相机 254
10.5.4 连接通讯录 254
10.5.5 其他API 255
10.6 小结 255
10.7 补充资源 255
第11章 JavaScript图形 257
11.1 画布基础 257
11.1.1 画出基本的形状 258
11.1.2 让画布动起来 260
11.1.3 画布中的鼠标事件 261
11.2 SVG基础 261
11.2.1 让SVG动起来 262
11.2.2 SVG鼠标事件 262
11.2.3 编码SVG 263
11.3 Rapha?l.js 263
11.3.1 作画路径 264
11.3.2 画曲线 265
11.3.3 样式 266
11.3.4 动画 268
11.3.5 鼠标事件 269
11.4 用gRapha?l做图表 270
11.4.1 饼图 270
11.4.2 柱状图 271
11.4.3 折线图 273
11.5 带WebGL的3D画布 276
11.5.1 Three.js简介 276
11.5.2 创建图像纹理 280
11.5.3 3D动画 281
11.5.4 添加鼠标事件 282
11.5.5 使用备选的2D画布 283
11.6 CSS中的3D变换 284
11.7 小结 286
11.8 补充资源 286
第12章 推出你的程序 288
12.1 性能检查表 288
12.1.1 重点在哪 288
12.1.2 资源管理 290
12.1.3 动画优化 291
12.1.4 少做为妙 295
12.1.5 规避回流 295
12.2 部署 296
12.2.1 把静态资源部署在CDN上 296
12.2.2 把Node服务部署在EC2上 297
12.3 推出 297
12.4 补充资源 297
附录A 用LESS做CSS预处理 299
A.1 LESS简介 299
A.1.1 预处理的好处 299
A.1.2 安装LESS编译器 300
A.1.3 在服务器上编译 300
A.2 LESS的基础知识 300
A.2.1 变量 300
A.2.2 操作符 301
A.2.3 嵌套 302
A.3 函数和Mixin 304
A.3.1 函数 304
A.3.2 Mixin 305
A.4 文件结构 306
A.4.1 使用Import 306
A.4.2 文件结构示例 306
A.4.3 定制结构 307
A.5 小结 307
A.6 补充资源 307
· · · · · · (收起)
读后感
用户评价
这本《JavaScript编程实战》的封面设计确实很吸引人,那种深邃的蓝色调配上醒目的白色字体,给人的第一印象是专业、严谨,但又带着一丝探索的意味。我原本是想找一本能帮我快速入门前端开发的工具书,毕竟现在Web交互的复杂性要求我们不能只停留在表面。翻开这本书,首先映入眼帘的是对ES6+新特性的细致讲解,作者似乎非常注重基础的巩固,每一个新的概念都配有清晰的图示和代码片段。我尤其欣赏它在讲解异步编程时的处理方式,没有像很多教材那样陷入抽象的Promise链条,而是通过模拟实际的网络请求场景,让读者能直观感受到`async/await`带来的便利和逻辑上的清晰度。不过,对于一个刚接触TypeScript的读者来说,这本书在类型系统方面的深入程度可能稍显不足,虽然提到了类型的重要性,但更像是点到为止,没有提供足够多的实战案例来展示如何将强类型约束融入到大型项目中去,这使得我在尝试构建一个稍微复杂一点的应用时,还是得去查阅其他资料。总体来说,它更像是一本“进阶指导手册”,而非“从零开始的百科全书”。它成功地架起了从基础语法到实际工程化之间的桥梁,但如果你期待一蹴而就,这本书或许会让你在某些高阶议题上稍微慢下脚步,需要你带着疑问继续深入研究。
从代码风格和可读性的角度来看,《JavaScript编程实战》提供了一个非常规范的模板。书中所有的示例代码都严格遵循了现代的Linting规则,变量命名清晰,函数职责单一,几乎可以直接复制粘贴到生产环境中而不需要做大规模的重构。这对于培养初级开发者的良好习惯非常有帮助。更值得称赞的是,作者在讲解复杂逻辑时,总是会穿插“为什么这么写”的思考过程,而不是直接给出“怎么写”的答案。比如在介绍设计模式时,它不是简单地罗列出工厂模式、单例模式,而是会先描述一个场景下的代码痛点,然后引出模式的解决方案,这种“问题导向”的教学方式极大地提高了学习的效率和记忆的深度。不过,这本书在处理错误和异常流程的健壮性方面,似乎有些过于乐观了。大量的示例代码集中在“快乐路径”(Happy Path)上,即一切顺利的执行流程。对于如何优雅地处理网络失败、用户输入错误、或者第三方API返回异常响应的情况,虽然有所涉及,但处理逻辑往往比较简单,缺乏那种金融级应用所需的层层校验和详尽的错误日志记录机制。这使得代码看起来很干净漂亮,但实战起来,总感觉在“兜底”方面还不够充分,需要读者自己去填充大量的防御性编程代码。
说实话,我是在一个技术论坛上看到有人推荐这本书的,当时的要求是“找一本能让你真正理解浏览器渲染机制的书”。《JavaScript编程实战》在这个方面确实没有让我失望,它花了相当大的篇幅来剖析事件循环(Event Loop)的工作原理,这部分内容写得极其透彻,简直就像是把浏览器内核的C++代码用JavaScript的视角重新翻译了一遍。作者对`requestAnimationFrame`、宏任务和微任务队列之间的微妙关系把握得非常精准,通过几个经典的性能优化案例,我才真正理解了为什么在动画或复杂计算时,选择不同的任务队列会造成巨大的性能差异。然而,我在阅读关于DOM操作和性能优化的章节时,发现它对虚拟DOM(Virtual DOM)的介绍相对保守。它更侧重于原生API层面的优化技巧,比如如何批量操作DOM、如何利用`MutationObserver`来监控DOM变化等,这些都是硬核知识。但对于现代前端框架如React或Vue中已经抽象化的V-DOM Diff算法,这本书的着墨不多,这让我感觉它在“现代前端实战”这个定位上,似乎遗漏了构建工具链和框架底层逻辑这块关键拼图。对于一个追求极致性能的前端老兵来说,这些底层细节是必须掌握的,而这本书在这块的广度上略显不足,更像是专注于JavaScript语言本身在浏览器环境下的最佳实践,而非整个前端生态系统的构建。
我购买这本书的初衷,是希望能在后端JavaScript(Node.js)的场景下找到一些突破。我对Node.js的I/O模型和Stream处理一直有点模糊,这本书的Node.js章节表现得相当扎实。它不仅讲解了基础的`fs`模块和HTTP服务器的搭建,还深入探讨了如何使用Streams进行高效的数据管道处理,特别是对于大文件上传和处理时,那种内存占用控制得非常到位。作者通过一个模拟日志流处理的例子,清晰地展示了背压(Backpressure)机制的重要性,这比我之前看过的任何教程都来得直观和实用。但是,当我期望看到更多关于Node.js安全性和集群部署的内容时,这本书的深度又开始下降了。例如,如何有效地利用`cluster`模块进行多核CPU利用,或者如何处理常见的安全漏洞(如原型污染、路径遍历攻击),这些在生产环境中至关重要的话题,都只是被一笔带过。这让我感觉作者的侧重点明显偏向于“客户端/服务器端JavaScript的通用性能力建设”,而没有完全深入到Node.js作为服务端的特定挑战中去。所以,如果你想用Node.js写个简单的API,这本书绝对是神器;但如果你想把它变成一个健壮、高可用的微服务,那么你还需要结合其他关于DevOps和系统架构的书籍来补充。
我个人非常喜欢这本书在模块化和依赖管理方面的阐述。在项目越来越庞大、团队协作日益频繁的今天,如何组织代码结构是决定项目生命周期的关键。《JavaScript编程实战》花了很大篇幅去比较CommonJS、AMD以及ES Modules这几种模块规范的演进和适用场景。作者没有盲目推崇最新的ESM,而是根据不同的项目需求(如服务端、浏览器打包),给出了非常理性的选择建议,这体现了作者深厚的实战经验,而不是单纯的技术追新。特别是它在讲解如何构建一个纯粹的、不依赖任何框架的工具库时,对Tree-shaking和Side-effects的解释非常到位,帮助我优化了我们团队现有工具库的打包体积。然而,这本书在持续集成/持续部署(CI/CD)流程的整合上,几乎是空白的。在这个时代,代码写完之后的自动化测试、自动化部署流程和版本发布策略,与代码本身同等重要。书中虽然提到了单元测试和集成测试的概念,但缺乏如何将这些测试集成到Jenkins、GitHub Actions等主流CI工具中的具体指导,也没有涉及部署时的灰度发布或蓝绿部署策略的JavaScript实现技巧。这使得这本书在“实战”的范畴内,略微脱离了现代DevOps的整体语境,更像是一本专注于代码实现层面的优秀教程,而不是一套完整的工程交付指南。
翻了翻,基本算是最佳实践加简介?
内容范围很广,从前端到后台,还有mongodb,js能用到的领域几乎都涉及到了,所以有基础的人看会更好。书里js应用的每种技术有独立的章节,最后还有实战栗子,但是每种技术并不会介绍太多和太深,所以不是全书,但可以对js的应用有一个总的了解。
内容范围很广,从前端到后台,还有mongodb,js能用到的领域几乎都涉及到了,所以有基础的人看会更好。书里js应用的每种技术有独立的章节,最后还有实战栗子,但是每种技术并不会介绍太多和太深,所以不是全书,但可以对js的应用有一个总的了解。
内容范围很广,从前端到后台,还有mongodb,js能用到的领域几乎都涉及到了,所以有基础的人看会更好。书里js应用的每种技术有独立的章节,最后还有实战栗子,但是每种技术并不会介绍太多和太深,所以不是全书,但可以对js的应用有一个总的了解。
涉猎范围太广了,很多东西还没接触到,不适合初学者