龙空技术网

基于MVVM模式的Web前端框架研究与应用

一个很哇塞的大朋友 258

前言:

今天看官们对“jquery圆盘抽奖代码”大约比较珍视,咱们都想要剖析一些“jquery圆盘抽奖代码”的相关知识。那么小编在网络上网罗了一些有关“jquery圆盘抽奖代码””的相关内容,希望姐妹们能喜欢,朋友们快快来学习一下吧!

随着网络科技的高速发展以及移动互联的兴起,前端领域也实现了大跨步发展。但是,由于传统的Web开发方法比较繁琐复杂、开发周期较长、性能低、后期维护困难,原有的技术基础根本就无法适应越来越复杂的Web应用,如果还在采用以前老的架构,对View层的使用将会无法保障,这也正是前端架构要继续发展的主要因素,于是前端MVVM架构就应运而生,前端架构化发展模式也成为了现在的潮流。

关键词:MVVM模式;Web前端框架;运行;研究

ABSTRACT

With the rapid development of Web technology and the advent of the mobile Internet, the front-end field has achieved great strides. However, traditional web development operations are cumbersome and complex, with long development cycles, low performance, and difficulty in post-maintenance. The previous technologies cannot satisfy increasingly complex web applications. If the old framework is still used, operations on the View layer will be difficult. It is difficult to maintain, which is the main reason why the front-end framework needs to evolve continuously. The front-end MVVM framework came into being, and the front-end framework development mode has become the mainstream now.

Key words: MVVM pattern; Web front-end framework; Operation; Research

目 录

第一章 绪论......................................... 7

1.1研究背景.................................................... 7

1.2研究现状.................................................... 7

1.2.1国外前端开发现状...................................... 8

1.2.2国内前端开发现状...................................... 8

1.3研究内容.................................................... 9

第2章 相关概念和理论界定.......................... 10

2.1Web前端概述................................................ 10

2.1.1 Web前端发展概述..................................... 10

2.1.2 Web前端工作机制..................................... 11

2.1.3 Web前端请求与响应机制............................... 12

2.2 MVVM模式.................................................. 13

2.2.1 MVC模式............................................. 14

2.2.2 MVVM模式............................................ 15

第3章 前端MVVM框架的运行原理..................... 15

3.1 Web前端构架发展历程....................................... 15

3.1.1 HCJ时代............................................. 15

3.1.2 AJAX时代............................................ 15

3.1.3 MV*时代............................................. 16

3.2前端框架的分类与对比....................................... 16

3.3前端 MVVM 框架的运行原理................................... 17

第4章 前端 MVVM 框架实现的关键技术................. 18

4.1数据变化的监听............................................. 18

4.2双向绑定的实现............................................. 18

4.3发布-订阅模式的应用........................................ 19

4.4使用DocumentF ragment优化性能............................. 20

第5章 结语......................................... 20

参考文献............................................ 21

致谢................................................ 21

第一章 绪论

1.1研究背景

随着网络科技的高速发展以及移动互联的兴起,前端领域也实现了大跨步发展。从原来单纯的静态网页,发展到可以通过ASP、JSP、PHP等进行网页的动态交互,再到Web二点零可以通过AJAX技术进行页面异步更新,并伴随着SPA(单页应用程序)的出现,多个网页前端框架也纷纷诞生,给前端技术的发展方向带来了全新的生机。Web前端开发的重点工作是充分展示在HTML网页中的内容,完成对HTML标签的可视化展示。传统的Web技术,设计、编码以及各种发布过程都繁琐而复杂,其主要使用对象为DOM (Document Objcct Modcl),亦即文件对象模型。DOM运算比较繁琐复杂,当DOM树的结构、元素所占空间多少、网页窗口尺寸大小等因素改变后,就会导致了网页的重排,在重排后,网页引擎就需要重新考虑各个元素所占用的空间位置和显示数量,这就会提高了网页的渲染时间。在SPA出现以前,通常以页为基本操作单位,在向用户提供了表单数据之后,前后端要传输大量的数据,通信质量较差。使用MVC模型时,除Model、View以外的所有部分,其余业务逻辑都在Controller中,它主要负责显示用户界面、应答用户的操作、网络请求和与Model通讯等,这也造成了Controller的逻辑繁琐、负载过高、不易维护、耦合度高、测试难度大等问题。现如今,随着手机、iPad等个人电子设备不断的出现在人们的视野中,而网络也迅速地加入到了人类的生活与工作环境中,WebApp的到来不仅拓宽了Web的发展道路,也同时提高了Web的研发复杂度,对代码复用性能、平台跨越的困难程度、可维护性、扩展性等,都对开发提高了不同程度的需求。

