前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >分享下 Backbone、Vue、Angular、React 在项目上的使用经验

分享下 Backbone、Vue、Angular、React 在项目上的使用经验

作者头像
Phodal
发布于 2018-01-29 06:04:48
发布于 2018-01-29 06:04:48
2.3K0
举报
文章被收录于专栏:phodalphodal

上周,知乎上有几篇关于 Angular 和 Vue 对比的文章。本来想着的是,这些文章倒是可以指导下新手,作一些技术选型。可遗憾的是,开始的文章失去了一些偏颇,后面的文章则开始了一些攻击性行为。慢慢的,整个知乎上便是充满了一些戾气,开始了无尽的网络暴力。

于是,我想分享一下之前使用这些 MV* 框架的经验。

前端的摩尔时代

同样吧,在上周结束了《Expert Angular》的审校,这是第三本为 Packt 出版社审校的 Angular 的书。然后,先让我来讲个故事:一年前我开始审校的这本书,当时是基于 Angular 2 beta.4 写的,当时的书名叫 Mastering Angular 2。后来 Angular 2.0 正式版大改,作者们就重新改写代码,书名就改成了 Mastering Angular。完了 Angular 4 出来了,而 Angular 5 也进入了 Beta 版本,因此书名改叫成了《Expert Angular》。

由此可见,前端在这一个时代的变化之快。

场景一:在没有 AVR 时代的 Backbone

刚开始编写大型前端应用的时候,学习的是 Backbone。因为并没有一个好的 MVC 框架,在当时的情况下,仍然是最适合的选择。在当时来看,算是比较早的移动 SPA 应用,也具有它的一系列问题。

对于我们而言,采用 Backbone + jQuery + Spring 有几个明显的问题:

jQuery 带来的散弹性架构问题

一个 Backbone.View 则需要“继承”(extend)从

对于一个复杂的应用,他则会出现一个 PageView,ListPageView 这样的页面,而 ListPageView 则“继承”自 PageView,PageView 则 “继承”自 Backbone.View。在一些复杂的情况下,还会有 SubListPageView 这样的情况。

如我们所知,JavaScript 并不是一门完整面向对象语言。尽管,我们在写代码的过程中,由于 Code Diff 和结对编程的存在,减少了一些潜在的问题。

在前端还没有 LifeCycle 的概念之时,我们在原始的 View 里采用了 LifeCycle的设计。而在下一层 View,PageView 中则会继承这样的设计,以此类推。

这样的设计,看上去似乎并不存在问题。可当我们需要操作 DOM,我们就会用到 jQuery/Zepto。这个时候,除了当时移动端的手机性能问题。还有一个问题是,排查哪个 View 中操作了 DOM 变成了一件极其困难的事。

全局搜索相应的 ID,再寻找其继承关系,一一调试过来。而除了每一层 View 的关系外,还有在全局中会对一些 DOM 进行处理。

当你在某一层级修改了DOM 的时候,我只能祝你好运了

而在新的 MV* 框架里,则可以使用模块化来解决问题。

前后端两次渲染的复杂度

Java 在后台渲染 Mustache,而 Mustache.js 则也使用同一个模板。我们所需要做的,便是在构建的时候,只需要用 require.js 将 Mustache 模板文件打包。

与今天的 React 后台渲染类似,APIJSON 的形式嵌入在 HTML 中。可与 React 的同构不一样的是,在 Mustache 和 Java 之间同步状态,并不是一件容易的事。

每当新加一个状态,便需要使用 Java 修改 ModelAndView,并启用一个新的 API,这个时候即要修改前端的框架,又要修改大量的后台测试。

除了此, 我们还需要考虑到,用户刷新页面的情况。当用户由在产品详情页,刷新页面时,我们需要将一些数据,通过 URL hash 传递到后台,然后解析 blabla。等这些完了,还要考虑将这个状态再传到前端。

这简直是一场噩梦,对于我们这种全功能团队来说还好,自己上手修改代码就完了。可一旦前后端分离,那你祈祷后端愿意帮你修改。

场景二:使用 React 重构(重写)

随后,我们开始计划使用 React 来重写应用,它能很好地解决我们上面遇到的问题。

我们是在 React 初期采用这个框架的,所以操作起来并不会像今天这么顺利。我们在实现原型系统的时候,需要自己去实现一个又一个的组件。而由于我们的系统,本身就已经是前后端分离,使用 React 对于我们而言,便像是使用新的框架来重写旧的业务。从业务价值来说,并没有太大意义。

不过,这个框架当时主要是用在桌面端版本上的,后来进行响应式设计便也用到了移动应用上。

再说说前后端渲染

