前 言
Web全栈开发人员更像是软件工程中文艺复兴时期的参与者,“只要他愿意,任何事情似乎
都能被实现”。这类人通常拥有一定的设计经验,可以编写用户界面,组合多种算法并在不同的
业务逻辑中获取、处理各种数据。从数据库连接到浏览器,他们管理着拥有成千上万名用户的互
联网产品,使其连绵不绝地提供对外输出的价值。
这一切得益于前、后端技术的高速发展,丰富的技术栈和脚手架加快了项目收益与时间的转
化率。其中较具代表性的当数Python与JavaScript。开发高效、上手简单以及丰富的开发者生态
都是极客们乐意选择它们的原因,然而它们带来的性能问题一直是开发者头上的“紧箍咒”。尤
其是素有“雷厉风行般开发效率”的Python Web框架Django,臃肿的内部加载及过大的系统资
源消耗至今依然是大家对其固有的印象。同样,JavaScript因历史包袱太重也显得捉襟见肘。
随着科技技术的日新月异,“物极必反,否极泰来”正逐步使得软件工程在生产效率和性能
之间趋向某种平衡,打破“成见”也是我写本书的原因。庆幸自己在2013年开始接触这两种前、
后端语言,并与它们一起见证了国内互联网的蓬勃发展。
这些年来的知识积累,使我从早期的游戏行业一路辗转到了传统的互联网电商行业,而今在
一个全新的领域中从事基础架构的工作。对于和Python的结缘,是在我编写《Lua Love2d教程》
的时候,意外地发现同样可作为嵌入式脚本的Python,相较于Lua有着更为成熟的面向对象特
性,此后便一发不可收拾。那时候Python在各个领域中的技术生态已经相当成熟,如我曾经使
用Twisted开发过游戏服务器,这使我第一次对异步编程有了一定的了解,之后我又陆续接触到
了诸如Tornado、Flask及Django等Web框架。
有意思的是,当时前端技术的发展速度似乎并不像现在这样很快就能得到公司技术团队的响
应,主流的技术更多还是jQuery、art-template和Gulp,而Sass、CoffeeScript也是后来的事。直
到Backbone.js的出现,才让我意识到前端开发也能引入设计模式,并能像软件工程化一样形成
体系。也正因如此,上手Vue.js也就变成很自然而然的事。
回馈“社区”一直是我打发日常闲散时间的乐趣,从最开始的Regal引擎到各种Celery插
件,再到基于Django编写的动态绘制矩阵网格工具,这使我收获了许多同行挚友,也使我有幸
在2015年被邀请在“深圳大学及深港产学研基地”的报告厅做了第一次大型的Python技术分享。
此后的一段时间,我便在多个Python技术培训中与许多同行和准同行的普通开发者进行交流,
多年的一线工作经验让我非常能够理解他们在学习中的痛点和困惑。我深知“全栈”并不仅仅是
学会某些特定的前、后端开发语言,也不是为了构建一个具有前、后端交互的动态网页,而是一
种解决问题的全栈思维。
于是在2017年,我在Github首次发起了Vue + X语言开源项目,作为小试牛刀,先后发布
了SpringBoot-vue和Sanic-vue,结果反响超乎预期。这一切最终促成了我希望写一本大家想看、
能看、会看的图书。
本书内容及体系结构
本书分四部分。
第一部分为基础篇(第1~3章),主要介绍现代Web应用开发从早期的多页应用演进到
单页应用的发展历程;抛开框架,从实践中探究单页应用背后的机制;逐一系统性地从计算机科
学体系中掌握异步并发、I/O以及HTTP2协议等当前Web开发的核心技术;梳理Python语言在
目前版本中的改进及建议,着重介绍ECMAScript的核心语法,为后续章节的学习打下基础。
第二部分为Vue.js篇(第4~7章),除了着重讲解掌握Vue.js关键技术的核心知识外,深
入浅出地介绍前端工程化的编译、打包的高级技巧,通过实战案例分享更多目前前端领域较新的
优化加速方案。
第三部分为Django篇(第8~11章),介绍Django 2.x与Django RESTFramework框架的
核心知识、Django ORM源码和正确运用方法、Django Channels与Django 3.x版本的异步视图,
以及WSGI许多鲜为人知的优化技巧。最后,本部分在Django的基础上通过WSGI、PyPy与
AsyncIO或Gevent的结合,全面介绍最新的Django异步并发的实战方案。
第四部分为综合案例篇(第12章)。无论是Vue.js还是Django,框架仅仅只是任何项目中
的某个载体而非关键,尤其在分布式项目中,各个零部件都有可能造成性能瓶颈。通过学习本篇,
读者不仅能熟练运用Django、Channels,而且能认识到RPC通信、Agent技术及WebSocket也是
全栈开发中必不可少的技术栈。
本书读者对象
.想了解全栈技术的任何前、后端开发人员;
.具备JavaScript语言基础的初学者;
前 言
V
.jQuery前端开发者;
.Vue.js技术开发者;
.具备Python语言基础的初学者;
.Python语言进阶读者;
.Python Web技术开发者;
.Django技术开发者;
.系统架构师、运维人员;
.相关培训学员;
.各大院校的学生;
.准备面试的求职者。
说明:
.书中的代码以“项目根目录的相对路径”方式引用而非绝对路径。
.书中涉及的示例及源码的Github地址为https://github.com/boylegu/theory-D-V-HPFS,
以章节作为目录层次结构,模块及项目代码分别存放在对应的章节目录中。
本书力求不限定依赖于某些框架知识,即使没有使用过Django或Vue.js,读者也可以使用本
书。虽然读者可以单独学习每一章,但笔者仍建议读者通读全书,以便于系统地回顾和复习完整
的知识脉络。如果您是一名经验丰富的Python开发者,可以直接阅读本书的第7章、第10章、
第11章以及第12章进行参考。
勘误和支持
由于笔者水平有限,且编写时间仓促,书中难免会出现一些不妥之处,恳请读者批评指正。
为此,您可以将书中的错误在本书代码示例仓库https://github.com/boylegu/theory-D-V-HPFS中以
Issue的形式向我反馈并进行交流。
如果您感兴趣
本书为读者提供更多的细节、技巧方面的提升,并在前、后端领域都给予了充分的技术视野,
确保在任何技术学习的深度上打下基础。除了可以与笔者进行邮件互动外,读者还可以结合本书
查阅互联网上更多的技术资料进行参考。
致谢
感谢这么多年来所待过的公司、遇到的同事,正因为你们的优秀才促使笔者有能力写完本书。
感谢为本书撰写推荐语的行业翘楚,正因过去你们的支持和帮助,笔者才能一步一个脚印地
成长。
感谢热衷于在Github开源技术分享的爱好者,没有你们的推动,全栈技术不可能发展得如
此迅速。
感谢清华大学出版社的编辑,在本书的编写过程中给予很多细致的指导和建议,没有你们就
没有本书的诞生。同时,感谢出版社的许多工作人员为本书最终出版所付出的努力。
感谢在撰写本书时陪伴我的好友。
感谢父母的养育之恩,以及多年来在生活上对我的照顾。
顾鲍尔
2022年4月