eIT.com.cn 2023/2/13 21:05:47 阅读 13 次
作者: 京东零售 陈震 一、 什么是Backbone在前端的发展道路中,前端框架元老之一jQuery对繁琐的DOM操作进行了封装,提供了链式调用、各类选择器,屏蔽了不同浏览器写法的差异性,但是前端开发过程中依然存在作用域污染、代码复用度低、冗余度高、数据和事件绑定烦琐等痛点。 5年后,Backbone横空出世,通过与Underscore、Require、Handlebar的整合,提供了一个轻量和友好的前端开发解决方案,其诸多设计思想对于后续的现代化前端框架发展起到了举足轻重的作用,堪称现代前端框架的基石。 通过对Backbone前端框架的学习,让我们领略其独特的设计思想。 二、 核心架构按照MVC框架的定义,MVC是用来将应用程序分为三个主要逻辑组件的架构模式:模型,视图和控制器。这些组件被用来处理一个面向应用的特定开发。 MVC是最常用的行业标准的Web开发框架,以创建可扩展的项目之一。 Backbone.js为复杂WEB应用程序提供模型(models)、集合(collections)、视图(views)的结构。 ◦ 其中模型用于绑定键值数据,并通过RESRful JSON接口连接到应用程序; ◦ 视图用于UI界面渲染,可以声明自定义事件,通过监听模型和集合的变化执行相应的回调(如执行渲染)。 如图所示,当用户与视图层产生交互时,控制层监听变化,负责与数据层进行数据交互,触发数据Change事件,从而通知视图层重新渲染,以实现UI界面更新。更进一步,当数据层发生变化时,由Backbone提供了数据层和服务器数据共享同步的能力。 其设计思想主要包含以下几点: ◦数据绑定(依赖渲染模板引擎)、事件驱动(依赖Events) ◦视图组件化,并且组件有了生命周期的概念 ◦前端路由配置化,实现页面局部刷新 这些创新的思想,在现代前端框架中进一步得到了继承和发扬。 三、 部分源码解析Backbone极度轻量,编译后仅有几kb,贯穿其中的是大量的设计模式:工厂模式、观察者模式、迭代器模式、适配器模式……,代码流畅、实现过程比较优雅。按照功能拆分为了Events、Model、Collection、Router、History、View等若干模块,这里摘取了部分精彩源码进行了解析,相信对我们的日常代码开发也有一定指导作用: (1)迭代器 EventsApi起到一个迭代器分流的作用,对多个事件进行解析拆分,设计的非常经典,执行时以下用法都是合法的: ◦用法一:传入一个名称和回调函数的对象
◦用法二:使用空格分割的多个事件名称绑定到同一个回调函数上
实现如下:
(2)监听器 用于一个对象监听另外一个对象的事件,例如,在A对象上监听在B对象上发生的事件,并且执行A的回调函数:
实际上这个功能用B对象来监听也可以实现:
这么做的好处是,方便对A创建、销毁逻辑的代码聚合,并且对B的侵入程度较小。实现如下:
(3)Model值set 通过option-flags兼容赋值、更新、删除等操作,这么做的好处是融合公共逻辑,简化代码逻辑和对外暴露api。实现如下:
四、 不足(对比react、vue)对比现代前端框架,由于Backbone本身比较轻量,对一些内容细节处理不够细腻,主要体现在: ◦视图和数据的交互关系需要自己分类编写逻辑,需要编写较多的监听器 ◦监听器数量较大,需要手动销毁,维护成本较高 ◦视图树的二次渲染仅能实现组件整体替换,并非增量更新,存在性能损失 ◦路由切换需要自己处理页面更新逻辑 五、为什么选择Backbone看到这里,你可能有些疑问,既然Backbone存在这些缺陷,那么现在学习Backbone还有什么意义呢? 首先,对于服务端开发人员,Backbone底层依赖underscore/lodash、jQuery/Zepto,目前依然有很多基于Jquery和Velocity的项目需要维护,会jQuery就会Backbone,学习成本低;通过Backbone能够学习用数据去驱动View更新,优化jQuery的写法;Backbone面对对象编程,符合Java开发习惯。 其次,对于前端开发人员,能够学习其模块化封装库类函数,提升编程技艺。Backbone的组件化开发,和现代前端框架有很多共通之处,能够深入理解其演化历史。 |
• JS校验银行卡号以及通过银行卡号自动带出所属银行信息 (2023/3/19 17:49:18)
• 9种跨域方式实现原理 (2023/2/13 21:05:47)
• Backbone前端框架解读 (2023/2/13 21:05:47)
• JQuery动态生成的按钮无法触发问题与解决方法 (2023/2/13 21:05:47)
• 基于jQuery的三种AJAX请求 (2023/2/13 21:05:46)
• TypeScript 前端工程最佳实践 (2023/2/13 21:05:46)
• day35-JSON&Ajax03 (2023/2/13 21:05:46)
• day32-JQuery05 (2023/2/13 21:05:46)
• day31-JQuery04 (2023/2/13 21:05:46)
• day30-JQuery03 (2023/2/13 21:05:46)
SQL安装配置 | QQ安全 | Microsoft安全漏洞 | SQLite | Docker | Photoshop | Illustrator | Java密码学 | 数据库安全 | Linux软件使用 | 通过示例教程学习C | Web2py | XML | 手机上网 | SQL安全设置 | 数据库文摘 | 安全管理 | Parrot | AWS Lambda | 企业完美解决方案VPN专题
合作媒体与友情链接 |
生活常识小贴士 | 软件开发教程 | 智慧城市生活网 | 息县通生活服务[移动版] | 息县商圈[移动版] | 美食菜谱 |
健康养生 | 法律知识 | 科技频道 | 电影影讯 | 留学考研学习 | 星座生肖|解梦说梦 |
关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明 |
Copyright © 2023 eIT.com.cn. All Rights Reserved. | 豫ICP备2022012332号 |