【九层之台】Web开发教程:7. 网络

2024-03-18 22:30

本文主要是介绍【九层之台】Web开发教程:7. 网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Network

目录

  • 7. 网络
    • 模型与架构
    • 数据与视图
      • 静态分页面
      • 服务端渲染
      • AJAX
    • axios

7. 网络

在之前的章节里面,我们已经介绍完毕了所有web应用开发所需要的技术和框架,有了这些技能,你已经可以轻松完成一个很不错的交互式网页应用,把精彩纷呈的内容呈现给用户了。

从本章开始,我将补充介绍一些细节技术(和原理),它们经常在网页应用中有重要的作用。例如本章所讲的网络,就是是网页应用无法避免的问题:如何获取数据?

本章很多内容可能都是后端的内容,我在这里稍稍拓展。那为啥要讲呢?“这就是我们想要的!”

模型与架构

网页应用也不能逃离所有应用的限制,纵使你的UI有千般变化,也无法脱离核心数据而存在。如果没有商品数据,怎么显示购买界面?如果没有天气数据,怎么显示天气预报?如果没有用户数据,怎么显示用户中心?此乃巧妇难为无米之炊也。

也许有的人一定要较真:“单机应用不也玩的挺好!”,那我就要回一句:“那你何必用网页应用?”
网页应用本身就是依托网络而存在的,网络也是网页应用的灵活性所在。

因此,我们必然需要通过一定的方法来获得这些数据。在逻辑上,我们把这种数据写入、存储、调取、显示的过程称为应用架构。在架构中,一类数据(例如:每天的天气预报数据)被称为模型。这其实本来是后端(服务器端)需要关心的问题,但是随着前端网页的日益复杂,也渐渐出现在前端。可还记得我们说过,Vuejs的架构是MVVM,即Model-View-ViewModel?

无论采取什么架构,我们无法避免的矛盾在于:数据放在天南海北的某个服务器上,但却需要在你的手机(客户端)上显示出来。在web发展的这么多年当中,解决方法也在不断地更新。让我们来了解一下!

数据与视图

之前说过,视图就是用户看到的用户界面。如何把服务器上的数据放进客户端的视图?
举个例子说明:如果用户A访问了自己的个人信息页面,用户B也访问了自己的个人信息页面,怎么把数据库中的A和B的信息分别显示在两个页面上呢?

静态分页面

已淘汰,可考古

web最早最古老的方法。简单想想,我对每个不同的用户都生成一个网页文件,包含了不同的信息,不就好了吗?用户A访问到的是A.html,B用户访问到的是B.html,搞定!

网页是从网页文件中加载的,网页文件的内容是固定的,因此这是静态页面。

问题也是显著的:大量的代码被重复书写,即使使用程序去生成不同的网页文件,在用户数量变多以后也是一种极大的浪费。

服务端渲染

数十年中的主流做法

随着web的发展,人们发现一个惊喜的事实:只要我用一个程序去接收、处理、响应http请求,并且动态生成需要返回的网页代码,就可以实现对不同的用户显示不同的网页!

例如,用户A向服务器发起了http请求,服务器通过检查http请求中包含的信息,验证数据库中的用户数据发现这是用户A的请求。这时候服务端程序通过查询数据库获得用户A的个人数据,将这些个人数据拼接成一个HTML代码并响应http请求。这样,用户A看到的页面就成功地显示了他的个人数据。同理,用户B也可以通过在http请求中包含他的信息(例如用户名和密码)来获取属于他的页面。

在这种方案中,网页代码都是服务端动态生成的。在服务器上,服务端程序把数据塞进固定的网页样式当中,并把整个网页的代码作为http请求的响应。因此,我们把这一类方法叫做服务端渲染。

这种方法虽然很成熟,也诞生了很多很多的框架,但是有如下一些问题:

  • 服务端计算压力大,需要进行网页内容组合
  • 每次信息获取都需要加载整个网页,浪费流量也不利于交互

