摘要:对于前端开发者来说,时常犹豫不决的难题是如何选择前端框架,通过使用JS库,可以极大地提高开发效率,但本文作者认为,在某些场景下,JS库并未带来事半功倍效果,反而事倍功半!

原文链接:https://codepilotsf.medium.com/is-it-time-to-ditch-svelte-react-and-vue-731d9dc9e25b

声明:本文为 CSDN 翻译,未经授权,禁止转载。

作者 | Sean Schertell

译者 | 弯月

出品 | CSDN(ID:CSDNnews)

现如今,几乎所有现代Web应用程序的构建都要使用前端的某个JavaScript大型库,用JS渲染的虚拟DOM替换整个浏览器视口,并通过REST API消费JSON,这些REST API需要单独构建,但与前端紧密耦合。

如果你在构建像Figma 或 Trello 这样的单页应用程序(Single Page Application,即SPA),那么利用其中一个工具可以节省很多时间和成本。但是,如果你在构建一个多页面应用程序(Multi Page Application,即MPA),例如常见的电子商务网站,甚至是电子邮件之类的应用程序,那么我明确告诉你,使用SPA框架带来的复杂性远超其本身的价值。

SPA 架构的问题

仅把服务器当成调用API的渠道,则意味着我们不能再依赖它来维护应用程序的状态。因此,我们将所有状态管理转移到客户端,并由此而发明了Redux 和 MobX 等全新的框架。由于我们不能再使用服务器进行基本的路由,因此创建了React Router 和 Page.js等库来模拟以前可以免费获得的路由功能。

以前,在服务器端会话实现身份验证非常容易。然而,在 SPA 架构中,通常我们需要使用JSON Web Tokens,这种实现的难度大幅增加(而且很容易出问题)。即便是最基本的表单提交也不能再依赖浏览器标准的HTML实现,根据其名称属性提交表单字段。现在我们需要将这些值绑定到 JS 对象,并“手动”管理和提交该对象。

换句话说,这些功能以前我们可以免费获得,而现在却要付出大量努力,值得吗?

为何会有如今的局面?

过去,Web开发很简单。浏览器发送一个 HTTP 请求,服务器发送一个新文档,然后由浏览器将其渲染到视口,并替换掉之前的所有内容。不过,这种方法有点笨拙。这意味着,即便你只想更新页面的一小部分,也必须重新渲染整个页面。

后来,JQuery 出现了,可以利用AJAX仅更新页面的一部分,而无需刷新整个页面。如此构建的Web应用程序更具交互性和响应性,更像“应用程序”。但JQuery涉及大量的命令式 JavaScript,而且维护难度很高。如果你想构建一些复杂的功能,用不了多久,代码库就会变得盘根错节,无法维护。

后来,Angular出现了,还有紧随其后的React,这些框架采用了一种全新的方法,导致我们不得不重新思考“前端”的概念:前端不仅仅是通过JavaScript渲染的DOM,而是一个 JavaScript 应用程序,它最终会渲染出一个DOM。如果你想构建一个单页应用程序,则这种方式很有效。虽然你无法使用HTML基本的客户端/服务器架构,但可以自由地构建类似于应用程序的前端体验。这种新方法令人兴奋,不久之后,每个新建项目似乎都开始采用SPA。

在过去的5~10年中,用户对现代响应式网站的期望也急剧增加。因此,人们不再满足于构建需要重新加载整个页面的“Web 1.0”风格的应用程序。

没有 SPA 的现代 UI

那么,如果不使用 SPA 前端/REST 后端架构、不编写大量笨拙的 JQuery、不必每次点击鼠标都刷新整个页面,我们如何才能构建一个现代 MPA 网站呢?

