前端后端分离开发-前端

前端开发是创建Web页面或app等前端界面呈现给用户的过程,通过以及衍生出来的各种技术、框架、解决方案,来实现互联网产品的用户界面交互 。它从[网页制作]演变而来,名称上有很明显的时代特征。在互联网的演化进程中,网页制作是Web1.0时代的产物,早期网站主要内容都是静态,以图片和文字为主,用户使用网站的行为也以浏览为主。随着互联网技术的发展和HTML5、CSS3的应用,现代网页更加美观,交互效果显著,功能更加强大

优化

  • 尽量减少HTTP请求 (Make Fewer HTTP Requests)

  • 减少DNS 查找 (Reduce DNS Lookups)

  • 避免重定向 (Avoid Redirects)

  • 使得 Ajax 可缓存 (Make Ajax Cacheable)

  • 延迟载入组件 (Post-load Components)

  • 预载入组件 (Preload Components)

  • 减少DOM元素数量 (Reduce the Number of DOM Elements)

  • 切分组件到多个域 (Split Components Across Domains)

  • 最小化iframe的数量 (Minimize the Number of iframes)

  • 杜绝 http404错误 (No 404s)

简单例子如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Vue.js-访问API接口数据-蓝墨云班课练习</title>
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1,user-scalable=no">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <!-- 通过CDN引入Vue.js -->
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <!-- 通过CDN引入axios -->
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <style type="text/css">
            
            body {
                background-color: #EFEFEF;
            }
            
            .top {
                width: 80%;
                margin: 0 auto;
                display: flex;
                justify-content: space-between;
                
            }
            hr{
                width: 80%;
                color: #efefef;
            }
            .container {
                width: 80%;
                margin: 0 auto;
                display: flex;
                flex-wrap: wrap;
                padding-left: 20px;
                padding-top: 10px;
            }
            .card {
                width: 190px;
                display: flex;
                flex-direction: column;
                border: 1px solid #eee;
                margin-right: 20px;
                margin-bottom: 10px;
                background-color: #fff;
                justify-content: center;
                padding-left: 5px;
                padding-right: 5px;
                padding-top: 5px;
            }
            .card img {
                width: 100%;
            }
            p {
                font-size: 12px;
                margin-bottom: 5px;
            }
            .teacher {
                display: flex;
                justify-content: space-between;
            }
            .left {
                display: flex;
            }
            .avatar img {
                width: 30px;
                height: 30px;
                border-radius: 50%;
                margin-right: 5px;
            }
            .code {
                color: #00BBDD;
                margin-top: 5px;
            }
        </style>
    </head>
    <body>
        <div id="app">
            
            <div class="top">
                <p>进行中的班课</p>
                <p>{{courses.length}}个进行中的班课</p>
            </div>
            <hr>
            <div class="container">
                <div class="card" v-for="(course, index) in courses" :key="index">
                    <div class="cover">
                        <img :src="'img/'+course.cover">
                    </div>
                    <div class="course-class">
                        <p>{{course.courseClass}}</p>
                    </div>
                    <div class="course-name">
                        <p>{{course.courseName}}</p>
                    </div>
                    <div class="teacher">
                        <div class="left">
                            <div class="avatar">
                                <img :src="'img/'+course.avatar">
                            </div>
                            <div class="username">
                                <p class="code">{{course.username}}</p>
                            </div>
                        </div>
                        <div class="course-code">
                            <p class="code" v-if="loginUserId === course.userId">{{course.courseCode}}</p>
                        </div>
                    </div>
                </div>

            </div>
        </div>
        <script type="text/javascript">
            
            var app = new Vue({
                el: '#app',
                data: {
                    loginUserId: 1,
                    courses: []
                },
                created: function() {
                    var _this = this;
                    axios.get('http://127.0.0.1:8080/web_war_exploded/courses')
                        .then(function(response) {
                            console.log(response.data);
                            _this.courses = response.data;
                        })
                }
            })
        </script>
    </body>
</html>

结果是:


result.png
  • 考虑到前端与后台的联系,所有的数据都是在数据库中提取,也就是后台所写的各种方法通过调用数据库里的数据在前端进行展现,然后其最终看结果是:


    result2.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文是大名鼎鼎的雅虎前端优化规则(Yslow)的翻译。翻译并不逐字逐句,部分难以逐字翻译的被意译了,另外一些不重要...
    范小饭_阅读 5,641评论 2 26
  • 1. Content 1.1 Make Fewer HTTP Requests Minimize HTTP Req...
    jqClub阅读 3,332评论 0 1
  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 13,310评论 1 52
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 4,274评论 0 3
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 7,410评论 0 7

友情链接更多精彩内容