最著名的服务端渲染语言可能是PHP(世界最美语言)。PHP的代码作为HTML的一个元素被插入到HTML代码当中。当http请求到来的时候,PHP解释器(运行在服务器上的程序)将HTML代码中的PHP代码解释运行,并用代码运行的结果替换掉PHP代码元素,形成一个没有PHP代码的纯HTML代码。
这时HTML代码中的一部分内容是PHP代码运行的结果,通过这种方式可以实现动态网页内容。
如果有兴趣可以去学习一下哦!这是后端的内容啦!

AJAX

“藕断丝连”

新一代的网络数据获取方式,被称为AJAX。简单来说,在网页文件加载完毕以后,通过网页的JS代码发起http请求获取核心数据,并通过JS代码把获取到的数据显示在页面上。

这种方式的网页代码依然是固定的,动态内容只是根据JS代码中获取到的数据变量显示的网页内容而已。因此,这样的网页是静态页面,却实现了动态页面的效果,甚至更好。在页面数据发生变化的时候,只需要JS代码重新发起请求更新数据,然后显示在页面上即可。

此外,从整个网络应用的访问情况上来看,这种方式可以允许前端页面的CDN缓存(因为前端页面代码不会变),大大降低了服务器的计算压力和流量压力。

CDN是Content Delivery Network的缩写,即内容分发网络,这个我们下次再说。

axios

如何才能在JS代码中发起请求呢?JS自带了一种方式是fetch,但是我认为axios这个JS库更好用。

你可以通过CDN的方式直接引入axios(使用了jsdelivr):

<script src="https://cdn.jsdelivr.net/npm/axios@0.19.2/index.min.js"></script>

对于VueCli的项目来说,你也可以说使用

npm i axios -S

来安装依赖包,或者使用VueCli控制台。然后需要在main.js中引入:

import axios from "axios";
Vue.prototype.$ajax = axios;

通过绑定Vue对象的原型,我们接下来就可以在VueCli的组件中使用this.$ajax来调用axios了。

具体如何使用呢?以发送http的get请求获取百度首页的HTML代码为例(VueCli中用this.$ajax替换axios):

axios.get("https://www.baidu.com/").then((resp) => {console.log(resp.data);}).catch((err) => {alert(err);});

可以看到,axios整体采用了Promise结构,为了好看我们通常把axios单独写一行,然后.get发起get请求,.then内部是一个箭头函数处理正确的响应,.catch内部也是一个箭头函数处理错误响应。axios会自动等待请求返回,然后执行对应的函数。(需要注意:整个axios结构不会阻塞处理进程,也就是说,后面的代码不会理会请求是否返回,而是会继续执行。如果需要让后面的代码等待,需要在axios之前使用await)。

执行了这段代码以后,百度首页的HTML代码就会被输出到控制台上。

http状态码:http协议中规定,http响应必须包含一个状态码用来标定请求的响应情况。如果状态码是2开头的(200或201等),表示请求正确响应;3开头的状态码(301等)表示需要继续请求,例如重定向等;4开头的状态码(404等)表示客户端发起请求错误,服务端不能理解或不能响应;5开头的状态码(502等)表示服务端错误,请求不能响应。

如果需要在请求的时候传入数据,可以在url字符串后面增加一个参数,传入一个对象作为请求参数。axios的请求数据和响应数据都默认使用了JSON格式,在JS代码中可以像访问对象中的变量一样使用。

JSON格式:一种数据在网络中传递的格式,与JS的对象格式非常相似。

这就是axios的基本用法啦!axios还有很多例如baseURLintercept的高级功能,有需要的可以自学哦!同时axios还经常和Vuex一起使用,放在Vuex的action部分当中,各位可以自行实践。

相信各位已经具有一定的自学能力了!

这篇关于【九层之台】Web开发教程:7. 网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/823869

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依