有一批库致力于提供现代交互性,同时仍然能够使用HTML和HTTP的基本功能,这两个词都以“HT”开头,意思是超文本(Hypertext)。关键就在于此。Web的设计理念是在网络上来回传输超文本,而不是JSON。Hotwire、HTMX 和 Unpoly 等库允许你通过向标记添加 HTML 属性或标签以声明性方式替换DOM块,同时无需自己编写任何 JavaScript。例如,按钮“添加到购物车”可以向服务器发送一个请求,该请求会在服务器端会话中修改购物车货物的服务器端状态,然后发送回两个DOM 块,替换页面上的cart-sidebar和#cart-icon-badge。这种实现可以非常优雅,而且还可以使用漂亮的 CSS 动画。

如果我们按照Tim Berners-Lee(万维网的发明者)最初的设计思路送HTML,结果就会收到大量没用的数据。客户端状态管理的DOM本就是客户端的状态。客户端路由器?这不是开玩笑吗?JSON Web Tokens?服务器会话是经过验证的,而且更容易实现。我们的数据库查询也更加容易,因为所有的路由都在服务器端编写,因此可以安全、直接地访问数据库。

我编写了一个简单的基于 ExpressJS 的框架来实现这种架构风格,你可以试试看:https://www.sanejs.dev。

Ruby on Rails将在2022年大放异彩?

像大多数现代 Web 开发人员一样,长期以来我一直在避免使用Ruby on Rails,因为这个框架的设计思路是构建庞大的单体Web应用程序,这种方式早已过时。但问题在于,如果前端使用Hotwire 或 HTMX之类的框架,后端就可以使用任何框架。由于我们处理的是HTML元素,因此在理想情况下,后端可以选择最适合创建服务器渲染模板的框架。但我们没有那么多功能齐全、方便易用的框架。如今这类的主流框架有Rails、Django 和 Laravel。还有一些即将出现的框架,例如基于 Elixer 的 Phoenix 和基于 Go 的 Buffalo。但是 Rails 有一个庞大的社区,非常成熟,老实说,这为我们提供了很多帮助。

但重点在于,去年 12 月最新发布的 Rails 7.0包括前端交互库Hotwire。Hotwire 可以与 Rails 一起使用,也可以单独使用,但其设计初衷是与 Rails 开发完美结合,而且是默认自带的。不论是你是否相信,时至2022年,Rails仍然是完美的全栈框架,可用于构建具有现代交互性的后 Jamstack 时代的MPA Web 应用程序,它可以控制基本的HTML元素,我们不需要借助JS框架,构建一个前端应用再加一个后端API。

总结

如果我们的最终目标是以快速、有条理和可维护的方式构建现代 MPA 网站,那么就应该认真考虑 SPA/Jamstack 架构是否真的适合这项工作。随着现代 DOM交互库(如 Hotwire、HTMX 和 Unpoly)的出现,我们终于有了一个真正的SPA 替代方案,它允许我们创建现代、优雅的界面,允许我们控制基本的HTML元素,无需重新发明应用程序状态管理和表单提交等基本的轮子。因此,如果我们想重新采用服务器渲染的模板,那么也许是时候再看看 Web 框架的卫冕冠军:Ruby on Rails。尤其是全新的 7.0 版本内置了 Hotwire,Rails 可能是 2022 年构建现代多页面应用程序的最佳解决方案。

— 推荐阅读 —

