Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230

Deprecated: Invalid characters passed for attempted conversion, these have been ignored in /www/wwwroot/www.85520057.com/func.php on line 230
Loading

Rust不适(shì)合(hé)开发Web API

2021-02-09 21:31:02 2263

    “浩渺行无极,扬帆但信风。”在多学科交叉为基础,多维度研究相结合的生命科学研究大整合的时代背景下,贵宾厅公司将乘着行业发展的东风,以专业、专注、诚信为本,回归科研、协助创新,不断超越,为广大用户提供更优质的产品和服务!
作(zuò)者 | Tom MacWright
译者 | 吴留坡
策划 | 蔡芳芳
来源丨前(qián)端之巅(ID:frontshow)

Rust 是一门神奇的(de)编(biān)程语言,有非常(cháng)好的(de) CLI 工(gōng)具,比如(rú) ripgrep 和 exa。像 Cloudflare 这(zhè)样的公司正在使用(yòng)并 鼓(gǔ)励人们写 Rust 来运行微服务。Rust 编写的软(ruǎn)件可能(néng)比 C++ 或 C 更安全、更小、更(gèng)简洁(jié)。

如果我正在(zài)编写一个地理编码器、一个路由引擎、一个实时消息平(píng)台、一个(gè)数据(jù)库或一(yī)个 CLI 工具,Rust 最合适。

但去年,我(wǒ)试图用 Rust 写(xiě)一个传统(tǒng)网站的纯 API 服务(wù),Rust 就(jiù)不(bú)合适了。

缺失很多小功能

Rust 有大量的 Web 服务框架、数据(jù)库连接器和解析器。但(dàn)搭建身份验证服务方面只有非常低层(céng)次的组件。Node.js 有 passport.js,Rails 有 devise,Django 有 开箱即(jí)用(yòng)的身份验证模(mó)型,在 Rust 中,你需要学习如(rú)何将共享 Vec 转换到底层加密库才能构(gòu)建(jiàn)这(zhè)个系统。

译者注,Vec 是一个动态数组,只会自动增长而不会自动收缩。区别于(yú) Array,Vec 具(jù)有动(dòng)态的添加和(hé)删(shān)除元素(sù)的能力,并且能够以 O(1) 的效率进行随机(jī)访问。Vec 的所有(yǒu)内容项都是(shì)生(shēng)成在堆空间上的(de),可以轻易的将 Vec 移出一个(gè)栈而不用担心(xīn)内存拷贝影响执行效率(lǜ),毕竟只是拷(kǎo)贝栈上的指针。

有些库试图解决(jué)这个问题,比如(rú) libreauth,但它才(cái)刚(gāng)刚开始开发。还(hái)有很多类(lèi)似(sì)的 Web 框架问题。

SDK 呢?在主流编程语言(yán)中,你可以(yǐ)通过一个官方库来接入 Google 云服务(wù)、AWS 或 Stripe。这些官方(fāng)库(kù)大都很棒。例如,aws-sdk-js 和 Stripe 库的设(shè)计和(hé)维护得非常好。

Rust 就不这样,只有少许(xǔ)第三方库,但以这些服务的开发速度,它们真的能够提供高质量(liàng)的体验吗(ma)?

有(yǒu)人会说好吧,X 编(biān)程语(yǔ)言太好了,你可(kě)以在(zài)周(zhōu)末自己写一个 SDK!我必须回(huí)答(dá),不(bú)。

Rust 的生态系统在其它领域非常丰富。用于构建 CLI、管理并发性、使用二进制数据和底层解析(xī)器(qì)的 crates 令(lìng)人(rén)印象深刻,非(fēi)常棒。

Rust 编译器(qì)比以前(qián)快,但仍(réng)然很慢

我一直在看 Nicholas Nethercote 的博客,描述了 Rust 团队(duì)如(rú)何优化编译器,让它更快!

但与其它(tā)编程语言(yán)相比,用它构(gòu)建网站会很慢。它比(bǐ)编译型编程语言 Go 慢得多,也比解释型编程语言 JavaScript、Ruby 和 Python 等慢(màn)得多。

