新書推薦:
《
云中记
》
售價:HK$
76.2
《
大模型应用开发:RAG入门与实战
》
售價:HK$
89.4
《
不挨饿快速瘦的减脂餐
》
售價:HK$
67.0
《
形而上学与存在论之间:费希特知识学研究(守望者)(德国古典哲学研究译丛)
》
售價:HK$
110.7
《
卫宫家今天的饭9 附画集特装版(含漫画1本+画集1本+卫宫士郎购物清单2张+特制相卡1张)
》
售價:HK$
132.2
《
万千教育学前·与幼儿一起解决问题:捕捉幼儿园一日生活中的教育契机
》
售價:HK$
47.0
《
史铁生:听风八百遍,才知是人间(2)
》
售價:HK$
55.8
《
量子网络的构建与应用
》
售價:HK$
109.8
|
編輯推薦: |
★阮一峰、张云龙等资深前端专家力荐
★涉及面广,适合用来了解和巩固前端开发技术全景
★与国内开发实践紧密结合,贴近国内开发者的需求
★还原了JavaScript在技术生态中上下左右所发挥作用
★系统地介绍了前端开发工作中需要的技能及工具
★从环境搭建、代码管理、Web流行趋势到后端开发调试
★作者将多年丰富的前端开发经验都总结到本书中
★可以提升工程师的视野扩展和技术应用格局
★避免弯路,直接踏上康庄大道
★快速进入全端的境界
|
內容簡介: |
本书讲述了开发者使用JavaScript在各种Web开发场景下所需要掌握的重点知识和概念。从*基础的开发工具讲起,再到开发思维方式和前端页面开发,然后扩展到小程序开发和开发工具的混合应用,再讲解前后端交互*常用的网络协议及API设计,*后讲解了使用Node.js开发服务器端应用程序所需要掌握的核心概念。全书以数据链为线索,对重要概念进行精练的分析和对比,从而帮助读者更好地理解和记忆。本书既包括知识技能,又包括设计思想,“道”与“术”并重,让读者“知行合一”,既能“坐而论道”,也能“起而行之”。
|
關於作者: |
多年web开发经验,熟悉前后端开发以及Docker容器技术,喜欢前端,热爱JavaScript。“开发者头条”top10专栏作者。“慕课网”认证作者、精英讲师。2次担任w3ctech长沙分享会主讲嘉宾。中科院人才中心评审委员会认证软件工程师CNCF认证CKA
|
目錄:
|
第1章开发环境1
1.1 代码编写工具2
1.1.1 IDE2
1.1.2 编辑器3
1.1.3 最佳选择3
1.2 Docker容器5
1.2.1 Docker概述5
1.2.2 Docker重要概念6
1.2.3 Docker使用场景11
1.2.4 Docker扩展15
1.3 代码管理15
1.3.1 什么是代码仓库16
1.3.2 版本管理的意义16
1.3.3 版本管理的常用操作16
1.3.4 分支管理的意义17
1.3.5 分支管理的常用操作17
1.3.6 分支管理流程18
1.4 其他软件23
1.4.1 文件夹管理软件23
1.4.2 快速搜索工具24
1.4.3 终端管理软件25
1.4.4 Chrome中的插件25
1.5 硬件提升26
1.5.1 提升程序运行速度26
1.5.2 减少程序切换时间27
1.6 小结28
第2章Web页面与多页应用29
2.1 Web页面的运行环境浏览器29
2.1.1 渲染引擎30
2.1.2 JavaScript引擎38
2.1.3 数据持久层40
2.2 HTML41
2.3 模板42
2.3.1 模板的意义42
2.3.2 常用模板分类42
2.3.3 模板的重要功能42
2.4 CSS盒模型45
2.5 CSS46
2.6 CSS布局47
2.6.1 普通文档流47
2.6.2 浮动57
2.6.3 定位61
2.6.4 弹性盒模型62
2.7 CSS预处理68
2.7.1 预处理的意义68
2.7.2 预处理的重要功能69
2.7.3 样式文件规划72
2.7.4 样式类命名73
2.8 JavaScript77
2.8.1 实现功能逻辑77
2.8.2 操作页面或浏览器78
2.8.3 进行网络通信79
2.8.4 第三方JavaScript库jQuery84
2.8.5 JavaScript简史84
2.9 自动化构建工具85
2.9.1 自动化构建工具的作用85
2.9.2 常用的自动化构建工具85
2.10 小结86
第3章高效编写组织代码的心法87
3.1 拆分方式89
3.1.1 按文件类型拆分89
3.1.2 按功能类型拆分90
3.1.3 按关注点拆分90
3.2 抽象原则91
3.2.1 第一原则:DRY91
3.2.2 第二原则:YAGNI92
3.2.3 第三原则:The Rule of Three93
3.3 不止于代码94
3.4 小结94
第4章模块96
4.1 模块的意义96
4.2 ECMAScript 5中的模块96
4.2.1 立即执行函数表达式(Immediately-Invoked Function Expression)97
4.2.2 显式模块声明97
4.2.3 异步模块定义98
4.2.4 共同模块定义99
4.2.5 CommonJS100
4.2.6 通用模块定义101
4.3 ECMAScript 6中的模块102
4.4 模块打包工具103
4.5 小结107
第5章单页应用(SPA)108
5.1 框架109
5.2 视图与数据110
5.2.1 双向数据绑定111
5.2.2 单向数据流115
5.3 路由116
5.3.1 hash116
5.3.2 history117
5.4 组件119
5.4.1 原生组件119
5.4.2 第三方组件121
5.5 小结123
第6章JavaScript的几个趋势124
6.1 接口与数据类型125
6.2 更好的异步解决方案127
6.3 面向对象与类132
6.3.1 封装132
6.3.2 继承134
6.3.3 多态135
6.4 模块化138
6.5 小结141
第7章小程序概述142
7.1 常见的App142
7.2 JavaScript开发者的一双翅膀143
7.3 小程序的发展144
7.4 小结144
第8章小程序与Web页面145
8.1 WXML145
8.1.1 WXML与HTML的相同之处145
8.1.2 WXML与HTML的不同之处146
8.2 WXSS149
8.2.1 WXSS与CSS的相同点149
8.2.2 WXSS与CSS的不同点149
8.3 JavaScript与WXS155
8.4 JSON155
8.4.1 app.json155
8.4.2 project.config.json156
8.4.3 page.json157
8.4.4 component.json158
8.5 小结158
第9章小程序与单页应用159
9.1 路由159
9.1.1 路由配置159
9.1.2 路由跳转160
9.1.3 路由监听161
9.2 组件162
9.2.1 组件与页面162
9.2.2 小程序组件与单页应用组件164
9.3 web-view165
9.3.1 作用165
9.3.2 交互165
9.4 小结165
第10章小程序的框架与插件166
10.1 RxWX166
10.2 WePY168
10.3 mpvue171
10.4 Taro171
10.5 小结171
第11章小程序的开发工具与发布173
11.1 开发者工具组成173
11.1.1 模拟器174
11.1.2 调试器174
11.1.3 编辑器176
11.1.4 其他功能176
11.2 发布流程177
11.2.1 小程序的版本177
11.2.2 用户身份与权限178
11.3 小结178
第12章其他混合应用简介180
12.1 流应用180
12.2 桌面应用181
12.3 小结182
第13章HTTP协议与Web网站183
13.1 HTTP的历史183
13.2 HTTP的通信方式183
13.3 HTTP的状态184
13.4 小结184
第14章HTTP协议内容185
14.1 请求行状态行186
14.1.1 URL186
14.1.2 请求方法188
14.1.3 状态码状态信息188
14.2 头部192
14.2.1 通用头部字段192
14.2.2 请求头部字段194
14.2.3 响应头部字段196
14.2.4 主体头部字段196
14.2.5 其他头部字段197
14.3 主体198
14.4 Cookie199
14.4.1 Cookie的分类199
14.4.2 Cookie的使用199
14.4.3 Cookie的缺陷200
14.4.4 Cookie与存储201
14.5 Cookie与状态204
14.5.1 状态存储205
14.5.2 状态获取207
14.5.3 基于token的认证方式更好207
14.6 小结208
第15章HTTP请求优化209
15.1 减少连接请求数209
15.1.1 减少请求209
15.1.2 减少连接210
15.2 缓存数据210
15.3 减少传输数据量210
15.4 优化网络链路210
15.4.1 减少域名211
15.4.2 使用CDN211
15.5 小结211
第16章HTTP2协议212
16.1 多路复用212
16.2 压缩214
16.3 支持TLS215
16.4 应用层协议协商215
16.5 服务器端推送215
16.6 流控制216
16.7 小结216
第17章HTTPS协议217
17.1 HTTP的缺点217
17.1.1 通信使用明文217
17.1.2 不验证通信方身份218
17.1.3 无法证明报文的完整性218
17.2 理解HTTPS219
17.2.1HTTPS通信流程219
17.2.2密码学基础221
17.2.3摘要与签名221
17.2.4X.509与证书222
17.3 小结223
第18章WebSocket协议224
18.1 WebSocket与HTTP224
18.2 WebSocket的使用224
18.2.1 客户端225
18.2.2 服务器端226
18.3 小结227
第19章API228
19.1 REST228
19.1.1 REST API设计228
19.1.2 REST API工具230
19.2 GraphQL231
19.2.1 GraphQL设计232
19.2.2 GraphQL工具234
19.3 小结235
第20章Node.js概述237
20.1 为什么要学习Node.js237
20.2 什么是Node.js238
20.3 Node.js的历史239
20.4 Node.js的结构240
20.5 Node.js的运行机制241
20.5.1 单线程241
20.5.2 事件循环242
20.6 学习Node.js的三个挑战244
20.6.1 IO回调244
20.6.2 代码性能244
20.6.3 多进程协作245
20.7 小结245
第21章用Node.js编写Web服务器端246
21.1 处理请求246
21.1.1 创建服务器端246
21.1.2 解析请求247
21.2 响应结果250
21.2.1 状态信息250
21.2.2 响应头部251
21.2.3 响应主体251
21.3 路由解析253
21.4 IO操作260
21.4.1 文件260
21.4.2 数据库264
21.4.3 网络请求267
21.5 Web框架270
21.5.1 Express271
21.5.2 Koa271
21.6 小结271
第22章Node.js内存控制273
22.1 内存限制273
22.2 内存管理276
22.2.1 内存分配276
22.2.2 内存回收276
22.3 内存泄漏277
22.3.1 缓存277
22.3.2 不断增长的数组279
22.3.3 重复的事件监听279
22.4 大内存处理281
22.5 小结283
第23章Node.js多进程284
23.1 PM2模块284
23.1.1 安装与使用285
23.1.2 进程通信286
23.1.3 进程管理287
23.2 cluster模块290
23.2.1 基本使用291
23.2.2 进程通信294
23.2.3 进程管理294
23.3 child_process模块298
23.3.1 基本使用298
23.3.2 进程通信298
23.3.3 进程管理302
23.4 worker_threads模块303
23.4.1 基本使用303
23.4.2 线程通信304
23.4.3 线程管理305
23.5 小结306
第24章Node.js调试与测试307
24.1 开发工具307
24.2 调试工具307
24.2.1 debug模块308
24.2.2 Node Inspector309
24.3 单元测试312
24.3.1 单元测试的意义312
24.3.2 单元测试代码编写原则312
24.3.3 测试框架314
24.3.4 测试风格316
24.3.5 测试指标317
24.4 小结319
|
內容試閱:
|
前言
先给出下面三个问题:
如何快速成为职场老手,通过提升工作效率加快自己的成长速度?
前端技术框架层出不穷,该保持什么样的学习心态?
掌握JavaScript之后可以做哪些事情,有什么样的晋级路线?
术与道
对于第一个问题,要提升工作效率,大体上可分为两种途径:
改变开发习惯,选择好的软硬件环境;
积累经验,提升思维能力。
第一种途径是从术的层面,在微观、客观上进行提升,非常直接也非常有效,但这种途径也有缺陷,就是效率提升的空间有限。
本书的第1章便是教读者一些容易掌握的开发软硬件的知识及如何培养好的开发习惯,因为这些是能够在短时间内提升效率的方法。
第二种途径是从道的层面,宏观、主观地进行提升,提升速度缓慢,提升效果也很难快速直接地反映在工作中,但是提升空间可以说是无限的。
本书的第3章高效编写组织代码的心法及第4章模块都属于此类,掌握这些基本原则和思路对前端知识甚至其他语言的学习都会有很大帮助。
JavaScript是语言工具,是术;但是如果能在熟悉JavaScript之后进行总结归纳、建立自己的学习模型、通过模型来快速掌握其他高级语言,那么这就是道。
关于术与道的理解,大家可能会有以下两个误区。
1.道太难了,把术研究透了也能成为高手
一部分读者可能认为量变引起质变,只要术用得多了,自然能提升道。
量变引起质变其实是个半真命题,因为通常情况下引起质变是有条件的,这些条件既可能是主观创造的,也可能是客观存在的。
举个例子,比如一个电商网站,每天只有1000人使用,但是突然业务暴增到每天一亿人。如果不对系统架构进行调整可能就无法正常运行,这就是客观要求引起的质变。
再举个反例,比如一个开发者做了很多前端项目,开发经验很丰富,但是面试的时候很多问题却答不上来。网上的你是具有3年开发经验,还是把1年开发经验重复了3遍说的就是这种现象。
对于这种情况虽然有量变,但如果缺乏主动的归纳总结提升,很难引起质变。
有的读者可能会疑惑,如果这位开发者不断地使用新框架,比如从jQuery切换到Vue算不算是质变呢?这就好比一个人之前骑摩托车出行,现在改开汽车出行了,这算是生活的质变吗?
2.术不重要,只要潜心向道便能成为高手
这种理解也相当理想化。术与道的关系就好像实践与理论的关系,两者相辅相成。精通术之后可以明白道,懂了道之后又可以用于术。
那些理解了道的高手很多时候都是从术开始学习的。比如《神雕侠侣》中的独孤求败,就是不断地提升剑术来减少对剑本身的依赖的,最后掌握剑道,以至于不滞于物,草木竹石均可为剑。
本书一方面会讲解技术重点,比如HTTP协议、浏览器,同时也更加注重关于道的知识讲解,比如从单页应用开发讲到小程序开发、从JavaScript前端讲到其在Node.js后端的应用。通过不同知识点重要概念的抽象与对比,最终让读者形成可迁移的、适应性强的学习能力。
危与机
其实开始提出的第二个问题暗示了前端工程师的两个危机。
1.职业天花板较低
前端工程师相对于算法工程师、数据库管理员等其他开发岗位来说,并不是一个有较高天花板的职位(不一定随着工作年限增加而不断提升个人能力和薪酬待遇)。相反,由于前端技术框架层出不穷,一般情况下,先入行的工程师和后入行的工程师相比,难以有较大的优势。用了几年jQuery的开发者和入职一年的初级开发者相比,学习使用Vue和React并不具有太多的优势。技术总监和CTO很少有前端工程师出身的。
2.职业门槛较低
学会HTML、CSS这种静态语言就可以实现一个网页效果,JavaScript上手难度也不算大,同时容错率较高,也就是说,如果代码出现bug通常表现在界面和交互上,一般不会对公司造成较大影响,很多控制台错误不容易被客户察觉到。所以,很多IT培训机构必开前端培训课程,除了市场需求,门槛低也是一个重要的因素。
那么在这种情况下前端工程师该怎么通过学习和积累来建立自己的优势呢?
至少可以从以下两个方面入手。
1.提升学习能力
如前面提到的术与道,就能有效地提升学习能力与学习效率。有了强大的学习能力之后,很多新技术都能快速理解并上手。这样的开发者的能力可以说是无限的,自然也不存在天花板。
2.多维度学习
本书以前端为起点,紧贴常用的Web技术知识(Vue、Angular、React、Node.js、HTTP等),帮助大家成为能独立完成开发任务的全端工程师。全端提供的是另一种可能性,带你了解不同的开发技能点,通过多种技能的组合使你成为真正强大的开发者。
树与叶
我曾经参加过一场线下技术分享沙龙,有一场关于架构师的讨论,一位同学说到自己想成为前端架构师,然后罗列了一大堆技术名词及要学习的点,如看一看Vue的源代码、熟练掌握Webpack的使用等。这些点看上去都没错,也紧贴热点,但是这位同学以目前的状态可能很难达到目标。因为他没有形成自己的知识框架!
前端的知识点其实很多,也很细碎,对于开发者而言,并不需要把它们都记住,而是要形成自己的知识框架,然后不断地去丰富它。对于新手而言可能比较难,不一定能做到,但是心中一定要有这个意识。
以本书的写作线索为例。一条明线是围绕JavaScript这门语言进行编写的,讲述了JavaScript的主要使用场景及核心知识,一条暗线便是根据数据流来进行编写的,即从用户端到服务器端;除了这两条纵向的线索,还有一条横向的线索就是从前端到多端(小程序)扩展。这些就是知识框架的体现。
只有先形成框架才能有效地把繁杂的知识点内化成为自己的经验。用罗振宇的话来说就是把新知识缝合到自己原有的知识体系中。学无涯而生有涯,知识框架还能帮助我们对知识进行过滤,避免在一些无关的知识点上消耗过多时间。
致谢
个人能力再强,也毕竟是有限的。一个人的成就,往往离不开其他人的帮助与支持。所以本书能够出版要感谢很多人。
感谢家人对我写书的支持。
感谢董英编辑的信任和指点,以及其他编辑的细心校对。
感谢一直支持我的读者,这其中包括本书的读者及博客文章的读者。
感谢学习我慕课网课程学生的支持。
感谢对于我写书提出意见的朋友们。
感谢参考文章和资料的作者。
感谢所有曾经帮助我成长的人。
|
|