在Web前端技术高速发展的大背景下,通过采用MVVM模块的前端架构,可以减少模型间的耦合度和测试复杂度,并增加了插件库代码复用性、扩展性、可维护性;通过VirtualDOM提升了编译速度与渲染速率,从而降低了页面空白感,并改善了使用感受。综上所述,有必要对基于MVVM模型的Web前端架构展开深入研究。

1.2研究现状

1.2.1国外前端开发现状

海外前端开发起步早于中国国内,因此出现了不少高水平的前端开发架构,但不再是仅针对于桌面终端,而随着移动端的流行,也产生了支持移动端的前端架构。下面的几个前端框架是在国外较为常见的:

(1)Prototype

Prototype是原型的意思。JS的所有面向对象展开,如DOM动作,事件等都可以被Prototype所界定,有了Prototype编写一些面向对象的JS也就更加容易,其中Prototype框架就将Ajax这种专门处理异步交换问题的框架纳入了分叉处中,也就为后来很多更高级的框架奠定了一层基石,是功能最强大的JS扩展库。

(2)JQuery

JQuery'S同时也是个非常棒的JS架构。它是轻量级的JavaScript库,对CSS三以及不同版本的web浏览器都有非常好的兼容性,同时在JQuery后面还开发了JQuerymobile以方便在移动端的开发,实现起来比较麻烦的DOM操作、Ajax交互操作、动画效果、event事件等也能够使用jquery轻易的完成。

(3)YUI

雅虎集团此前发布的(Yahho User Interface Library, YUI)技术框架门,主要使开发者可以更迅速地发布具有高度交互性和高度稳定性的Web Application。刚开始时候,YUI结构还只在Yahoo公司企业里面应用过,因为使用者的体验很良好,所以Yahoo公司企业最后选定了将YUI结构实现开放,开放后的YUI开放后的YUI不但有了更多的使用者,并且也不仅仅单纯的雅虎的开发人员,其他公司企业的开发人员也加入到了扩展维护YUI的队伍当中。

(4)AngularJS

AngularJS是一个拥有大量UI组件,用来设计Web页面的。此结构实现了项目的生命周期整个流程,并提出了Web应用结构,能够大大减少人工的DOM动作,并实现和JQuery完全结合。

1.2.2国内前端开发现状

二十一世纪,随着Web浏览器技术的日益完善,Web系统功能和应用也将日益丰富而多彩。这几年,由于互联网科技的蓬勃发展,互联网和人类的生活关系更加密切,而与此同时,由于Web作为接口,其和应用的关联是最紧密的,因此更多的中国人也更加关注于Web前端技术开发。目前,中国国内的Web前端理论、技术与国外虽存在差异,但总体水平己经到达了一个较高水平程度,不少国内外著名网络企业也相继研制出了许多先进的前端架构,并将这种架构实现为公开源代码,包括了腾讯、淘宝和百度等所采用的前端开发架构。

(1)百度-Qwrap

百度前端技术团队所开发的JS架构QWrapl",具有非常好的与网站相容性。其好处是:融入了JQuery、Prototype、YUI2和JS一点六的优势特点,冲破了JQuery"注重于DOM"的限制,可以提供Prototype的原型功能,YUI2一样的静态计算库,同时也提供了JS一点六的泛型操作功能,给用户带来了很大的方便。

(2)腾讯_JX

JX是模块型的非侵入型Web前台架构,是Javascript eXtension tools的简称,即Javascript扩充发展工具套装。根据JX中国官方网页的说明,JX架构对于所有Web Page以及Web App等项目的开发者都可以适用,腾讯企业也通过此架构发展了Web QQ等项目。并进行了开放,后来也公布在了GitHub上。JX的内核组件主要是针对JavaScript进行了功能增强,因此具有良好的浏览器相容性。而JX还有一个最大好处,就是支持多个版本共存来增强项目的可扩展性,就算老的版本不能兼容最新版本的JX,也无碍,因为几个JX版本都能够共存在同一个项目里。另外,JX还能够和JQuery、YUI、Prototype等各种JS架构实现了无缝整合。