一旦代码被(bèi)编译,一切(qiē)就变得非(fēi)常棒了!但在我(wǒ)的(de)情况(kuàng)下,甚至基本 API 功(gōng)能都不完整,一(yī)个不复杂的系统(tǒng)——居然花了 10 多分钟来编译(yì)。Google 代码构建 的硬件(jiàn)配置很差(chà),每次都(dōu)会超时,我啥都编译不了。

只要不(bú)重建缓存依(yī)赖项,缓存(cún)就有意义。也许 减(jiǎn)少依赖 会加(jiā)快 Rust 项目编译。但就像 serde,几乎所有人都(dōu)使用的(de) JSON 和其它序列化 / 反序列(liè)化(huà)程序占(zhàn)用了大(dà)量的编译时(shí)间。我(wǒ)们是否(fǒu)应该用编译(yì)速度更快但缺乏大量文档和生态系统支(zhī)持的东西来取代 serde?这种取舍非常糟糕(gāo)。

Rust 很复杂

Rust 让你从代码维度(dù)进行思考(kǎo),这(zhè)对系统编(biān)程(chéng)来说非常重要。它让你思考如何共享或复制(zhì)内(nèi)存,思(sī)考真实但不太可能的小(xiǎo)概率事件,并确保妥善处理它们,帮你编写(xiě)各种各(gè)样的高(gāo)效代码。

这些担忧都是(shì)合(hé)理的,但(dàn)是对于大多(duō)数 Web 应用程序来说,它们并不是最(zuì)重(chóng)要的关注点,以流行的惯(guàn)性思考会导致不正(zhèng)确的假设。

就(jiù)拿 Rust 的(de)安全性来说吧(ba)。这是它宣传语中的重要部分,这是绝对正确的:Rust 的承诺安全和底层两者兼而有之——它可以在没有垃圾(jī)收集器的情(qíng)况下工(gōng)作,同时防止基于内存(cún)的(de)漏洞。当你读到“安全”的时候,想想 Rust 的(de)竞争对手 C 吧。C 语言(yán)中的代码可以引(yǐn)用任(rèn)意内存,很容易溢出和出错。Rust 代码可以和(hé) C 代码一样快,但是可以保护内存访问(wèn),而不需要(yào)垃圾收集器(qì)或某种运行时检查。

但是(shì) Rust 的内存规则并不(bú)比 Node.js 或 Python 更安全,用 Rust 编写的(de) Web 应用程序在系统上不会比 Python 或(huò) Ruby 应用(yòng)程序安全。带有垃圾(jī)收集器的高级编(biān)程(chéng)语言(yán)通常为避免这类(lèi)漏洞利用和错误而付出性能损失。不能在 JavaScript 中引用未初始(shǐ)化的内存(cún),因为(wéi) JavaScript 中不进行内存间的引用(yòng)。

旁注:这是在描述 Node.js 和(hé)其它系统的设计(jì)目标——它们确实偶尔(ěr)会有 bug。Node.js 的缓存对象(xiàng),就值得读一(yī)读。

