产品特色
编辑推荐
适读人群 :null (1)知乎著名前端专栏作者/前端类话题优秀答主/人人网资深前端工程师经验总结
(2)《ES6 标准入门》作者/著名技术博客作者阮一峰、W3cplus.com 站长大漠大力推荐
(3)从技能修炼和思想提升2个维度总结出34个高效编程和应用优化的完美实践
内容简介
这不是一本单纯讲解前端编程技巧的书,而是一本注重思想提升和内功修炼的书。
全书以问题为导向,精选了前端开发中的34个疑难问题,从分析问题的原因入手,逐步给出解决方案,并分析各种方案的优劣,最后针对每个问题总结出高效编程的*佳实践和各种性能优化的方法。
全书共7章,内容从逻辑上大致可以分为两大类:
第一类,偏向实践,围绕HTML、CSS、JavaScript等传统前端技术,以及PWA等新兴前端技术,讲解如何进行HTML优化、CSS优化、JavaScript优化、页面优化等,以此帮助前端工程师们提升高效编程和应用优化的能力。
第二类,注重基础,讲解了前端工程师必须掌握的数据处理、网络协议、文件操作、测试等基础性的开发技,目的是帮助前端工程师们修炼内功,打下扎实的基础。
希望通过本书,不仅能帮助前端工程师们夯实基础,而且还能写出简洁、优美的代码,为应用带来良好的用户体验。
作者简介
李银城(网名:会编程的银猪)
资深前端工程师,现就职于人人网。
知乎著名的专栏作者,前端类话题知名答主,在知乎前端圈有一定的影响力。乐于分享。喜欢写博客,他的知乎专栏“Effective前端”,累计已经超过20万字,文章被大量转发和转载。
目录
目 录?Contents
前 言
第1章 HTML/CSS优化 1
Effective前端1:能用HTML/CSS
解决的问题就不要用JS 2
Effective前端2:优化HTML标签 16
Effective前端3:用CSS画一个三角形 22
Effective前端4:尽可能地使用伪元素 28
第2章 JS优化 34
Effective前端5:减少前端代码耦合 34
Effective前端6:JS书写优化 47
第3章 页面优化 59
Effective前端7:避免页面卡顿 59
Effective前端8:加快页面打开速度 67
Effective前端9:增强用户体验 85
Effective前端10:用好Chrome Devtools 91
第4章 HTML5优化实践 109
Effective前端11:使用H5的history改善AJAX列表请求体验 109
Effective前端12:使用图标替代雪碧图 118
Effective前端13:理解和使用CSS3动画 128
Effective前端14:实现前端裁剪压缩图片 136
Effective前端15:实现跨浏览器的HTML5表单验证 145
Effective前端16:使用Service Worker做一个PWA离线网页应用 151
第5章 前端与计算机基础 164
Effective前端17:理解WebSocket和TCP/IP 164
Effective前端18:理解HTTPS连接的前几毫秒发生了什么 185
Effective前端19:弄懂为什么0.1+ 0.2不等于0.3 203
Effective前端20:明白WebAssembly与程序编译 209
Effective前端21:理解JS与多线程 221
Effective前端22:学会JS与面向对象 231
Effective前端23:了解SQL 248
Effective前端24:学习常用的前端算法与数据结构 266
第6章 掌握前端基础 291
Effective前端25:掌握同源策略和跨域 291
Effective前端26:掌握前端本地文件操作与上传 299
Effective前端27:学会常用的CSS居中方式 310
Effective前端28:学会常用的CSS布局技术 320
Effective前端29:理解字号与行高 327
Effective前端30:使用响应式开发 336
Effective前端31:明白移动端click及自定义事件 344
Effective前端32:学习JS高级技巧 355
第7章 运用恰当的工具 372
Effective前端33:前端的单元测试与自动化测试 372
Effective前端34:使用AE + bodymovin制作网页动画 390
前言/序言
Preface?前 言为何写作本书?本书通过介绍前端的优化实践以达到高效编程之功效,这里并不是教你怎么用CSS的某个属性,如“display:grid”,或者怎么用JS的ES6,而是重点教你一些前端的思想,如怎么提高用户体验,怎么写出简洁优美的代码等。注重思想而不注重形式,注重功底而不注重框架是本书的特色。本书有一大部分篇幅在介绍怎么提升编程的功底,怎么修炼内功,从而达到高效编程的目的。
全书以问题为导向,例如有些页面为什么打开会比较卡顿,从怎么解决这种问题,有哪些方法,这些方法的优缺点是什么,一步步由浅入深地分析和解决问题。学会解决问题,比学会知识更为重要。
本书主要内容本书分为七章,第1~4章和第7章的实践性比较强,第5章和第6章注重基础。
第1章介绍如何使用浏览器提供的便利进行开发,能使用HTML/CSS解决的问题就不要使用JS,因为用HTML/CSS解决一般会更加简单,用户体验也会更好。
第2章介绍怎么样写出简洁高效的JS代码,怎么组织代码逻辑,让代码更加优美,具有更好的扩展性。
第3章介绍页面整体的优化,包括怎么加快页面的打开速度,怎么避免页面的卡顿,怎么从一些细节之处提升用户的体验,怎么更好地使用调试工具。
第4章结合实际经验,介绍HTML5的一些实用技术,如使用history改善AJAX体验、图标字体和SVG、裁剪压缩图片、如何做一个PWA应用等。
第5章回归技术基础,以WebSocket、wasm、Web Workers等HTML5的新技术为出发点回归到计算机基础,如网络协议、程序编译、多线程等。特别介绍了它们和前端的联系,只有掌握这些基础,才能更好地解决问题,做一个优秀的前端开发人员。
第6章讨论了诸如跨域、上传文件、CSS布局等前端技术支柱,特别是有些很常用但却是前端知识盲点的部分。
第7章介绍前端的单元测试与自动化测试,以及怎么使用可视化工具制作网页动画,还介绍了其他一些前端开发常用的工具,作为本书的一个补充内容。
在写作的过程中,我都是结合实际的经验进行阐述,并不像很多大学课本那样只讲理论。所以相对来说,本书看起来应该会比较生动,并且很多章节都是图文并茂的。
本书读者对象本书适用于以下读者对象:
具有一定的前端基础,想要找一本高阶的、能提升水平的书;刚毕业,没有什么实践经验,需要一本有实践指导作用的书;已经工作了,想要学习一下其他人的前端开发经验;不是做前端开发,但是有编程基础,想要深入理解前端是怎么运作的,或者是想加深理解HTTP之类的计算机基础知识。
如何阅读本书如果你一点编程经验都没有,可能不太适合阅读本书,你要是不知道什么是变量,什么是HTML,应该先读一些编程入门书籍。
读者可以从头看到结尾,我相信每一篇看完都会有收获的。或者有针对性地看,例如,你觉得自己在计算机基础里的网络协议、数据结构算法等方面比较薄弱,可以直接看第5章;如果你对HTML5比较感兴趣可以直接看第4章。在阅读的过程中,建议读者都实际操作一遍,而不仅仅是当作睡前读物,因为只有自己动手实践才能识别书中的真伪并且加深理解。所以本书不提供相关源码等资源,读者可自行根据书中描述动手练习。
致谢在本书的写作和出版过程中得到了很多人的帮助,感谢我的家人对我写作的支持和鼓励,感谢人人网同事在写作过程中提出的建议和对错误的修正,感谢机械工业出版社华章分社对本书出版付出的努力,特别是杨福川编辑对本书的策划以及李雷鸣老师的认真审阅、还要感谢阮一峰、大漠老师在百忙之中审阅本书、认可本书,并为本书写推荐语。
由于水平有限,书里难免会有一些不足和错误的地方,虽经过几番修改,可能还会有些许问题,欢迎读者朋友对本书的内容积极讨论,提出意见。我的邮箱是liyincheng@m.scnu.edu.cn。
李银城 2017年12月17日
《架构设计:从理念到实战的系统思维》 书籍简介 在瞬息万变的数字时代,无论是初创企业还是行业巨头,都面临着构建能够适应未来、稳定可靠、且易于演进的软件系统的挑战。成功的系统不仅仅是代码的堆砌,更是对复杂需求的深刻理解、对技术趋势的敏锐洞察,以及对工程实践的精湛运用。本书《架构设计:从理念到实战的系统思维》正是为了系统性地解答这些挑战而诞生。它不是一本介绍某种特定语言或框架的“速成手册”,而是一本深入探讨软件架构设计核心原则、方法论和实践经验的著作。本书旨在帮助读者建立起一套完整的系统思维框架,理解架构设计的本质,掌握从宏观到微观的决策过程,最终能够设计出高质量、可扩展、易维护的软件系统。 本书的写作理念源于对现代软件工程实践的深刻反思,以及对大量优秀和失败项目案例的提炼。我们认为,架构设计并非少数“架构师”的专利,而是每一位有志于构建优秀软件的工程师都应该掌握的核心能力。因此,本书的语言力求清晰易懂,避免晦涩的技术术语,而是通过大量的实例、类比和场景分析,将抽象的架构概念具象化。我们相信,理解“为什么”比记住“怎么做”更为重要,因此本书在介绍具体方法的同时,更侧重于阐述其背后的原理和思考逻辑。 本书内容梗概 第一部分:架构设计的基石——理解与思维 这一部分将引领读者进入架构设计的世界,首先建立起对架构的正确认知。 何为架构? 我们将从不同的角度剖析“软件架构”的含义,它不仅仅是组件的划分,更是关于决策、权衡与约束的艺术。我们会探讨架构在不同阶段的演变,从早期简单的模块划分到如今复杂的分布式系统。 驱动架构设计的力量:理解架构的根本目的是为了应对业务需求、技术挑战和团队协作等多种因素。本书将深入分析这些驱动力,例如: 业务目标与领域建模:如何将抽象的业务需求转化为可落地的技术模型?如何通过领域驱动设计(DDD)等方法论,确保技术决策与业务价值高度对齐。 非功能性需求(NFRs)的重要性:性能、可扩展性、可用性、安全性、可维护性、可部署性等非功能性需求,往往是决定系统成败的关键。我们将详细解析这些NFRs的含义、度量方式以及它们对架构设计的具体影响。 技术演进与趋势:从单体到微服务,从同步到异步,从集中式到去中心化,技术总是在不断发展。本书将梳理重要的技术演进脉络,并探讨如何根据实际情况选择合适的技术栈,避免盲目追随潮流。 组织结构与团队协作:康威定律指出,系统设计往往会反映组织结构。我们将探讨如何根据团队的实际情况来设计合适的架构,以及如何通过架构来促进团队的协作和效率。 系统思维与设计模式:培养系统性思考能力是架构设计的核心。我们将介绍如何从整体视角审视问题,理解各个组件之间的相互作用。同时,本书将引入一系列通用的架构设计模式,并分析它们在不同场景下的适用性,例如: 分层架构:经典的N层、M层设计,其优缺点与适用场景。 客户端-服务器架构:Web开发中最基础也最核心的架构模式。 事件驱动架构:如何通过事件和消息队列实现系统间的解耦与异步通信。 微服务架构:拆分、服务间通信、数据一致性等挑战与解决方案。 领域驱动设计(DDD):如何构建围绕业务领域构建模型,设计出易于理解和演进的系统。 CQRS(命令查询职责分离):如何通过分离读写操作来优化系统性能和可扩展性。 第二部分:架构设计的实践——方法与决策 在建立起坚实的理论基础后,本书将带领读者进入架构设计的具体实践环节,重点在于如何做出明智的设计决策。 架构评估与选择:面对多种可能的架构方案,如何进行有效的评估?本书将介绍ATAM(架构权衡分析方法)等评估工具,以及如何权衡不同NFRs之间的矛盾。 模块化与组件设计:如何将庞大的系统拆分成 manageable 的模块和组件?我们将讨论高内聚、低耦合的原则,以及如何设计清晰的接口和契约。 数据管理策略:数据是系统的核心,本书将深入探讨不同的数据管理策略: 关系型数据库(RDBMS):何时选择,如何设计模式,性能优化技巧。 NoSQL数据库:不同类型NoSQL数据库(键值、文档、列族、图)的适用场景,以及它们如何解决关系型数据库的痛点。 数据一致性模型:强一致性、最终一致性、偏斜一致性等概念,以及在分布式系统中的选择。 缓存策略:如何利用缓存提高系统性能,避免重复计算。 通信模式与服务发现:在分布式系统中,服务间的通信是关键。 同步与异步通信:RESTful API、RPC、消息队列(Kafka, RabbitMQ)等。 服务注册与发现:Consul, Eureka, ZooKeeper 等解决方案。 API Gateway:统一入口、安全认证、流量控制等功能。 容错与弹性设计:如何构建能够抵御故障、快速恢复的系统? 重试机制与熔断器:Hystrix, Resilience4j 等。 负载均衡与容灾:Nginx, HAProxy, Kubernetes 等。 限流与降级:保护系统在极端压力下的稳定运行。 安全性设计:如何从架构层面保障系统的安全? 认证与授权:OAuth 2.0, JWT 等。 数据加密与传输安全:SSL/TLS。 安全审计与威胁防护。 可观测性设计:如何了解系统的运行状态? 日志(Logging):集中式日志系统 ELK Stack。 监控(Monitoring):Prometheus, Grafana。 追踪(Tracing):Jaeger, Zipkin。 第三部分:架构设计的演进与未来——持续优化 架构设计并非一蹴而就,而是一个持续迭代和演进的过程。 重构与技术债管理:如何识别和偿还技术债,保持代码和架构的健康? 架构演进的策略:如何从单体迁移到微服务?如何逐步引入新的技术和模式? DevOps 与自动化:CI/CD流水线、自动化测试、基础设施即代码(IaC)等,如何通过 DevOps 实践赋能架构的快速迭代和部署。 架构师的角色与成长:成为一名优秀的架构师需要具备哪些特质?如何平衡技术深度与广度?如何与团队有效沟通? 新兴技术与架构趋势:Serverless, 微前端, WebAssembly 等,以及它们对未来架构设计可能带来的影响。 本书特色 理论与实践并重:本书不仅会讲解架构设计的理论概念,更会提供大量的实际案例分析和代码示例,帮助读者将理论知识转化为实际能力。 系统性思维培养:本书的核心目标是帮助读者建立起一套完整的系统思维框架,理解架构设计是一个全局性的、权衡性的过程。 深入浅出,通俗易懂:我们致力于用清晰、简洁的语言解释复杂的概念,避免不必要的术语堆砌,让不同经验水平的读者都能从中受益。 广泛的适用性:本书讨论的架构原则和方法论,适用于各种规模和类型的软件项目,无论您是开发Web应用、移动应用、后端服务还是嵌入式系统,都能从中获得启发。 强调权衡与取舍:架构设计从来不是完美无缺的,而是关于在各种约束和需求之间做出最佳的权衡。本书将引导读者理解这一过程,并做出明智的决策。 目标读者 本书适合所有希望提升软件系统设计能力的工程师,包括但不限于: 初级工程师:建立正确的架构观,避免陷入早期设计误区。 中高级工程师:深入理解架构设计原理,掌握更高级的设计模式和方法论。 技术负责人/架构师:系统性地梳理架构设计知识体系,提升团队的整体设计能力。 产品经理/项目经理:理解技术架构对产品实现的影响,更好地与技术团队沟通。 《架构设计:从理念到实战的系统思维》将是您在软件工程领域不断探索和进步的宝贵指南。我们相信,掌握了本书的内容,您将能够自信地应对日益复杂的软件系统设计挑战,构建出真正卓越的数字产品。