• 说一下单页面应用的认识


    单页面应用的认识

    一、定义
    单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTMLJavaScript CSS。一旦页面加载完成了,SPA不会因为用户的操作而进行页面的重新加载或跳转。取而代之的是利用 JavaScript 动态的变换HTML的内容,从而实现UI与用户的交互。由于避免了页面的重新加载,SPA 可以提供较为流畅的用户体验。

    二、优缺点

    单页Web程序的出现是富客户端发展的必然结果,但是该技术也是有些局限性,所以采用之前需要了解清楚它的优缺点。

    1、优点:

    1).良好的交互体验

    用户不需要重新刷新页面,获取数据也是通过Ajax异步获取,页面显示流畅。

    2).良好的前后端工作分离模式

    单页Web应用可以和RESTful规约一起使用,通过REST API提供接口数据,并使用Ajax异步获取,这样有助于分离客户端和服务器端工作。更进一步,可以在客户端也可以分解为静态页面和页面交互两个部分。

    3).减轻服务器压力

    服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力会提高几倍;

    4).共用一套后端程序代码
    不用修改后端程序代码就可以同时用于Web界面、手机、平板等多种客户端;
    2、缺点:

    1).SEO难度较高

    由于所有的内容都在一个页面中动态替换显示,所以在SEO上其有着天然的弱势,所以如果你的站点对SEO很看重,且要用单页应用,那么就做些静态页面给搜索引擎用吧。

    2).前进、后退管理

    由于单页Web应用在一个页面中显示所有的内容,所以不能使用浏览器的前进后退功能,所有的页面切换需要自己建立堆栈管理,当然此问题也有解决方案,比如利用URI中的散列+iframe实现。

    3).初次加载耗时多

    为实现单页Web应用功能及显示效果,需要在加载页面的时候将JavaScriptCSS统一加载,部分页面可以在需要的时候加载。所以必须对JavaScriptCSS代码进行合并压缩处理,如果使用第三方库,建议使用一些大公司的CDN,因此带宽的消耗是必然的

    二、单页面应用实现的原理

    1、基本实现原理:利用ajax请求替代了a标签的默认跳转,然后利用html5中的API修改了url这项技术并没有特别标准的学名,大家都称呼为Pjax,意为PushState + Ajax。这并不完全准确,因为还有Hash + Ajax等方法

    2Pjax是一个优秀的解决方案,你有足够多的理由来使用它:

    • 可以在页面切换间平滑过渡,增加Loading动画。
    • 可以在各个页面间传递数据,不依赖URL
    • 可以选择性的保留状态,如音乐网站,切换页面时不会停止播放歌曲。
    • 所有的标签都可以用来跳转,不仅仅是a标签。
    • 避免了公共JS的反复执行,如无需在各个页面打开时都判断是否登录过等等。
    • 减少了请求体积,节省流量,加快页面响应速度。
    • 平滑降级到低版本浏览器上,对SEO也不会有影响。

    3、深剖原理

    1. 拦截a标签的默认跳转动作。
      2. 使用Ajax请求新页面。
      3. 将返回的Html替换到页面中。
      4. 使用HTML5History API或者UrlHash修改Url

    4、HTML5 History API

    history.pushState(state, title, url)

    pushState方法会将当前的url添加到历史记录中,然后修改当前url为新url。请注意,这个方法只会修改地址栏的Url显示,但并不会发出任何请求。我们正是基于此特性来实现Pjax。它有3个参数:

    • state: 可以放任意你想放的数据,它将附加到新url上,作为该页面信息的一个补充。
    • title: 顾名思义,就是document.title。不过这个参数目前并无作用,浏览器目前会选择忽略它。
    • url: url,也就是你要显示在地址栏上的url

    history.replaceState(state, title, url)

    replaceState方法与pushState大同小异,区别只在于pushState会将当前url添加到历史记录,之后再修改url,而replaceState只是修改url,不添加历史记录。

    window.onpopstate 事件
    一般来说,每当url变动时,popstate事件都会被触发。但若是调用pushState来修改url,该事件则不会触发,因此,我们可以把它用作浏览器的前进后退事件。该事件有一个参数,就是上文pushState方法的第一个参数state

  • 相关阅读:
    Git使用教程
    安卓Activity全屏显示以及不显示title
    Android自定义权限
    java基础类型数据与String类包装类之间的转换与理解
    sQL存储过程的优缺点
    安卓5.0新特性
    Android中图片压缩(质量压缩和尺寸压缩)
    java基本数据类型所占字节数
    Android性能优化之一:ViewStub
    安卓内存优化和视图优化
  • 原文地址:https://www.cnblogs.com/yunzhongjun/p/8215145.html
Copyright © 2020-2023  润新知