你要是 问一些人,他们会说(shuō)如果使用不安(ān)全的代码,Rust 相比带(dài)有内(nèi)存回收的(de)编程语言是不安全的——包括最流行的 Web 框架 Actix(译者注,Actix 是 Rust 的 Actor 异(yì)步并发框(kuàng)架,基于 Tokio 和 Future,开箱具有异步(bù)非阻塞事件驱动并发(fā)能力,其实现低层级 Actor 模型(xíng)来提供无(wú)锁并发(fā)模型,而且同时提供同步 Actor,具有快速、可靠,易可扩展(zhǎn) https://actix.rs/),因为 不安(ān)全代码允许原始指(zhǐ)针的延迟。

如果(guǒ)你正在写一个视频(pín)游戏,暂停(tíng)执行垃圾收集(jí)是不好的。如果你在编写微(wēi)控制器代码,任何(hé)内存(cún)“开销(xiāo)”或(huò)浪(làng)费都(dōu)是非常糟糕的。但是大多数(shù) Web 应用程序可以(yǐ)节省一(yī)点内存开销来换取生产性能(néng)。

Rust 的其它(tā)属性(xìng)面(miàn)对的争议(yì)几(jǐ)乎(hū)一样。它的并发特性是太神奇(qí)了,如果你(nǐ)在做一(yī)些(xiē)复杂的事情,需(xū)要(yào)快速响应,这当(dāng)然(rán)很棒(bàng)。但如果情况不是这样呢?至(zhì)少可以说,Rust 的异步生(shēng)态系统面临(lín)着很大(dà)挑战:各(gè)种不相关的领域中有(yǒu)着(zhe)不同的(de)异步实现,比如 tokio。

相比较(jiào)之下,Python 的 Tornado 和 Twisted 异步(bù)实现的(de)很奇怪,Node.js 异步实现(xiàn)的很好,但语法都很丑陋。

我确信(xìn),Rust 的异步将会稳定和统(tǒng)一,未来会更容(róng)易操(cāo)作,但我现在就要用啊。

Rust 生态系统不是以 Web 为中心的

很多人正(zhèng)在学 Rust,用 Rust 编写 CLI 应用(yòng)程序或底层代码,并且玩得非常(cháng)开(kāi)心。使用 Rust 编写普通 Web 应用程序的人明显少很多(duō)。

这是技术选择中的重要部分:是否有人(rén)在使用该工具?他们(men)大致在同一(yī)个领域吗?不幸(xìng)的是,Rust 生(shēng)态系统中许多(duō)令人难(nán)以置信的(de)令人兴奋的工作与 Web 应用服务器无关。的确存在一(yī)些很有前途(tú)的 Web 框(kuàng)架——甚至更高层次(cì)的框架,但毫无疑(yí)问,它们市场很小。即使是主要的 Web 框架(jià) Actix 也只有几个顶(dǐng)尖贡献者。

如果 Rust 以(yǐ)目前的速度增长,那(nà)么社(shè)区中的 Web 部分将达到一个临界值,但我认为没有足够多的人使用(yòng) Rust 作为网站的实用工具(jù)。与其它社区相比,有(yǒu)很多(duō)公司致力于使(shǐ)用现有(yǒu)的工具(jù)来(lái)构建 Web 应用程序(xù),这些(xiē)工具不是最(zuì)前沿的,但足够将成熟技术(shù)与新技(jì)术区分开来(lái)。

Juniper 的 N+1 次查询

这(zhè)一(yī)部分不(bú)仅仅是 Rust,它还(hái)涉及(jí) GraphQL 生态系统,Rust 参(cān)与这个生态系(xì)统就是一(yī)个(gè)例子(zǐ)。

N+1 问题(tí) 是每个构建(jiàn) Web 应用程序的人都应该知道的。要(yào)点是(shì):你有(yǒu)一(yī)页照片(piàn)(一次查询),你要显示(shì)每张照片(piàn)的作者,会有多少次查询:1,合并照片和作者,或者在检索照片后对每张照片进行查询以获取(qǔ)作(zuò)者?或者两次,第(dì)二次查询 ids 中的(de) user.id,一次获(huò)取所有(yǒu)作者(zhě),然后(hòu)重新设(shè)置他们的照片(piàn)属性。

N+1 查(chá)询通(tōng)常优先使(shǐ)用数据库解决:比如(rú)将 N+1 查询(xún)改为单个查询,会带来明显的性能优化。我(wǒ)们(men)有很(hěn)多方(fāng)法来尝试和解决这些问题:你可以编写 SQL,并尝试(shì)使用 CTE 和 JOIN 在单个(gè)查(chá)询中完成大量(liàng)工作(zuò),就像我们在 Observable 中所(suǒ)做的(de)那样(yàng),或者使用像 ActiveRecord 这样的 ORM 层将 N+1 查询转换为(wéi)可预测(cè)查询的快速方法。

Juniper 是一(yī)个用于 Rust 应(yīng)用程序的(de) GraphQL 服务。GraphQL 基本上都是由前端应用程序(xù)定(dìng)义查询,而(ér)不是后端(duān)。给它(tā)一系列可以查询的东(dōng)西,然(rán)后应用程(chéng)序(React 或其它)将(jiāng)任意查询发送到(dào)后端。

这会让后端变(biàn)得复杂。任何 SQL 级别的优(yōu)化都不可(kě)能做到——你的服务器正在编写动态(tài) SQL,优化只(zhī)能依赖 GraphQL 服务(wù),但它(tā)不会总是有效(xiào)。例如(rú):Juniper 默认情况下执行的是(shì) N+1 查询,解决(jué)方案 dataloader 还比(bǐ)较粗糙且需要单独(dú)维(wéi)护(hù)。因此,最(zuì)终(zhōng)您将拥有一个非常快的(de)应用程序层,但它所有的(de)时(shí)间(jiān)都(dōu)花在了极(jí)其低效(xiào)的数据库查询上。

总(zǒng)之,GraphQL 与 NoSQL 数据库配合使用效果非常好,它(tā)可以快速为这些类型的请求(qiú)提(tí)供服务。我确(què)信(xìn) Facebook 内(nèi)部有一(yī)些特定的数据库与(yǔ) GraphQL 结合在(zài)一起使用效果非常(cháng)棒,但业内其(qí)他企业则非常依(yī)赖 Postgres 和同类产品。

一些注意事项

首先,本文提到的问题并不针对在通用场景使(shǐ)用 Rust,只针对将 Rust 用于特定目标和生态系(xì)统,简单说就是(shì) Web API。

注意事项(xiàng) 1:一般情况下,你(nǐ)可以用任何编程语言搭建网站,还记得基于 C++ 实现(xiàn)的(de)OkCupid 吗?(译者注(zhù),OkCupid 是美国一个大型线上交友(yǒu)网(wǎng)站)还有一个非常流行的(de) 星象(xiàng)应(yīng)用(yòng)程序,Co-star,它全(quán)部是(shì)用 Haskell 编写的。如(rú)果你擅长(zhǎng)其它编程语言,或者(zhě)可以招聘(pìn)到擅长这些编程语言的工(gōng)程师,你一样可以取得成功。

注(zhù)意事项 2:我试图构(gòu)建的是重 CRUD(增删改查) 的 Web 应(yīng)用程序 API。它可能不算是一个 Web“服(fú)务(wù)”——主要是快速、无数次(cì)地执行同(tóng)一个(gè)操作(zuò),而是(shì)一个 Web“应用程(chéng)序(xù)”——执行了许(xǔ)多不同的操作(zuò),包含了相当多的业务逻辑。如(rú)果(guǒ)你要开(kāi)发的东(dōng)西跟我在(zài)做的不一(yī)样,那我(wǒ)的(de)建议可能就不适(shì)合你。如果你(nǐ)需要的是快速执行一两个操作,比如你正在写一个支付网关或语音消息应用程序,那 Rust 可(kě)能效果还是不错(cuò)的。

注意事项(xiàng) 3:这篇文章写于 2021 年 1 月,如果接下来社区(qū)继续发展(zhǎn),Rust 将得到持续的(de)改进,会变得(dé)更(gèng)好并更易于 Web 应(yīng)用程序(xù)开发(fā)。

总而言之,我(wǒ)真(zhēn)的很喜欢(huān)使用 Rust,这是一门美丽的编程语言,有很多(duō)很(hěn)酷(kù)的想法。希望(wàng)很快,Rust 会成为能用来构建我想做的东西的最合(hé)适的工具。不过,现(xiàn)在我(wǒ)想做的(de)很多东西都要采用(yòng)不同特(tè)性的编(biān)程语言(yán)才能更好地运行。

 延伸阅读

https://macwright.com/2021/01/15/rust.html


">

    相关信息

    更新时间:2025-07-16 09:11 来源:shuiguo.yiyang.haozhou.shanxi.linyi.jiaxing.zz.pingliang.ww38.viennacitytours.com