Skip to content
This page has been auto-translated and may contain errors.View in English

选择和学习框架

docs.scrimba.com

前两章介绍了框架是什么存在什么框架。这一章是实践部分:是否使用框架、选择哪个框架,以及如何学习它。顺序很重要,因为第一个问题是最容易被忽略的。

你真的需要框架吗?

想象两个项目。第一个是一个有账户、表单和屏幕的应用,所有这些都对共享数据做出反应。手工实现意味着重新构建框架已经完善的管道,而原生版本最终会变成一个分散的、半测试的自制框架,没人想去维护。在这种情况下,选择 DjangoReact 意味着选择比替代方案更少的活动部件。

第二个是登陆页面、内容网站、小脚本或提交到某处的表单。普通的 HTML、CSS 和少量 JavaScript 就可以完成这些,不需要构建步骤、依赖更新,也不需要在明年迁移。把这样的页面包装在完整框架中会增加只有工具受益的机制。很多有经验的开发者有意使用原生代码发布,这是一个专业的答案,永远不是初学者的妥协。

工程学有一条古老而直白的规则涵盖两种情况:KISS,"保持简单,愚蠢"。这个侮辱是针对设计而不是设计者,这个想法是最好的解决方案是机制最少但仍然能完成工作的方案。上面两个项目都遵循了它,但得出了相反的答案。

这使得测试变成了一个问题,每个项目都要重新提出:选择能让你维护最少机制的选项。 当管道淹没了产品时,那就是框架。当产品几乎是所有东西时,那就是原生代码。

一些信号使这个决定变得具体。倾向框架:很多屏幕共享实时数据、用户账户和权限、验证和保存的表单、多人多年在同一代码库上工作。倾向原生代码:主要是内容、很少交互、生命周期以月计、一两个维护者,或者一个加载速度是全部特性的页面。项目大小可能随着时间推移而改变两个方向上的答案,所以有用的习惯是每当项目改变形状时都重新提出这个问题。

这个决定有两种可识别的失败方式,都来自于跳过这个问题。第一种失败是框架形的登陆页面:一条构建管道、一个依赖树,以及最终的迁移附加到四个内容屏幕上,其中每一小时花在工具上都是产品不需要的一小时。第二种是偶然的框架:一个原生代码库自己增长了路由器、自己的状态存储和自己的组件系统,每个都写过一次、从不测试,并且只有一个人理解。第二个项目支付框架成本但没有框架好处。两个失败从内部看起来都像信念;两种情况下的修复都是相同的不起眼的举动,即根据项目已经变成什么重新决定。

Juno你需要框架吗? 每个项目问一个问题:哪个选项的构建和维护工作最少?对于具有账户和共享数据的交互式应用,框架通常更有优势。对于内容页面或小脚本,普通代码通常更有优势。两个答案都是可以接受的,选择普通代码绝不是降级!
Juno你需要框架吗? 共享实时状态、账户、表单和长期多人协作指向框架;内容密集、短期或对速度至关重要的页面指向原生代码。当项目改变形状时重新提出问题,而不是为原始决定辩护,每个项目都这样做。
Juno你需要框架吗? 留意两个经典失败:为无用之事支付工具成本的框架形登陆页面,以及安静地增长了未维护框架的原生应用。两者都来自于把选择当作已决定的事。我在每个项目拐点重新决定,它多次救我脱离了两个陷阱。

如何选择一个

当答案是肯定的时,用不起眼的标准来选择。基准和功能比较是最没用的输入,因为在同一系列中,流行的选项都足够快,功能也足够全面。真正影响你日常生活的是:

生态系统和社区:成熟的文档、已回答的问题和你会遇到的问题的包。你加入的团队和代码库:最好的框架通常是你的项目已经在使用的那个,一致性在团队内部胜过新颖。工作市场,如果是为工作学习的话:纯粹的使用数字很重要,这是 React 对很多人来说是合理的第一选择的很大一部分原因。还有你知道的语言:Python 开发者出于与质量无关的原因,会比学习 Rails 更快地学习 Django。

把原生选项保留在列表的末尾。如果比较表填满了,没有候选者在简洁性测试中胜过"没有上述任何一个",那这就是答案在告诉你什么。

为了近距离查看候选者,一小时的第一手评估胜过一周的阅读意见:快速浏览官方教程并判断文档是解释还是含糊其辞;检查发布历史以确保进度稳定、不仓促;搜索"从版本 X 迁移到 Y"并查看这些指南是读起来像一个下午还是一个季节;查看你会问的问题是否已经有了好答案。框架是一个长期的关系,这些是兼容性检查。