(3)淘宝-KISSY

KISSY是由淘宝工程师研发的提供淘宝内部应用的前台系统设计架构,KISSY和前面的架构都是完全开放的.KISSY主要有CORE和UI组件二部分构成,KISSY实现了诸如flash、graph、chart、模板引擎、转盘摇奖、国产网页检测、播放语音验证码等几个相对较为新颖的功能组成部分。

1.3研究内容

论文主要分为五章:

第1章为绪论。本人经过检索了有关文献资料,并提出了论文的研究背景、对中国国内前端开发的发展状况进行了总结,并提出论文的主要研究内容。

第2章是相关概念和理论界定。对本文的核心内容Web前端和MVVM模式做了详细的介绍。

第3章是前端MVVM框架的运行原理。同时梳理了Web前端构架的发展历程,对前端框架的类型做了整理与对比。

第4章则是由前端MVVM架构所实现的关键技术。从数据变化的监听、双向绑定的实现、发布-订阅模式的应用以及使用DocumentF ragment优化性能四方面做了详细的阐述。

第5章是结语。

第2章 相关概念和理论界定

2.1Web前端概述

2.1.1 Web前端发展概述

Web前端技术是在制作Web应用界面时,利用HTML、CSS、JavaScript等先进技术手段,进行与互联网产品和使用者间通讯互动的技术手段。Web前端技术是由网站设计制作发展过来的,并具有明显的新时代特征。在网络的发展流程中,最前期的网页内容大多以静态网页为主,以为使用者提供浏览图像、文本等信息内容为主要目的。而后期,由于网络信息技术的发达以及HTML5、CSS3等新技术的运用,所制作的网站画面也更为漂亮,互动效应更为明显一千二百二十一。网页前端的发展流程如图二点一所示,大体历程上可分成如下几个阶段。

图2.1 Web前端发展历程图

(1)Web1 .0只读的互联网时代

一九九零年12月25日,加拿大的知名计算机科学家timBernerS-Lee,在自已的个人计算机上成功组织部署了由一个计算机+网络+WeB浏览器三者所组成的Web系统,并利用Internet技术完成了HTTP代理和系统客户端服务器相互之间的第一次通信。这个壮举标示着b/s结构网络的开始,同时也是Web前端发展的开端。从一九九三年四月第一个网页MosaiC的推出,到一九九四年Navigator浏览器推出,再到次年w三C的诞生,这一批技术的诞生,都标示着万维网正式步入了规范化的阶段。但这阶段网站的画面还相当原始,而且绝大部分组成元件都只是HTML标记,完全是纯静止的浏览器页面。

(2) Web2.0交互的互联网时代

二零零四年之前的动态主页都是由后端信息技术推动的,尽管做到了动态交互式和数据分析信息及时存取,不过每一次的数据分析信息交流都必须刷新下一个主页。而繁琐的主页刷新工作十分影响用户的感受,直至Ajax科技的应用后,这一一问题才得以了缓解。Ajax科技通过在实现流程中引入了异步HTTP请求技术,这使得如果主页还没有刷新就已经能够启动HTTP请求,用户也就无需期待请求的回应,而是能够持续访问主页并完成其它动作。Ajax科技开启了Web二点零的新时代。在这一时期,前端越来越重视与使用者的互动功能,在工作模式上也从"读"向"写"乃至"同步建设"方向快速发展。

(3)Web3.0聚合的互联网时代

二零零九年,RyanDahl以ChrOme的V八引擎为基础,研发了基于事件循环的异步I/O架构Node.js。Node.Js让前台开发者能够使用JavaScript发布伺服器端编程,因此受到了前台开发者的青睐。很快,大量的Node.js用户也建立了一个可以用NPM包管理工具管理的Node.js生态。之后Node.js又衍生了Node.Webkit等新项目,大大丰富了JavaScript发布跨网络平台编程的桌面使用软件的能力。二零一五年六月,ECMAScript6.0推出,该版本中添加了许多全新的语法,极大的丰富了JavaScript的发展能力。因为部分网页对ES六编程语言的支持比较滞后,因此产生了Babel和TypeScript等工具,来将ES六代码翻译成与大多数网页都相容的ES五代码。目前ES六标准已经更名为ES2015,之后每年都会推出最新的ES标准,这标志着JavaScript的发展速度必将更快,也标志着与Web三点零整合的新互联网时期的到来。

