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

框架的种类

docs.scrimba.com

框架是什么介绍了这个概念:结构加上已解决的基础设施,框架调用你的代码。本章是现有框架的全景地图:一个充满安心感的导览,因为没有人需要了解所有这些。工作中的开发者精通一两个框架家族,认识其余的,这也是我们的目标。框架家族比名称更重要:深入学习其中一个成员,它的相关框架很快就会变得熟悉。

网络:前端和后端

网络框架沿着网络本身的分割线分化。前端框架在浏览器中运行,管理用户看到的内容;后端框架在服务器上运行,管理数据、账户和幕后的一切。如果你要进入网络开发,两边各一个框架很可能会成为你的日常工具,通常由你加入的团队或项目决定,而不是由你决定。

你将会遇到的前端框架:

  • React:使用量最大,生态系统和就业市场最大。严格来说是一个 UI 库而不是完整框架,这个区别有下面涵盖的有用核心。
  • Vue:以平缓的学习曲线和令人愉悦的文档而闻名;一个完整、组织有序的中间路线。
  • Angular:谷歌的功能完整框架,对一切都有看法;最适合想要一种规范方式做每件事的大型组织。
  • Svelte:在构建时完成工作,向浏览器发送更少代码;社区较小,经常被其成员所钦佩。

以及后端框架,框架通常与语言相关联:

  • Django(Python):功能完整,从数据库到管理界面;与你可能已经了解的 Python 搭配得很好。
  • Rails(Ruby):推广约定优于配置的框架;其思想在大多数现代网络框架中都能回响,包括 Laravel。
  • Laravel(PHP):PHP 世界的现代标准,仍然驱动着网络的很大一部分。
  • Express(JavaScript):刻意保持最小化,更接近工具包而非完整框架;你自己组装其余部分。
  • Spring(Java):企业工作马;范围广泛,根深蒂固,无处不在于大公司。

一旦你能看透这些框架的外表,相同的思想在所有这些框架中重复出现。前端框架都收敛于组件:小的、可重用的界面片段,拥有自己的外观和行为。后端框架都提供路由(哪个 URL 运行哪个代码)、与数据库交互的某种方式(通常是 ORM,让你将数据库行当作普通对象),以及业务逻辑的插槽。在一个框架中学习这些思想是什么用处,你就已经在很大程度上学到了下一个框架;在它们之间移动主要意味着新的语法和新的文件夹名称,而不是新概念。

当前前端有一个额外的层。React、Vue 和 Svelte 处理界面,但将路由、数据加载和服务器渲染留给你,所以每一个都发展了一个**元框架**:一个建立在库之上的框架,提供那些缺失的部分。Next.js 对 React 发挥这个角色,Nuxt 对 Vue,SvelteKit 对 Svelte,实际上大多数新的生产应用都选择元框架而不是裸库。这也以有用的方式解决了老的"React 是框架还是库"的争论:React 本身只渲染 UI,控制倒转只在你的组件中,这根据上一章的定义让它成为一个库;用 Next.js 包装它,这对框架的行为就完全像框架了。标签的重要性不如知道哪一层拥有哪一个决定,因为那是你在某些东西出现问题时查看的地方。

Juno网络框架 React 和 Vue 这样的前端框架在浏览器中运行,处理人们看到的东西;Django 和 Rails 这样的后端框架在服务器上运行,处理数据和账户。你今天不需要选择完美的框架,你绝对不需要全部。大多数人学习他们第一个团队使用的那个,结果都很好!
Juno网络框架 网络框架的名字不同,思想重复:前端是组件;后端是路由、ORM 和业务逻辑插槽。通过一个框架学习思想,下一个主要是新语法对熟悉的形式。这种迁移就是为什么首先选择"错误的"框架的代价比人们担心的要少。
Juno网络框架 现代前端工作通常意味着一个元框架:React 之上的 Next.js,Vue 之上的 Nuxt,Svelte 之上的 SvelteKit,提供基础库遗漏的路由和服务器渲染。弄清楚哪一层拥有哪一个决定,因为那是调试开始的地方。React 确实根据我们的定义是一个库;Next.js 是让这对框架发挥作用的框架。

应用和游戏

移动开发有自己的框架故事,它围绕一个问题展开:为 iPhone 和 Android 分别构建,还是一次为两者构建?两个框架主导了一次构建的答案。Flutter(来自谷歌,使用 Dart 语言)逐像素绘制自己的界面,所以应用在任何地方看起来都相同。React Native 将 React 的组件模型引入移动应用,并驱动每个平台的原生界面部分,如果你已经了解 React,这是一个自然的延续。