两个高级习惯完成了这一点。首先,押注建立良好的:一个被广泛使用多年的技术有已知的失败模式、招聘库和答案,"经过验证且略显不时尚"的生命力远长于"新颖且令人兴奋"。变动是复合成本,在十年内幸存下来的框架已经付出了代价。其次,在组件级别保持构建与采用作为真实选项:有时框架的正确数量是一个路由库和别的什么都没有,为了一个难题而采用,其余的保持原生。采用框架不是全有或全无的,最小的解决实际难题的依赖是可敬的架构。

Juno选择一个 用实际标准选择:你的团队已经在使用什么、文档和社区有多好、工作市场想要什么,以及你已经知道什么语言。在同一系列中,每个流行选项都很好,所以风险比看起来要低。无论你往哪个方向走,你的技能都会转移。
Juno选择一个 给候选者一个专注的小时:阅读其教程、检查其发布节奏,阅读版本迁移指南,因为那是你要签署的未来。社区、团队契合度和招聘胜过基准。并有意在最后把"没有框架"保留在候选列表上。
Juno选择一个 押注建立良好的:在十年内幸存下来是框架可以发布的最信息丰富的基准。记住采用不是二进制的;有时一个小库只为那一个难题是正确数量的框架。目标是一个可以发布并保持可发布的产品。

如何学习任何框架

首先学习语言。框架到处假设其语言:React 代码从头到尾都是 JavaScript,Django 应用的每一个令人困惑的行都在底层是 Python。跳过到框架的学习者最终会同时调试两个谜,框架的行为和语言的语法,没有办法区分哪个是哪个。如果 React 是你的目标,JavaScript 轨道是真正的第一步;对于 Django 或 pytest,Python 轨道也扮演相同的角色。语言优先是唯一最大的捷径,因为它是在任何地方都能转移的部分。

然后构建一些小的、真实的东西。一个你真正想要的小项目,在依靠官方教程的同时构建,教的东西比任何观看和阅读都多,因为框架的形状只有在你自己手中才有意义。有意保持第一个项目简朴:它的整个工作是向你介绍框架的想法,杰作可以稍后再来。

当你进行的时候,保持询问框架为你做什么。每个便利的特性都代表真实的东西:路由代表 URL 解析,组件代表 DOM 更新,模型代表 SQL。你不需要预先掌握这些层,但知道它们存在,以及框架大致对它们做什么,是区分使用框架和盲目依赖框架的原因。

这个阶段的常见陷阱是教程循环:完成一门又一门课程,同时从不开始一个无指导的项目,因为教程感觉有成效而空白文件感觉有风险。有意打破它。完成一个官方教程后,启动小的真实项目,让其问题推动你查找什么;带着实时问题阅读的文档的粘性方式不是作为家庭作业阅读的文档。在你自己的项目上卡住和脱困是被训练的真正技能。

两个习惯使框架知识持久。早期学习逃生舱口:每个框架都有认可的方式来降低其抽象(ORM 之外的原始 SQL、渲染器之外的直接 DOM 访问),知道它们在哪告诉你机器的边界,即使你很少使用它们。并稳步地投入框架下面的平台,HTTP、DOM、SQL、语言运行时。框架是平台目前如何被持有的;平台是保持的东西。知道平台的开发者完整地通过过去二十年的每一个框架转换,这是一个值得复制的成绩记录。

Juno学习一个 总是在框架之前学习语言:React 之前的 JavaScript,Django 之前的 Python。然后用官方教程在你身边构建一个小的真实项目。小而完成胜过大而放弃,关于语言的所有东西保留其价值永远!
Juno学习一个 有意逃脱教程循环:一个官方教程,然后一个小的无指导项目,其问题决定你接下来阅读什么。带着实时问题研究的文档真的会坚持。在你自己的工作上卡住和脱困是你真正在训练的技能。
Juno学习一个 早期找到逃生舱口;它们标记机器的真实边界。保持滋养你对底层平台的知识,HTTP、DOM、SQL,因为框架会轮换,平台会留下。平台人员能幸存每个框架转换;我看过几个,模式还没有错过过。

这给你留下什么

这就是整个入门书:简洁作为测试,不起眼的选择标准,语言优先于框架用于学习。当一个特定框架接下来出现时,在这些文档中或在野外,框架的种类是放置它的地图,什么是框架是它下面的定义。