zoukankan      html  css  js  c++  java
  • 单页面应用程序(SPA)

    一、概念

    ①在一个页面上实现网站的大部分功能,就是单页面应用程序,是一种常见的网页开发模式。

    ②整个网站就只有一个Html文件,每次在切换页面时,不需要请求服务器,只要通过本地的js来切换即可。这样可以减小服务器压力、增强用户体验,增加app的使用流畅性。

    二、特点

    ①优点:

    • 具有桌面应用的即时性、网站的可移植性和可访问性。
    • 用户体验好、快,内容的改变不需要重新加载整个页面,web应用更具响应性和更令人着迷。
    • 基于上面一点,SPA相对对服务器压力小。
    • 良好的前后端分离。SPA和RESTful架构一起使用,后端不再负责模板渲染、输出页面工作,web前端和各种移动终端地位对等,后端API通用化。
    • 对前端人员javascript技能要求更高,促使团队技能提升。

    ②缺点:

    • 分功能模块的鉴权不好实现。
    • 不利于SEO搜索引擎优化
    • 初次加载耗时相对增多
    • 导航不可用,如果一定要导航需要自行实现前进、后退。
    • 对开发人员技能水平、开发成本高。

    三、具体应用

    ①单页应用肯定是要使用一些框架的,比如Vue、Angular、React等,但是使用 Vue、Angular、React 也不一定是做单页,做单页一定是前后端分离的方式,如果有 SEO 需求,则不要做成单页

    ②具体使用的网站:网易云音乐、coding、Gmail等

    四、模拟单页应用

    ①historyAPI方案,参考之前的章:历史相关API

    ②哈希(路由)方案:使用location.hash和hashchange事件实现路由

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>模拟单页面应用</title>
        <style>
            *{
                padding: 0;
                margin: 0;
            }
            body{
                background-color: #f7f7f7;
                font-family: Arial, Helvetica, sans-serif;
            }
            header{
                background: #242424;
                border-bottom: #000;
            }
            .wrapper{
                width: 1100px;
                height: 70px;
                margin: 0 auto;
            }
            .wrapper h1{
                float: left;
                width: 176px;
                height: 69px;
                background: url("topbar.png") no-repeat 0 0;
                font-size: 0;
            }
            .wrapper ul{
                list-style: none;
            }
            .wrapper ul li{
                float: left;
                height: 70px;
            }
            .wrapper ul li.now,
            .wrapper ul li:hover{
                background: red;
            }
            .wrapper ul li a{
                padding: 0 20px;
                display: block;
                color: #fff;
                line-height: 70px;
                text-decoration: none;
            }
            .content{
                width: 1100px;
                margin: 0 auto;
                font-size: 100px;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <header>
            <div class="wrapper">
                <h1>网易云音乐</h1>
                <ul>
                    <!-- 为了和普通的锚点作区分,所以这里的路径加了一个前缀# -->
                    <li><a href="#/">发现音乐</a></li>
                    <li><a href="#/my">我的音乐</a></li>
                    <li><a href="#/friend">朋友</a></li>
                </ul>
            </div>
        </header>
        <!-- 其它页面都需要显示在这个容器中 -->
        <div class="container" id="container"></div>
        <script src="jquery.js"></script>
        <script>
        // 通过注册 window.onhashchange 事件来监听 hahs(锚点)的改变
        // url 地址发生改变之后,就解析 hash 中的路径标识
        // 然后根据不同的路径标识渲染不同的页面到单页面中的容器中
        window.onhashchange=function(){
            var hash=window.location.hash.substr(1);//去除#
            if(hash==='/'){
                $.get('./find.html',function(data){
                    $('#container').html(data);
                    console.log(data)
                });
            }else if(hash==='/my'){
                $.get('./my.html',function(data){
                    $('#container').html(data);
                });
            }else if(hash==='/friend'){
                $.get('./friend.html',function(data){
                    $('#container').html(data);
                });
            }
        }
        </script>   
    </body>
    </html>

  • 相关阅读:
    IDEA激活
    Spring JDBC
    数据库连接池
    JDBC
    10个很实用Linux命令,千万不要错过
    Linux 下如何使用 alias 命令
    Linux 下如何使用 fc 命令
    Linux 下如何修改密码有效期?
    利用 tee 命令调试shell脚本中的管道
    ps 命令显示不完整的问题
  • 原文地址:https://www.cnblogs.com/EricZLin/p/9360906.html
Copyright © 2011-2022 走看看