React 的同构,能解决前后端渲染带来的问题。可是在当时来看,React 后台渲染所依赖的 Node.js 并没有那么“可靠”,其生态也没有现在完善。

除了直接使用 Node.js 渲染,我们还测试过的一种方案是,直接生成对应静态的页面。其数据量大概在一百万左右,一次生成这么多的数据是一种极大的挑战。测试方案时,采用 Node.js 运行服务,然后用 Scrapy 爬取对应的数据,生成对应的 HTML。完成生成代码后,编写对应的 Message Queue,其将根据后台数据库的增、删、改来生成、删除、重新生成相应的 HTML。

没等项目完,我就换到一个新的项目。在新的项目里,采用的是 Angular。

场景三:Angular 实现桌面端与移动应用代码复用

2015 年底,在移动应用领域,能满足人力成本低、跨平台、速度快的框架中,就要数 Ionic + Cordova + Angular.js 的混合应用方式。而对于传统公司来说,他们有大量稳定的后台程序员,因而采用 Angular 这样的方案也更容易上手。

代码复用

Ionic 1.x 是基于 Angular 1.x,由于在 Web 端也采用了 Angular。这样做不仅从统一了技术栈,还实现了某一部分的代码复用

一般的情形下,当两端的业务是一致的,那么必然有大量 Angular.js 的 servicesfactory可以复用,甚至是共用模块。再针对性的,编写相应的响应式布局,就大功造成了——参考场景二的例子。

由于移动应用需要调用某些原生接口,如日志,如 Toast 等等,那么总体上的差异还是蛮大的。可由于移动端业务与桌面端存在不一致,这仍是一个 Desktop First 的项目。在这样的项目里,移动端只有简单的查询等功能。

那么,对于我来说,有一些 servicescontroller 的逻辑就是:Ctrl + C 和 Ctrl + V 就能迅速解决一大半了。剩下的就是,匹配不同尺寸设备的 UI 和使用原生组件优化。

演进

后来,桌面端从 Angular 1.x 迁移(重写一部分)到了 Angular 4.x,旧的应用还运行在旧有的 Angular 1.x 代码上,而新的应用则运行在新的系统上。

而移动端则如我之前的文章所说,React Native + WebView。React Native 编写新的业务,而旧的业务代码则以 WebView 的形式继续运行着。个中缘由,主要是人力不够。

为什么 Angular 在选型里失去优势?

在 Angular 1.x 到 Angular 2.x 这段期间里,有大量的技术人员因为奥斯本效应而选择了其他框架。

奥斯本效应,在IT业界有一个比较出名的“奥斯本效应”(Osborne Effect),源于电脑先驱亚当·奥斯本。在1980年初,颇受欢迎的个人电脑厂商奥斯本,其公司的创新式便携电脑还没有上市,就宣布他们要推出的更高档的机器,而又迟迟无法交货,消费者闻风纷纷停止下单订购现有机种,最后导致奥斯本因收入枯竭而宣布破产。

而 Angular 2.x 在 beta.5 作死的 API 大改,也导致了一部分用户离开,好在最后 Angular 2.x 活了过来。

场景四:Vue 快速上线

在上半年里, 由于某个业务需要,我需要创建一个新的移动 Web 应用:几天内上线是一个小的功能。因为只有两三天时间,我直接排队了 React,我相信没有一天的时间,我是 Setup 不好 React 全家桶的。而 Angular 也被我排除了,因为它要构建出包发布,从流程规范上比较麻烦。最后我选择了:Vue + jQuery + WeUI。

Vue 引入 vue.min.js 就可以使用了,直接拿代码库就可以发布了,不需要打包。不过直接把 Vue 的模板嵌入到 HTML 与 jQuery 的 ID 直接使用起来。虽然方便,但倒也是一场噩梦。

要是变成了散弹式架构,那么可就是一堆麻烦

Vue 大法好啊~。

场景五:Dili

https://github.com/phodal/dili