是时候抛弃 Svelte、React 和 VUE 了吗?相关推荐

  1. vue和react相同点_我在React和Vue中创建了相同的应用程序。 这是区别。

    vue和react相同点 by Sunil Sandhu 由Sunil Sandhu 我在React和Vue中创建了相同的应用程序. 这是区别. (I created the same app in ...

  2. react构建淘票票webapp,及react与vue的简单比较。

    前言 前段时间使用vue2.0构建了淘票票页面,并写了一篇相关文章vue2.0构建淘票票webapp,得到了很多童鞋的支持,因此这些天又使用react重构了下这个项目,目的无他,只为了学习和共同进步! ...

  3. vue = 什么意思_我用React和Vue构建了同款应用,来看看哪里不一样

    作者|Sunil Sandhu 译者|王强 编辑|王文婧 我阅读了很多 React 文档并观看了一些教学视频,它们的确很棒,但我真正想知道的是 React 与 Vue 有何不同.我所说的"不 ...

  4. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    2019独角兽企业重金招聘Python工程师标准>>> 去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5 ...

  5. 【React、Vue 、 Angular 共分天下,2018首将会是谁?】

    要论 2017 年最主流的三个 Web 前端结构,应莫过于 Angular.Vue 和 React 了.然而在实际运用中,这三个结构却不尽相同,对于规模不大的前端项目来说,Vue 因其极易上手会被列出 ...

  6. web前端 react与vue 流行框架的比较

    JavaScript是世界上最流行的语言之一,React和Vue是JS最流行的两个框架.但哪一款最适合你? JavaScript越来越受欢迎,许多科技巨头正在从中获益.每天都会出现大量的框架和语言,我 ...

  7. 面试官:react和vue有什么区别吗?

    前言 大家好呀,清明节这两天有没有出门踏青扫墓呢!!! 言归正传,这是作者面试系列的第二篇文章!!!!!!! react和vue是什么?有啥区别吗? 三大框架之二,大家应该都不会陌生,都有学习过或者开 ...

  8. React个Vue的对比

    React 与 Vue 的对比 技术层面 Vue 生产力更高(更少的代码实现更强劲的功能) React 更 hack 技术占比比较重 两个框架的效率都采用了虚拟 DOM 性能都差不多 组件化 Vue ...

  9. 解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js + Web API前后端集成项目

    前言 上次发表了<一键生成Vue.js + Web API前后端集成项目>后,有多位网友来问,有不有其他的前后端集成模板: 实际上,VS2022没有提供前后端集成项目模板. 但是,使用VS ...

  10. 今天的考核题目: 你知道React和Vue的区别吗? skr,skr

    React 和 Vue 的区别 博主面了几家公司,看简历上写着使用Vue.js框架,就会问,你能说一说 vue 和 react的区别吗 ?react 听过,没用过,所以就只能尴尬的说不怎么了解reac ...

最新文章

  1. 怎么查看linux文件夹下有多少个文件(mac同样)
  2. Optimize Slow VBA Code
  3. Hadoop大数据——mapreduce的join算法
  4. java 传送解析8583报文_java发送ISO8583报文接口案例
  5. 分层和分段用什么符号_小编带你学直播——后牙树脂分层堆塑
  6. JQuery Datatables Dom 和 Language 参数详细说明
  7. 普惠金融在印尼:GoPay会是东南亚的蚂蚁金服吗?
  8. 中职读计算机什么专业好,读职校选择什么专业好一些
  9. SpringBoot | 第十四章:基于Docker的简单部署
  10. php通过数组存取mysql查询语句的返回值
  11. edius裁剪快捷键_edius5.0常用快捷键 edius快捷键使用大全
  12. resnet34\resnet101网络结构图
  13. linux setcap指令,linux setcap/getcap
  14. STC - 非标连接的7段数码管赋值
  15. sox处理mp3_sox的常用方法
  16. Datax下载、安装、定时同步配置
  17. 儿童发烧、高热,警惕病毒性感冒【程序员爸爸们学着点】
  18. 云原生 -- contour + envoy部署
  19. 错误SyntaxError: (unicode error) truncated \UXXXXXXXX escape的解决方法
  20. 4月计算机网络原理试题,4月全国自考计算机网络原理试题及答案解析.docx

热门文章

  1. 怎么自学编程python_怎样自学Python编程?
  2. SWUST OJ 492: The Dutch flag problem
  3. 如何用计算机计算log除法,对数计算器_如何使用计算器计算对数
  4. Unity 屏幕分辨率的设置
  5. 1582年10月份日历表_1582年10月发生了什么 日历为什么凭空少了十天
  6. 二项分布的期望方差证明_二项分布与负二项分布的均值与方差推导
  7. Halcon_3D点云筛选,目标轮廓提取,切平面求取目标间隙宽度
  8. 微信自动回复机器人使用教程
  9. Git的下载安装教程
  10. Python 判断素数(质数)的方法讲解