2.1.2 Web前端工作机制

目前,大多数的网页站点都是采用HTTP协议实现消息传送。当用户在访问网站时,将会使用网页向服务器端发出HTTP请求,而服务器在接受到发来的邀请信息后,将会搜索出用户要求的相关信息内容,并把所搜索出的信息内容通过网页反馈给用户。整个流程大体可分七步。客户端/服务器的工作原理如图2.2所示。

(1)用户发送请求;

(2)通过浏览器对接受到的内容进行分析,对于解析到的内容会申请DNS域名服务系统,然后再把域名解析为IP地址;

(3)通过分析出来的IP地址,实现了网页和服务器之间的链接;

(4)向用户发出HTTP报文,Web浏览器收到并回应要求,从而找到了特定的HTML资源或文件;

(5)对于在HTML资源文档中嵌套有应用程序的,服务器会先运行应用程序。若在应用程序中涉及数据库查询等操作,则服务器会自动撤销查询等操作;

(6)Web服务器把用户申请的结果反馈给网页后,服务器和网页间的链接断开;

(7)通过浏览器了解HTML资源文件,在计算机显示器上的表示结果。

图2.2 客户机/服务器的工作原理图

2.1.3 Web前端请求与响应机制

B/S模型的WeB系统框架是目前最为普遍的框架,其主体结构包括了网页(B)和客户端服务器(S)两个部分。网页主要负责给用户创造可视化的页面,用户能够用网页提出申请并完成网页使用;而客户端服务器则主要负责完成对申请信息的处理过程,对处理过程成果做出反馈。在一般情况下,网站服务器主要是用于部署网页应用,而客户端则是利用网页和客户端之间实现的互动。Web业务站在正常上班时,Web网站服务器设备必须处于启动状态,并时刻准备好接受管理网站服务器端传递出去的要求,当用户从网站传送一个要求给服务器设备时,服务器设备就会按照要求的参数(要求的地址、类型等)自动转发并调出相关的后台系统系统模块完成处理程序,并把数据处理结论按照一定的格式传递给网站服务器端,具体流程如图二点三图表。

图2.3 Web前端请求响应过程图

2.2 MVVM模式

构架也可以认为是一个互相协调的大类,而且针对于专门的一种技术使用软件系统,构架还实现了复用的功能。因此构架也可以减少了技术使用软件系统的服务费用成本,并提高了工作速度和质量。与此同时,因为构架也能够面对不同的专门问题领域,因而构架也能够被划分为领域等级、领域等级以及支持等级。领域等级的构架通过将不同技术加以打包而完成了在不同领域的应用,领域等级的构架则面对某个领域中的专门问问题并给予了专门的解决方法,而支持等级的构架则提供了一些和计算机系统底层有关的专门服务。因此本文所关注的框架为应用系统中提供了一种共通的结构,以及基本的应用层次框架。

MVVM结构是一个新结构框架,它是立足于MVP(Model-View-Presenter)模型,而且借鉴了WPF的新优点,可以适应于更复杂多样的客户要求。其模型图如图2.3所示:

2.2.1 MVC模式

(1)MVC模式

它的原理就是界面展示与数据模型分离,修改展 示界面并不需要重新编写业务逻辑。

Model(模型):模型存放着应用的所有数据对象, 因此包含数据和行为,模型不包含视图与控制器之间 的逻辑,但是模型提供了模型数据查询和模型数据的 状态更新等功能。

View(视图):对模型进行视图的展示,视图是展 现给用户的,就是我们能见到的页面。 Controller(控制器):控制器可以理解为是模型与 视图的桥梁,集中性地管理事件触发、视图触发,当页 面加载完成时,控制器进行监听交互,做出对视图的 选择,委托模型更新数据。

各部分之间的通信方式如下:

View传送指令到Controller,Controller完成业务逻 辑后要求Model改变状态,Model将新的数据发送到 View,用户得到反馈。