To be continue....

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 phodal 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一.Vue介绍
本文最后更新于 871 天前,其中的信息可能已经有所发展或是发生改变。 什么是Vue Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于Weex) Vue.js 是前端的主流框架之一,和Angular.js、React.js 一起,并成为前端三大主流框架! Vue.js 是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue有配套的第三方类库
Yuyy
2022/06/28
4400
一.Vue介绍
React 还是 Vue: 你应该选择哪一个Web前端框架?
2016年,React在Web端和移动端都实现了迅速的成长,稳稳地领先于其主要竞争对手Augular,巩固了其作为前端框架之王的地位。
前端迷
2018/10/29
1.7K0
vue相比jquery_angular和vue哪个厉害
前言:很多人说jquey和vue没有什么可比的,应该和Angular,React来比吧,我到觉得他们倒没有多大的可比性,都是基于mvvm思想设计的框架,无非就是实现的方式不一样,在不同场景下性能上会有一些差异。然而从jquery到vue或者说是到mvvm的转变则是一个思想想的转变,是将原有的直接操作dom的思想转变到操作数据上去,难道不是一个根本性的改变吗?
全栈程序员站长
2022/11/04
7050
React、Vue、Angular 共分天下,2018头首将会是谁?
摘要总结:本文介绍了React、Vue和Angular这三种前端框架在2017年的状况,并给出了在微信公众号上的一份调查。根据该调查,React是最受欢迎的,其次是Vue.js和Angular。React在移动应用开发方面表现出色,而Vue.js在Web应用开发方面表现优秀。Angular在2017年没有跟上,但仍是很多大公司的首选。
企鹅号小编
2018/01/05
1.5K0
React、Vue、Angular 共分天下,2018头首将会是谁?
单页面应用后台渲染的三次实践
或许这是一个好的主题,又或许这不是一个好的主题。但是至少我可以Share一下我的经验: 基于Mustache模板引擎的前后台渲染。 基于PreRender方式的Angular.js应用的后台渲染 服务端渲染的React 开始之前,我希望即使你们需要后台渲染,你们也应该前后端分离!由后台来提供API数据,前端用自己的后台来渲染页面。听上去有点绕,简单的来说就是不要把大量的业务逻辑放前台来,只把显示逻辑放在前台上。这样一来,即使有一天我们换了新的前端,如移动应用,那么我们的后台也是可用的。 0 前后端分离 这是
Phodal
2018/01/29
1.3K0
Angular2入坑指南
序 对后端开发来说,前端是神秘的,眼花缭乱的技术,繁多的框架,出名的不出名的好几百种,看是“繁荣”,其实显得杂乱无章,但是我们在做开发的时候,技术选型还是主流的那么几个:浅析angular,react,vue.js Node.js。 node 官网:https://nodejs.org/ nodejs不是一个js框架,千万不要认为是类似jquery的框架,nodejs是js运行时,运行环境,类比java中jvm。做前端的没用过nodejs都不好意思说自己是前端。nodejs是和jvm同等地位的js运行环境,
xiangzhihong
2018/01/26
2.1K0
为什么现在的开发者总是拿 Vue.js 和 JavaScript 巨头 Angular、React 比较?
Vue.js 是一个用来构建 web UI 的 JavaScript 库,基于 MIT 开源协议。Vue.js 于 2013 年首次分布,但是在接下来的两年内,并没有太多的 web 框架领域的开发者关注。到了 2016 年,Vue.js 名声大噪,获得了极大的关注,以至于现在除了像 Angular 和 React 这样的重量级 JavaScript 库,又多了 Vue.js 这样的一个选择。
疯狂的技术宅
2019/03/28
2K0
为什么现在的开发者总是拿 Vue.js 和 JavaScript 巨头 Angular、React 比较?
多种前端框架的优缺点「建议收藏」
Web前端目前现有的UI框架:Element、Bootstrap、JqueryUi、Foundation、Semantic UI、Pure、UIkit Web前端目前现有的JS框架:JQuery、Zepto、VueJS、AngularJS、ReactJS、backbone 、ember
全栈程序员站长
2022/08/04
3.8K0
Angular企业级开发(1)-AngularJS简介
AngularJS介绍 AngularJS是一个功能完善的JavaScript前端框架,同时是基于MVC(Model-View-Controller理念的框架,使用它能够高效的开发桌面web app和移动端应用。AngularJS由Google公司开发而且开源出来,给所有开发者使用。前端基于Bootstrap+AngularJS框架,后端基于RESTful服务框架开发的应用越来越多。未来后端基于Docker+Microservice部署的应用也会越来越多。 AngularJS官方网站 Angular
八哥
2018/01/18
1.6K0
Angular企业级开发(1)-AngularJS简介
前端程序员必知:单页面应用的核心
这几年里,单页面应用的框架令人应接不暇,各种新的概念也层出不穷。从过去的 jQuery Mobie、Backbone 到今天的 Angular 2、React、Vue 2,除了版本号不同,他们还有很多
Phodal
2018/01/29
1.5K0
Blazor VS React / Angular / Vue.js
Blazor是一项新的Microsoft技术,允许开发人员使用C#为浏览器编写代码, 本文将Blazor与其他三个常见SPA框架进行了比较:React,Angular和Vue.js, JavaScript是当前基于浏览器的单页应用程序(SPA)最受欢迎的语言,因为直到最近,它还是在浏览器中运行的唯一语言。这些框架可以从JavaScript或TypeScript进行编译或转换。本文询问开发人员是否需要依赖与JavaScript,以及我们是否可以开始使用C#构建SPA应用程序。
全球技术精选
2021/01/09
5.1K0
Blazor VS React / Angular / Vue.js
vue项目实战经验汇总
vue作为前端主流的3大框架之一,目前在国内有着非常广泛的应用,由于其轻量和自底向上的渐进式设计思想,使其不仅仅被应用于PC系统,对于移动端,桌面软件(electronjs)等也有广泛的应用,与此诞生的优秀的开源框架比如elementUI,iView, ant-design-vue等也极大的降低了开发者的开发成本,并极大的提高了开发效率。笔者最初接触vue时也是使用的iview框架,亲自体会之后确实非常易用且强大。
青梅煮码
2023/03/13
7150
vue项目实战经验汇总
备受 Vue、Angular 和 React 青睐的 Signals 演进史
作者 | Ryan Carniato 译者 | 张卫滨 策划 | 丁晓昀 最近,在前端领域,围绕着“Signals”这个词,有一些热烈的讨论。不管是 Preact 还是 Angular,似乎都在讨论该话题。 但它们并不是什么新东西。如果我们将其追溯到上个世纪 60 年代的研究,那么这就更算不上新鲜的事物了。它的基础采用了与第一个电子表格 和硬件描述语言(如 Verilog 和 VHDL)相同的模型。 即便是在 JavaScript 中,从声明式 JavaScript 框架诞生开始,我们就拥有这种理
深度学习与Python
2023/04/21
1.2K0
备受 Vue、Angular 和 React 青睐的 Signals 演进史
用 jest 单元测试改善老旧的 Backbone.js 项目
对于早期的前端 SPA 项目,Backbone.js + Require.js 是一种常见的技术组合,分别提供了基础的 MVC 框架和模块化能力。
江米小枣
2020/06/16
3.6K0
用 jest 单元测试改善老旧的 Backbone.js 项目
我的职业是前端工程师【四】:如何选择合适的前端框架,告别选择恐惧症
将 package.json 中的 Ionic 版本改为 2.0.0 的时候,我就思考一个问题。这个该死的问题是——我到底要用哪个框架继续工作下去。 刚开始学习前端的时候,SPA(单页面应用)还没有现
Phodal
2018/01/29
1.1K0
前端三大框架vue,angular,react大杂烩
摘要:从angular的诞生独步天下,到现在三大框架平分天下,基本形势已经趋于稳定。每一个框架从诞生到受欢迎,都有其特定的原因和背景。不同的开发者选择时,也是依据于其特定情景下的原因和背景。 一、为什么前端会被vue,angular,react瓜分?    不知道大家有没有发现,这三个框架除了都是前端框架之外,还大有搞基的成分存在。注意他们三个的名字,分别以v,a,r 开头,我这么一说,你是不是忽然间就想到了什么。哈哈,正是如此,将他们组合起来不就是javascript中无处不在的鬼东西么?var
企鹅号小编
2018/01/16
2.2K0
GitHub 上的顶级项目都是做什么的?
前一阵看到同事在用一个名叫 AirFlow 的工具,而我竟然素未耳闻,一番搜索之后发现这个 工具是 Apache 的顶级项目,而且在 GitHub 上有 1w+ 的 Star。
乔戈里
2019/10/09
1.7K0
8分钟为你详解React、Angular、Vue三大框架
当前世界中,技术发展非常迅速并且变化迅速,开发者需要更多的开发工具来解决不同的问题。本文就对于当下主流的前端开发技术React、Vue、Angular这三个框架做个相对详尽的探究,目的是为了解开这些前端技术的面纱,看看各自的庐山真面目。
极乐君
2020/06/02
22.4K0
8分钟为你详解React、Angular、Vue三大框架
Angular和Vue.js 深度对比
Vue.js 是开源的 JavaScript 框架,能够帮助开发者构建出美观的 Web 界面。当和其它网络工具配合使用时,Vue.js 的优秀功能会得到大大加强。如今,已有许多开发人员开始使用 Vue.js 来取代 Angular 和 React.js  。 那么对于 Angular 和 React.js ,开发者该如何选择呢? 下面我们会对这两种框架进行介绍和深度对比。 Vue.js 是前 Google 员工 Evan You 的开发的,并于2014年发布,现已获得了超过57,000个 GitHub
葡萄城控件
2018/03/27
5.5K0
Angular和Vue.js 深度对比
React vs Angular,到底那个更好用
在编程领域,Angular 和 React 对于前端开发人员来说是目前最流行的两款 JavaScript 框架。
程序狗
2021/12/24
5.9K0
相关推荐
一.Vue介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档