Vue系列(1):单页面应用程序「建议收藏」

Vue系列(1):单页面应用程序「建议收藏」Vue系列(1):单页面应用程序

大家好,又见面了,我是你们的朋友全栈君。

前言:关于页面上的知识点,如有侵权,请看 这里

关键词:SPA、单个 HTML 文件、全靠 JS 操作、Virtual DOM、hash/history api 路由跳转、ajax 响应、按需加载、MVVM

SPA


我们先来看一下在百科上面的解释吧,emmmm,一般呢,我每次搜索一些不懂的词,都会习惯先去看百科里面的解释,反正我从来都不奢望能看懂,只是指望有个大概的框架的,哈哈~

单页面应用(SPA:single-page application),就是只有一张Web页面的应用,是加载单个HTML页面并在用户与应用程序交互时动态更新该页面的web应用程序。” — from 百度百科

单页应用(英语:single-page application,缩写 SPA)是一种网络应用程序或网站的模型,它通过动态重写当前页面来与用户交互,而非传统的从服务器重新加载整个新页面。这种方法避免了页面之间切换打断用户体验,使应用程序更像一个桌面应用程序。在单页应用中,所有必要的代码(HTML、JavaScript和CSS)都通过单个页面的加载而检索,或者根据需要(通常是为响应用户操作)动态装载适当的资源并添加到页面。尽管可以用位置散列或HTML5历史API来提供应用程序中单独逻辑页面的感知和导航能力,但页面在过程中的任何时间点都不会重新加载,也不会将控制转移到其他页面。与单页应用的交互通常涉及到与网页伺服器后端的动态通信。” — from 维基百科

是不是云里雾里?

What:SPA是什么?


简单点~说话的方式简单点~

  • 整个 webapp 只有单个HTML文件,所有操作都在这张页面上完成,由 js 来按需加载 HTML、CSS 和 JS
  • 多个HTML页面文件的幻觉呢,都是通过 js 来操作 dom 节点来动态实现的(所以跳转到一个新页面实质上就是,删除本页面 dom 节点,新增新页面 dom 节点。从这里呢引出了一个虚拟 dom 的概念,这个以后会说到的)
  • 不同页面之间的跳转幻觉呢,也是通过 js 控制 hash 或者 history api(go、back) 来进行路由 (这就是一个更加明确前后端分离的卖点了)
  • 最后通过 ajax 拉取数据实现响应功能

特点:

  • 速度:更好的用户体验,让用户在 webapp 感受到 native app 的速度和流畅
  • MVVM:经典的 MVVM 开发模式,,前后端各负其责
  • ajax:业务逻辑全部都在本地操作,数据都需要通过 ajax 同步提交
  • 路由:在 URL 中采用 # 号来作为当前视图的地址(http://xxx.com/#/),改变 # 号后的参数来载入不同的页面片段。(页面并不会重载!)

优点:

  • 分离前后端关注点,前端负责界面显示,包括页面跳转逻辑;后端则只负责数据管理(存储和计算),各司其职,不会把前后端的逻辑混杂在一起。
  • 减轻服务器的压力,服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力提高好几倍。
  • 同一套后端程序代码/接口,可以多处复用,不仅是同一个应用不用修改就可以用于web界面、手机、平板等多种客户端,同时也可以复用在不同应用上。

缺点:

  • SEO问题:对 SEO 不友好,但是可以通过 Prerender 等技术解决一部分
  • 前进、后退、地址栏等,需要程序进行管理
  • 书签,需要程序来进行控制

Why:为什么要用SPA?


SPA 与 MPA 的对比:

单页应用程序(SPA) 多页应用程序(MPA)
SPA如图 : SPA

MPA如图 : MPA