(2)MVC模式的缺点

缺点一:控制层和视图层进行耦合,一发而动全 身,并没有实现真正的分离和重用。

缺点二:架构以牺牲代码的复杂性为代价,对于小 项目降低开发效率。

2.2.2 MVVM模式

(1)MVVM模式

View和Model层没有直接的联系,通过ViewModel 进行双向交互,实现了真正的前后分离。 View表示我们网页,Model表示数据模型,因为 MVVM的控制器并不会去监听浏览器的事件,而是监 听一个属性表,由浏览器的事件修改属性,以触发控 制器中的方法,增加了一层控制业务的属性,而这层属 性被称为ViewModel,View与Model通过ViewModel就 实现了双向绑定。

MVVM模式采用双向绑定(data-binding):View 和Model之间的同步工作完全是自动的,ViewModel通 过双向数据绑定把View层和Model层连接起,负责把 Model的数据同步到View显示出来,还负责把View的修 改同步回Model,所以开发者只需要关注自己的业务逻 辑。这也是MVVM的核心思想:关注Model的变化,让 MVVM框架利用自己的机制去自动更新DOM,从而把 开发者从操作DOM的繁琐中解脱出来,不需关注数据 状态的同步问题,也就是所谓的数据和视图分离,数 据驱动视图,视图不影响数据。

(2)MVVM的优势

优势一:低耦合。视图独立Model变化和修改,一个ViewModel同时绑定到多个视图上。

优势二:可重用性。可以把View逻辑放在V iewModel里面,重用这些视图逻辑。

优势三:独立开发。通过MVVM,开发人员可以专注于业务逻辑和数据开发在viewModel里面,分工更加明确。

第3章 前端MVVM框架的运行原理

3.1 Web前端构架发展历程

3.1.1 HCJ时代

最早期的Web界面非常简单,以一般用户浏览为主,页面元素设计和渲染都非常简单,前端页面基本上都是HTML的代码。有时为对业务内容进行管理,也会在HTML中添加部分JavaScript。而且为增加网页的整体布局与美观性,会在HTML中添加CSS样式。这种时代前端代码的组织结构非常的简洁粗陋,而且功能上也非常局限。

3.1.2 AJAX时代

这个时代得益于AJAX的出现以及JS基础框架的兴起。这个时代最为明显的进步就是使用AJAX可以直接异步请求服务器端接口,从而实现了简单的Restful请求规范。同时DOM操作被框架封装好,可以很方便地调用。

3.1.3 MV*时代

这个时代是一把双刃剑,MVC、MVVM等框架真正让前端的开发迎来了春天,前端开发者可以利用框架进行模块化开发和业务数据的组织,但是这个时代兴起的框架非常多,每个行业和公司青睐的框架各有差异,从而加大了前端开发人员的学习任务。

3.2前端框架的分类与对比

随着Web前端的快速发展,各种Web系统设计构建也开始大量出现,而目前最具国际标志性的有Vue、React、Angular等3种基本结构。

Angular成立于二零零九年,是由Google所推出的一个备受争议的新架构,之前已经广泛地使用在了Google的所有项目当中。尽管Angular具有许多特性,但同时又有着明显的劣势。相对于Vue和React,Angular由于庞大的学习成本和相对笨重的庞大系统,导致其市场份额正在逐渐下降。

React是由Facebook团队于二零一三年开始发布的一个相对完善的前端开发框架。该构建主要用来建立UI,开发者也能够从React中导入很多参数。而由于React具有的操作灵活性、高效以及声明型设计等优势,这也使得它马上就成为了Angular之后的另一个更加完善的构造。

Vue是由国内研究者尤雨溪教授于二零一五年研发的一个非常先进的轻量级前端架构,它借鉴了Angular和React中的虚拟DOM、双向数据信息捆绑、构件化设计等的优点,并做出了相应调整。但是相比于Angular来说,Vue更为的轻量也更为的灵活了一些。而相比于React来说,尽管二者都引入了虚拟DOM,而且提供了可选择和响应式的视图控件,但是React的统计信息捆绑仍然是单向的,并且不提供指令和过滤等的功能。但是,由于Vue有着相对低廉的教学生产成本,更适于给不同层次的开发者应用,这也使得它迅速获得了广大开发者的认可。经过比较与数据分析,我们最后使用Vue架构来进行了下面的研发。

