当前位置: 首页 > news >正文

【Vue】前端的单页面模式和多页面模式

 

一、前言

  前端部分的搭建,需要考虑使用哪种模式进行页面之间的跳转交互,

  而项目内的页面交互,不可避免的需要相互之间的数据共享。

  这就引出了本篇博客的目的,一起来谈谈:项目前端部分的构建方式以及数据共享方式。

二、正文

  (一)、搭建前端部分所需要注意的问题

  1)方便性
     结合开发的时间需求和方便性选择适合的前端模式;

  2)性能
     在项目的体量比较大,或者某个页面需要加载较多文件时,会对加载页面所需时间产生影响

  3)浏览器的缓存
     在项目发布后如果文件(css/js/image)有更新,需要用户浏览器清理缓存才会从服务器获取更新后的文件,
     可以通过文件末尾添加时间戳和版本号来避免浏览器优先使用内部缓存文件这样的问题。

  4)文件的目录结构
     是按照文件的类别设置目录结构?还是按照不同页面设置?

     

  (二)、前端搭建的模式选择(多页面模式和单页面模式)

    

图片来源:https://blog.csdn.net/u013291076/article/details/53667382

  1)多页面模式(MPA  Multi-page Application):
    多页面跳转需要刷新所有资源,每个公共资源(js、css等)需选择性重新加载
    页面跳转:使用window.location.href = "./index.html"进行页面间的跳转;
    数据传递:可以使用path?account="123"&password=""路径携带数据传递的方式,或者localstorage、cookie等存储方式

  2)单页面模式(SPA  Single-page Application): 
    只有一张Web页面的应用,是一种从Web服务器加载的富客户端,单页面跳转仅刷新局部资源 ,公共资源(js、css等)仅需加载一次
    页面跳转:使用js中的append/remove或者show/hide的方式来进行页面内容的更换;
    数据传递:可通过全局变量或者参数传递,进行相关数据交互

两种模式对比:

页面模式多页面模式(MPA  Multi-page Application)单页面模式(SPA  Single-page Application)
页面的组成多个完整页面,
例如page1.html、page2.html等
由一个初始页面和多个页面模块组成,
例如:index.html和page1.htnl.js、page2.html.js等
公共文件加载跳转页面前后,js/css/img等公用文件重新加载js/css/img等公用文件只在加载初始页面时加载,更换页面内容前后无需重新加载
页面跳转/内容更新页面通过window.location.href = "./index.html"跳转通过使用js方法,append/remove或者show/hide等方式来进行页面内容的更换
页面跳转/内容更新所需数据的传递可以使用路径携带数据传递的方式,例如:http://index.html?account="123"&password=123456"",或者localstorage、cookie等存储方式

直接通过参数传递,或者全局变量的方式进行,因为都是在一个页面的脚本环境下

用户体验如果单个页面加载的文件相对较大(多),页面切换加载会很慢

页面片段间切换较快,用户体验好,因为初次已经加载好相关文件。但是初次加载页面时需要调整优化,因为加载文件较多

 适用场景 适用于高度追求高度支持搜索引擎的应用 高要求的体验度,追求界面流畅的应用
 转场动画 不容易实现 容易实现
 总结:
单页面模式:相对比较有优势,无论在用户体验还是页面切换的数据传递、页面切换动画,都可以有比较大的操作空间
多页面模式:比较适用于页面跳转较少,数据传递较少的项目中开发,否则使用cookie,localstorage进行数据传递,是一件很可怕而又不稳定的无奈选择

三、结语

前端的明天在框架,得学vue了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【软件架构】运用RUP 4+1视图软件架构设计(逻辑视图、实现视图、进程视图、物理视图和用例视图)...
  • 【软件架构】软件的设计图纸(用例图,类图,状态图,活动图,顺序图)
  • 【nginx】linux nginx 部署静态网页
  • 【servlet】servlet技术是否过时?
  • 【vue】vue.js不就是一个文件吗?安装vue是什么意思?
  • 【Vue】Vue引入bootstrap的方法
  • 【vue】vue发布
  • 阿里云ECS端口8080访问不了问题排查
  • 【网络】ECS 8080端口连接拒绝问题排查(服务器外网无法访问原因)
  • 【springBoot】SpringBoot入门最详细教程---研习
  • 【springBoot】controller,service,dao,mapper,model层的作用
  • 【springboot】什么是依赖注入
  • 【java】Java bean 是个什么概念?
  • 【web】Postman 使用教程详解
  • 【vue】vue项目结和start
  • Brief introduction of how to 'Call, Apply and Bind'
  • ES6 ...操作符
  • java2019面试题北京
  • LeetCode算法系列_0891_子序列宽度之和
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • overflow: hidden IE7无效
  • React Native移动开发实战-3-实现页面间的数据传递
  • socket.io+express实现聊天室的思考(三)
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Spring Boot MyBatis配置多种数据库
  • SwizzleMethod 黑魔法
  • ucore操作系统实验笔记 - 重新理解中断
  • 编写符合Python风格的对象
  • 对JS继承的一点思考
  • 简单数学运算程序(不定期更新)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 每天一个设计模式之命令模式
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 移动端唤起键盘时取消position:fixed定位
  • 【云吞铺子】性能抖动剖析(二)
  • 阿里云ACE认证学习知识点梳理
  • #07【面试问题整理】嵌入式软件工程师
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $jQuery 重写Alert样式方法
  • $refs 、$nextTic、动态组件、name的使用
  • (7)摄像机和云台
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (五)activiti-modeler 编辑器初步优化
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .Net Redis的秒杀Dome和异步执行
  • .NET 中 GetProcess 相关方法的性能
  • .NET开发者必备的11款免费工具
  • @Conditional注解详解
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解