游戏引擎是框架的最全面形式:它们拥有每秒运行六十次的循环,你的代码填充每个对象在其中做什么。Unity(C#)是独立游戏和中型游戏以及移动游戏的默认选择。Unreal(C++)在视觉保真度是关键的地方领先,从大预算游戏到电影制作。Godot 是免费的、开源的引擎,其社区增长迅速,是一个友好的起点。

跨平台交易的价格标签值得大声读出来。一个代码库意味着一半的工作和一个团队,这就是企业喜欢它的原因。代价是框架和平台之间的一层:当一个全新的 iPhone 功能发布时,框架需要支持它,然后你才能舒适地使用它,挤出完全原生的感受需要额外的小心。需要每个原生细节的团队仍然用每个平台自己的工具分别构建;需要用小团队在两个平台上发布的团队选择 Flutter 或 React Native,很少后悔。

游戏引擎推动了控制倒转的极端,这使它们成为一个澄清的极端案例。引擎拥有时间本身:它每帧调用你的脚本,在你的回调之间运行物理,决定你的对象何时甚至存在。你也不是主要在引擎"中"写代码;你在它的编辑器中工作,脚本是场景、材料和预制件中的一个资产。这种完全的所有权正是引擎存在的原因:渲染、物理和资产管道是任何游戏团队都不想重建的数年专业工作。同样的逻辑可以缩小:每当基础设施淹没了产品,框架就从一种便利停止成为唯一明智的路径。

Juno应用和游戏 Flutter 和 React Native 让一个代码库成为 iPhone 和 Android 应用,这就是为什么这么多团队使用它们。游戏有像 Unity、Unreal 和 Godot 这样的引擎,它们处理图形和物理,而你的代码说每个对象做什么。与网络相同的框架思想,穿着不同的衣服。
Juno应用和游戏 跨平台移动用一点原生优雅换来一半的工作,大多数团队欣然接受的交易,而完全原生的工具包在平台感觉至关重要时仍然是答案。游戏引擎是框架思想的完整力量:它们每秒六十次运行,你的脚本填充行为。
Juno应用和游戏 引擎是解释规则的极端:当基础设施(渲染、物理、资产管道)是数年工作且淹没你的实际游戏时,交出控制权是唯一明智的交易。在你的脑海中保持这个比例,基础设施对产品,任何领域的大多数框架决定都变得更容易。

安静的那些:测试和数据

不是每个框架都是关于构建产品的;有些围绕组织工作。测试框架是最清晰的案例,也是上一章定义的最纯粹的例子:pytest(Python)、Jest(JavaScript)和 JUnit(Java)各自找到你的测试函数,运行它们,并报告结果,你永远不需要写一个调用你自己测试的程序。你会在几乎每个专业代码库中遇到其中一个,通常是与项目语言匹配的那个。

数据和机器学习也有框架。PyTorch 在研究和日益增长的生产中占主导地位;TensorFlow 是谷歌的生态系统,带有深层的生产工具。两者都处理训练模型的数学机制,所以你的代码描述模型而不是微积分。如果人工智能如何工作轨道吸引了你,这些是那个世界用来构建的工具。

测试运行器是迷你的控制倒转,值得花一分钟欣赏这个原因。你写名为 test_something 的函数,框架按名称发现它们,在新鲜的设置中运行每一个,捕获失败而不停止其余的,并打印摘要。没人为每个项目写这种编排,这就是框架价值主张最小和最无争议的地方:即使是原则上避免产品框架的开发者也很高兴使用测试框架。

ML 对是库对框架的线变得有用模糊的地方。在 PyTorch 中写一个自定义训练循环感觉像使用一个库:你的代码掌舵,它提供快速数学。使用更高级的层、训练器和回调,它翻转回框架形式,你的代码插入工具拥有的循环。边界取决于你驱动的工具的哪一层。这种框架在 ML 之外旅行得很好:许多大型工具在一个高度是库,在另一个高度是框架,知道你现在飞行在哪个高度告诉你谁拥有今天的控制流。

Juno测试和数据框架 pytest 和 Jest 这样的测试框架找到你的测试函数并为你运行它们,框架调用你的代码的小日常例子。在机器学习中,PyTorch 和 TensorFlow 处理训练模型的繁重数学。框架组织各种编程工作,远超构建应用。
Juno测试和数据框架 测试运行器是框架思想在其最无争议的地方:发现、隔离和报告,没人应该为每个项目重建。注意,即使持怀疑态度的框架开发者也无怨言地使用一个;交易很小,回报是常数。这个不对称是判断任何框架的好镜头。
Juno测试和数据框架 PyTorch 是当你写训练循环时的库,当它的训练器运行你时是框架,那是通用课程:大工具根据你驱动的层改变类别。问谁在你工作的高度拥有控制流,库或框架的问题自己回答。

这些接下来去哪里

那就是地图:网络的两边、移动、游戏、测试和数据,都是相同思想穿着不同制服。剩下的问题是实际的,它有两个部分:选择哪一个,以及是否都要选。选择和学习框架两个都直面,如果这里的定义感觉不稳定,框架是什么是一个短的回顾阅读。