3.3前端 MVVM 框架的运行原理

本章将以Vue.js为例,讲解前端MVVM框架的实现原理。Vue.js是目前前端开发领域很火的一个框架,它是对MVVM架构模式的一个实现,通过双向数据绑定连接视图层和数据模型层,而实际的界面UI操作(DOM操作)被封装成对应的指令(Directives) 和过滤器(Filters) 。Vue.js 的原理如图2.4所示:

在Vue.js的架构图中,Observer 相当于观察者模式中订阅者对象的代理,它的主要作用是监听数据模型的变化,并将数据变化通知给订阅者: Compile 是一个编译器,它的作用是对视图(Web 前端中即HTML元素)中绑定的指令编译解析,根据定义的动态模板将指令替换为最终展示给用户真实数据,同时它还用于绑定界面对应的更新函数: Watcher是订阅-发布模式中订阅者的实现,它的作用是订阅数据变化的通知来执行指令所绑定的回调函数,同时Watcher还充当了连接监听器Observer和指令编译器Compile的桥梁;Dep的角色相当于一个消息订阅器,它的主要作用是维护订阅者Watcher的信息,当系统中的数据发生变化时出发通知函数(notify) 并调用Watcher的更新方法(update) 来进行视图的更新。

当新建一个Vue对象时,框架进入初始化阶段。Vue 在初始化阶段主要执行两个操作:一是遍历系统中数据的所有属性,来对各个属性的变化添加监听:第二个操作是利用指:令编译器Compile对视图中绑定的指令进行扫描进行视图的初始化,然后订阅Watcher 来更新视图,此时Watcher 会将自己添加到消息订阅器Dep中。至此,Vue的初始化过程结束。

在系统运行过程中,一旦系统中的数据模型发生了变化,观察者Observer的setter访问器属性就会被触发,此时消息订阅中心Dep会遍历它所维护的所有订阅者,对于每一个订阅了该数据的对象,向它发出一个更新通知,订阅者收到通知后就会对视图进行相应的更新。以上过程不断往复循环,这就是MVVM模式在Vue.js中的运行原理。

第4章 前端 MVVM 框架实现的关键技术

前一章节中以目前比较火的框架Vue.js为例介绍了前端领域中MVVM模式的实现原理,本章将针对上述原理图,深入分析前端MVVM框架实现的关键技术。主要包含以下几点。

4.1数据变化的监听

在 Web 前端中,数据变化的监听主要通过对象的访问器 属性来实现。访问器属性是通过 Object.defineProperty() 方法来实现,它不能直接在对象中进行设置。具体使用方法如下:

varo={};

Object.defineProperty(o,'propA',{

get:functionO{

11 return something中

},

set:function(value){

/1 do something here…

}

});

通过,上述方法即给对象o设置了访问器属性,当使用o.propA语句获取对象o的propA属性时,内部的getter就会被自动调用:当使用o.propA=someValue来对对象o的propA属性进行赋值时,内部的setter访问器就会被自动调用。可以在setter和getter访问器属性被自动调用时来进行一些逻辑处理,这样就实现了对数据变化的监听。

4.2双向绑定的实现

双向绑定即将视图View和数据Model进行相互关联,使一端的变化能同步反映在另一端。在前端中,这主要通过上一小节中介绍的对象的访问器属性和HTML元素的事件监听来实现。

例如,对于一个输入框视图<input type=' text'id=' myText' />,要将其与数据对象o的propA属性进行双向数据绑定。则可以按照如下的步骤来完成:

