传统的网站会不断跳转页面, 例如单击搜索后会跳转页面,单击翻页后会跳转页面, 而一旦出现跳转页面,用户就需要等待重新加载页面后才能继续操作。

为了改进这种糟糕体验,单页应用的概念逐渐流行, 单页应用指的是在浏览器中运行的应用,使用期间不会重新加载页面。 简单地说,就是把多个页面合成一个页面,通过JavaScript脚本控制其元素的显示。

下面,我们分别讨论一下这4个核心问题

  1. 单页应用的工作原理是什么 
  2. 整个前端项目做成一个单页应用好吗 
  3. 我们推荐的单页应用运用方式是什么
  4. 使用Iframe实现伪单页应用 

1、单页应用的工作原理是什么

首先,我们先讲单页应用的工作原理, 这里先明确一点,单页应用本身只是一个概念,其实就是把多个网页合成一个网页。 很多人会误以为只有使用一些框架或工具才能实现单页应用(如vue-cli、react-cli、Angular2及后续版本) 。只因为它们提供了完备的模块化、路由方案,所以使用这些工具开发单页应用是相对容易的。但其实单页应用就是一个页面,只不过是复杂的页面 ,其基本技术还是Html、Css、JavaScript。

单页应用的工作原理 简单地说,就是JavaScript监听事件发生,当事件发生后,JavaScript会控制页面元素的显示。

其具体的实现方式,有2种

1、通过交互事件控制 

2、通过路由控制

通过交互事件控制页面元素的变化是相对普遍的做法 ,对于一些相似的页面,如列表页面、左导航右文章等页面 这些页面如果是点击翻页或者切换导航,页面其实只有数据变化,而页面布局是几乎不变化的, 对于这些页面,其实只需要监听点击或其他交互事件 ,然后向服务器请求新数据,最后替换数据就可以了。

但是对于元素布局及内容完全不同的页面之间,如列表页和视频播放页, 如果要将这些页面通过监听交互事件的方式做成单页应用的话 ,则会变得很麻烦 ,对于这种场景,就可以通过路由的方式控制。

控制路由的方式,简单地说,就是监听URL的变化,来控制页面元素的显示。 路由的方式有hash和history 两种。

hash方式的工作原理是,监听浏览器地址的# 号部分的变化,以显示页面元素, 由于浏览器地址的# 号部分的变化是不会引起页面跳转的,所以在列表跳转到播放页面的时候仍然可以使用a标签。

history方式的工作原理是,使用history.pushState、history.replaceState等浏览器API去修改浏览器地址 ,用这些API修改浏览器地址的话,是不会引起页面跳转的 ,JavaScript监听到浏览器地址变化后,会控制页面元素的显示。

2、整个前端项目做成一个单页应用好吗

接下来,我们讨论整个项目做成一个单页应用真的好吗 ?我们的答案是不好,尤其是中大型项目。

我们曾经参与过一个项目, 把300多个页面做成一个单页应用, 本地打开需要几分钟,性能差点的机器直接崩溃, 后面也做了一些优化,如懒加载,分离子项目等, 性能有所提升,但是性能还是不好。

其实网页本身就不适合做成应用的模式, 网页的优点恰恰在于页面分散,用户无需像APP一样下载安装, 只需要在需要的时候再下载相关页面就可以了。

单页应用概念的初衷是缓解不断跳转的糟糕体验 ,如果极端地把整个项目做成一个单页应用 ,它就跟桌面应用、APP没有区别了, 需要长时间的下载以换取流畅的体验 ,再说了,浏览器的内存管理并没有操作系统的好 ,一个内容超多的网页的性能也不会流畅。

那么,把整个项目做成一个单页应用 ,那还不如直接做成一个桌面应用或者APP, 毕竟,现在也有很多成熟的跨平台解决方案了。

所以,目前如果决定把整个个中大型项目做成一个单页应用的话 确实是比较鲁莽的行为。

当然,未来也不是说不可能, 谷歌也在努力推动Chrome操作系统,推动网络应用的发展 但是,目前来看,不太现实 毕竟网页做出来,是给现在的人用的

3、我们推荐的单页应用运用方式是什么

接下来,我们讲一下我们推荐的单页应用的应用方式 第一,我们不推荐把整个项目做成一个单页应用 第二,我们只推荐把一些相似的网页做成一个单页应用。

例如,相似的列表页可以做成单页应用,点击翻页、导航切换时, 只需要更换数据或一小部分页面元素就可以了。

至于完全不同的页面,如视频列表页和视频播放页 ,则完全没必要整合成单页应用,因为浏览器本身是有缓存机制的, 即使跳转也不会花太长时间。

另外,把不同的页面分离还有一些好处, 如页面性能可以单独调整,而不是面对一大堆代码无从下手。

最后,我们讨论使用iframe实现伪单页应用 ,我们推荐不同的页面需要分离开来 ,那么,如何更加便捷地组织这些页面呢?

4、使用Iframe实现伪单页应用

我们推荐使用iframe的方式组织这些页面, 也就是伪单页应用的方式?这样的话,用户看到的页面其实是两层的, 上层是固定不变的,如顶部导航、用户信息、提示框、提示信息、底部网页地图等 ,下层是通过Iframe加载的页面。