应用组成一个外壳页面和多个页面片段组成由多个完整页面构成
跳转方式片段跳转:把一个页面片段删除或者隐藏,加载另一个页面片段并显示出来。这是片段之间的模拟跳转,并没有离开壳页面页面跳转:从一个页面跳转到另一个页面
URL模式http://xxx.com/index.html#page1
http://xxx.com/index.html#page2
http://xxx.com/page1.html
http://xxx.com/page2.html
刷新方式页面片段局部刷新整页刷新
跳转后公共资源是否重载
页面间传递数据因为在一个页面上,所以可以设置全局常量来记录这些固定的数据,所以页面片段传递数据很容易实现依赖 URL, cookie, localStorage,实现麻烦
页面切换转场画面容易实现无法实现
用户体验页面片段间切换快,转场画面佳,用户体验好,包括在移动设备上页面间切换加载慢,不流畅,用户体验差,特别是在移动设备上
SEO需要单独方案做,有点麻烦可以直接做
特别适用范围对体验要求高的应用,特别是移动应用需要对搜索引擎友好的网站
开发难度高一些,MVVM 模式框架低一些,框架选择容易
维护成本相对容易相对复杂

How:怎么实现 SPA ?


MVVM框架: 诸如 AngularJS、Vue.js、React、Ember.js、Meteor.js、ExtJS 等面向网页浏览器的 JavaScript 框架采纳了单页应用(SPA)原则。
目前听到最多的还是前面的三大框架:Angular、Vue 和 React
当然,本系列我们还是主要讨论Vue,而且我也还要一边巩固熟练使用 Vue ,一边 Angular 新手上路,大家一起加油鸭!

转载于:https://www.cnblogs.com/chayin/p/9738686.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107280.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux卸载nps,Linux NPS服务部署

    linux卸载nps,Linux NPS服务部署一.安装NFS服务rpm-qa|grepnfsrpm-qa|greprpcbindyuminstallnfs-utils#如果检查的结果是没有安装,则使用该命令安装/etc/init.d/rpcbindstart/etc/init.d/nfsstart二.NFS的软件结构1.主要配置文件:/etc/exports这个档案就是NFS的主要配置文件了!…

    2022年5月2日
    217
  • Struts2之—实现自己的结果集的定义ajax

    Struts2之—实现自己的结果集的定义ajax

    2022年1月10日
    42
  • CSS加JS实现网页返回顶部功能

    CSS加JS实现网页返回顶部功能最近在设计自己的博客,前端页面在内容很多的时候往下拖动会有滚动条。通常我们都需要一个返回顶部的功能来实现快速来到网页顶部。当然实现方式不止一种,这里我采用的最实用的一种。使用CSS+Jquery方式代码量相对较少,容易理解。实现原理1.我们需要再DOM中添加自己的DIV,里面包含一个a标签,a标签里面包含两个img标签用于存放返回顶部的图片。2.添加必要的CSS样式3.然后…

    2022年7月15日
    15
  • 创建文件映射函数CreateFileMapping中第一个参数设置成0xFFFFFFFF

    创建文件映射函数CreateFileMapping中第一个参数设置成0xFFFFFFFF创建文件内存映射:HANDLEhMySharedMapFile=CreateFileMapping((HANDLE)0xFFFFFFFF),NULL,PAGE_READWRITE,0,0x1000,"MySharedMem");其中第一个参数文件句柄设置成0XFFFFFFFF代表什么意思呢?0XFFFFFFFF在内存中又是什么意思呢?为什么要把文件句柄设置成0XFF…

    2022年5月16日
    45
  • javah是什么命令_SQL命令

    javah是什么命令_SQL命令今天看了《android框架揭秘》一书中的jni这块,按照书上的写法试了试javah命令,  今天通过javah生成h文件时遇到各种问题。不管是javah-classpath参数啊还是别的什么,一直都无法成功通过class文件生成h文件。  想了想应该是路径问题,现在终于成功编译出来了~  先在cmd命令行里面切换到工程的目录  调用javah命令时,j

    2022年9月24日
    1
  • 22.IMU和里程计融合

    22.IMU和里程计融合1.概述实际使用中会出现轮子打滑和累计误差的情况,这里单单使用编码器得到里程计会出现一定的偏差,虽然激光雷达会纠正,但一个准确的里程对这个系统还是较为重要2.IMU数据获取IMU即为惯性测量单元,一般包含了三个单轴的加速度计和三个单轴的陀螺仪,简单理解通过加速度二次积分就可以得到位移信息、通过角速度积分就可以得到三个角度,实时要比这个复杂许多2.1PIBOTIMU…

    2022年6月29日
    148

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号