var 0={;

Obect.defineProperty(o,'propA'{

set:function(newValue){

document.getElementByld(“myText’).value-newValue;

//在Model发生变化时,更新对应的视图

}

});

document.getElementByld(‘myText’).addEventListener

(‘keyup’,function(e){

o.propA=e.target.value;//监听View的变化,同步

更新Model

});

4.3发布-订阅模式的应用

上述介绍了简单的一对一双向绑定的实现,即一个数据模型只与一个视图进行绑定。当多个View与一个Model进行绑定时,每次更新Model时需要在Model的set访问器属性中更新多个View,这样硬编码的方式不利于后期的维护。为了解决硬编码带来的耦合性过强的问题,在实际实现中,需要使用到设计模式中的发布-订阅模式。

发布-订阅模式(又称观察者模式)是一种常用的设计模式,该模式包含发布者和订阅者两种角色。可以让多个订阅者订阅同一个发布者发布的主题,当发布者的主题发生变化时,对外发送一个通知,所有订阅了该主题的订阅者都会接收到更新的消息。因此,观察者模式定义的是一种一对多的关系。

可以看到,发布-订阅模式非常适合于MVVM双向绑定中多个视图绑定到同一个数据模型的情形。通过将视图看作一个观察者对象,如果该视图与某个数据进行了双向绑定,则将其加入到数据模型的订阅列表中,当数据变化时,这些视图就能得到通知以进行更新。

4.4使用DocumentF ragment优化性能

在某些情况下,当数据发生改变时可能需要动态生成界面元素(HTML标签)并插入到视图对应的位置。如果生成的数据量较大时( 例如根据数据生成一个很大的列表,然后将列表逐条插入到页面中),会引起页面多次重绘而影响性能。这种情况下,可以使用DOM (Document ObjectModel)中的文档片段对象即DocumentFragment来提升性能。

DocumentFragment即文档片段,在片段其中可以含有多个子节点,因此文档片段的作用相当于是一个节点容器。在将文档片段插入到HTML页面中时,只有它的子节点会被插入目标节点。由于文档片段中的节点操作都是在内存中执行完毕后一次性插入到DOM中,而不是逐条插入DOM,因此它的性能和速度比直接操作其中包含的子节点要有很大提升,这是Web前端性能优化很重要的一种方法。因此,当多个视图元素被插入到界面中的同一位置时,可以先将它们都挂载到一个文档片段,经过处理后,将整个文档片段返回插入挂载目标。

第5章 结语

前端MVVM已成为主流,前后端分离也逐渐成为未来趋势, MVVM模式是前端模块化、工程化的重要设计思想,在互联网高速发展的今天,面对越来越复杂化的应用场景, 之前的MVC框架逐渐被MVVM框架替代。MVVM模式对前端开发的效率有了大的提高,对于前端模块化开发有了质的提升,让前端代码更加简洁易维护和易测试。MVVM框架固然有很多优秀的概念和组件,但是MVVM框架只是一个模式而已,不是有了MVVM框架就能写出优美的代码,涉及到具体的业务逻辑,还是需要开发团队有足够强的设计能力。新的技术总是接踵而至,在计算机领域时刻都要迎接更加优秀的技术的来临,让我们一起迎接MVVM这一轮新技术的浪潮。

参考文献

[1]莫文水.Web前端中MVVM框架的应用研究[J].网络安全技术与应用,2017(4):64-64.

[2]肖小岚,刘振宇.基于MVVM模式的Extjs框架在前端界面设计中的应用研究[J].电脑知识与技术:学术版,2016(2Z):84-88.

[3]孙连山,李云倩.MVVM框架在Web前端的应用研究[J].电脑知识与技术:学术版,2016(2X):45-46.

[4]何焕春,杨怿.基于MVVM构架的Web前端框架研究[J].电脑知识与技术:学术版,2017(8X):59-60.

[5]易剑波.基于MVVM模式的WEB前端框架的研究[J].信息与电脑,2016(19):76-77+84.

[6]朱海萍,丁西,刘链.Web前端中基于MVVM框架的技术应用研究[J].科技资讯,2020,18(30):8-10.

[7]郭蕊,赵元苏.Web前端框架技术综述[J].北京工业职业技术学院学报,2021,20(3):24-27.

[8]方生.基于“Vue.js”前端框架技术的研究[J].电脑知识与技术:学术版,2021,17(19):59-60+64.

[9]周锡玲,彭成辉.《Vue前端框架技术》课程融入思政元素[J].电脑知识与技术:学术版,2021,17(20):215-216.

[10]吴宇鹏.Web应用前端框架的设计与应用[J].信息与电脑,2021,33(18):128-130.

[11]陈上.基于HTML5技术的WEB前端框架的设计及应用[J].科技创新与应用,2021,11(33):63-66.

[12]何莉.Bootstrap前端框架技术的应用研究[J].信息记录材料,2021,22(11):171-172.

标签: #jquery圆盘抽奖代码