这样做的好处是,既可以减少固定元素和固定信息的重复加载 ,又可以很好地组织切换不同的页面。这种方式是很多网站常用的做法 ,也是我们试验下来比较好用的做法。

当然,如果用这种方法的话,需要解决几个问题

第一,是Iframe框需要根据内容自动变化高度,子页面可以使用window.MutationObserver等方式监听并修改父页面的Iframe框高度 。

第二,是拦截a标签的跳转,并通知上层导航找到真实的地址并替换iframe中的页面,这样,就可以使用页面识别码跳转子页面了。

我们的官网就是使用这种iframe方式做的, 体验上还是比较好的, 后续我们会整理相关文档,把相关代码开源 。

总结

单页应用本身只是一个概念, 就目前而言,把整个项目做成一个单页应用的话, 如果是小型项目的话还可以。 如果是中大型项目的话则不现实 ,如果真的必须保证使用过程的流畅度的话 ,那还不如把它做成一个桌面应用或者APP。

【网站架构】为什么我的单页应用这么慢,打开页面需要几分钟?怎样才能用好单页应用?现阶段把整个项目做成一个单页应用真的可行?单页应用的工作原理是什么?相关推荐

  1. java 打开新页签_java – GWT打开页面在一个新的选项卡

    我正在开发GWT应用程序,我使用 com.google.gwt.user.client.Window.open(pageUrl, "_blank", ""); ...

  2. ubuntu 压缩率最高的软件_不用写采集规则也可以轻松采集网站文章,揭秘一款明泽文章采集软件的工作原理...

    一直以来,大家都在用各种各样的采集器或网站自带的采集功能,如织梦采集侠.火车头采集器.八爪鱼采集器等,这些采集软件都有一个共同的特点,就是要编写采集规则才能采集到文章,这个技术性的问题,对于新手来说, ...

  3. 关于网站架构的几封邮件摘抄

    关于网站架构的几封邮件摘抄 http://shell909090.com/blog/2011/11/%E5%85%B3%E4%BA%8E%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9 ...

  4. 你了解HTTPS工作原理吗?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 来源:8rr.co/stqK 当你打开浏览器,访问某个网站,如果网 ...

  5. 概述计算机系统的组成和工作原理,计算机系统的组成1.ppt

    <计算机系统的组成1.ppt>由会员分享,可在线阅读,更多相关<计算机系统的组成1.ppt(26页珍藏版)>请在人人文库网上搜索. 1.第2章 计算机系统的组成,计算机系统概述 ...

  6. 第2章 计算机工作原理

    1.1 学习的知识点 1     硬件基础 2     电脑主机的组成 3     IO各层次性能汇总 4     计算机的工作原理 5     DELL阵列卡(RAID卡) 2.1 具体内容 2.1 ...

  7. 浅析Struts 体系结构与工作原理(图)

       Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架. 基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用模 ...

  8. java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互

    java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较 ...

  9. Struts 体系结构与工作原理(图)

       Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架. 基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用模 ...

最新文章

  1. fedora java 开发环境_Linux(Fedora 14)下 java开发环境配置 ——jdk的安装与配置
  2. 3D人脸识别准确率提升,成未来发展趋势
  3. Kali Linux 安全渗透教程第五更1.4 安装Kali Linux
  4. 打断点是什么意思_黄金走势分析?股票所说的大盘几千点,是指的什么意思
  5. sparksql(1)——Dataframe
  6. 计算机技术员好学吗,电脑技术员,沦落到如此地步...
  7. 【组合数学】递推方程 ( 特特解示例 1 汉诺塔 完整求解过程 | 特解示例 2 特征根为 1 的情况下的特解处理 )
  8. 安装Linux Mint遇到的坑和解决方法|花屏|无法进入安装引导界面|驱动异常|无法连接WiFi......
  9. printf输出格式总结
  10. 高速CAN收发器TJA1043的状态机
  11. eclipse安装程序没反应
  12. 使用hosts屏蔽网站
  13. 关于USIM卡的全面测试综述
  14. 【报告分享】2021年Q2中国新经济创业投资数据分析报告-IT桔子(附下载)
  15. dns服务器未影响无法上网,dns服务器未响应导致无法上网怎么办
  16. 个人能用的短信平台有哪些?看这一篇就够了
  17. 单片机c语言中tr=0的意思,单片机C语言#define RS_CLR RS=0 什么意思?
  18. 网络协议的类型、优缺点、作用
  19. 参会记录|2021 CCF “计算之美”学术大会参会总结
  20. 专业清洁工 八款系统垃圾清理工具横向测评

热门文章

  1. 【Vue】仿小米商城系统(一)
  2. 医院HIS住院系统中长期医嘱的自动分解解决方案
  3. Ubuntu系统上轻松截图的几种方法介绍
  4. 关于\u003c转换成正常html符号的事
  5. 口水文:京东(零售电商)和美团(服务平台电商)
  6. 优秀后端都应该具备的开发好习惯
  7. 在Windows10上安装wls
  8. 为什么恒压驱动电源会缩短LED的使用寿命?
  9. java安装配置jdk环境
  10. 用vs2013编写并调试erlang内建函数(NIF)