C# 13 和 .NET 9 全知道 :12 使用 .NET 现代网页开发 (2)
myzbx 2025-01-18 22:35 48 浏览
构建桌面和移动应用程序
由于本书涉及使用 C#和.NET 进行现代跨平台开发,因此不包括使用 Windows Forms、Windows Presentation Foundation (WPF)或 WinUI 3 应用程序构建桌面应用程序的内容,因为它们仅限于 Windows。
如果您需要为 Windows 构建应用程序,那么以下链接将会对您有所帮助:
- 官方文档,帮助您开始为 Windows 构建应用程序: https://learn.microsoft.com/zh-cn/windows/apps/get-started/
- WPF 死了吗?: https://avaloniaui.net/Blog/is-wpf-dead
- WPF 在 2024 年与 WinUI、MAUI 相比有多受欢迎?: https://twitter.com/DrAndrewBT/status/1759557538805108860
- 在 64 位世界中的 WinForms - 我们的未来战略: https://devblogs.microsoft.com/dotnet/winforms-designer-64-bit-path-forward/
移动应用平台
有两个主要的移动平台,苹果的 iOS 和谷歌的 Android,每个平台都有其自己的编程语言和平台 API。还有两个主要的桌面平台,苹果的 macOS 和微软的 Windows,每个平台也都有其自己的编程语言和平台 API,如下所示:
- iOS:Objective C 或 Swift 和 UIKit
- 安卓:Java 或 Kotlin 和安卓 API
- macOS:Objective C 或 Swift 和 AppKit 或 Catalyst
- Windows:C、C++或许多其他语言,以及 Win32 API 或 Windows 应用程序 SDK
由于需要学习如此多的组合来进行原生移动开发,如果有一种技术能够针对所有这些移动平台,那将是非常有用的。
.NET MAUI
跨平台的移动和桌面应用可以一次为 .NET 多平台应用用户界面 (MAUI) 平台构建,然后可以在许多移动和桌面平台上运行。
.NET MAUI 通过共享用户界面组件和业务逻辑,使得开发这些应用变得简单。它们可以针对与控制台应用、网站和 Web 服务相同的 .NET API。应用将在移动设备上由 Mono 运行时执行,在桌面设备上由 CoreCLR 运行时执行。与普通的 .NET CoreCLR 运行时相比,Mono 运行时对移动设备进行了更好的优化。Blazor WebAssembly 也使用 Mono 运行时,因为它像移动应用一样,资源受限。
这些应用可以独立存在,但它们通常会调用服务,以提供跨越所有计算设备的体验,从服务器和笔记本电脑到手机和游戏系统。
我在我的伴侣书《使用 .NET 8 的应用程序和服务》中介绍了 .NET MAUI,Packt 还有许多其他书籍更深入地探讨 .NET MAUI,因此如果您认真想学习 MAUI,请查看以下 Packt 书籍:
- .NET MAUI 跨平台应用程序开发: https://www.packtpub.com/en-us/product/net-maui-cross-platform-application-development-9781835080597
- .NET MAUI 中的 MVVM 模式: https://www.packtpub.com/en-us/product/the-mvvm-pattern-in-net-maui-9781805125006
- .NET MAUI 项目: https://www.packtpub.com/zh-cn/product/net-maui-projects-9781837634910
在微软创建 .NET MAUI 之前,第三方创建了开源项目,以使 .NET 开发人员能够使用 XAML 构建跨平台应用程序,这些项目名为 Uno 和 Avalonia。
警告!我自己没有在任何实际项目中尝试过 Uno 或 Avalonia,因此无法为它们提供基于证据的推荐。我在本书中提到它们只是为了让您了解它们。
Uno platform
Uno 是一个“用于快速构建单一代码库的原生移动、网页、桌面和嵌入式应用的开源平台”,正如他们的网站所述,网址为:https://platform.uno/.
开发人员可以在原生移动、网页和桌面之间重用 99%的业务逻辑和用户界面层。
Uno 平台使用 Xamarin 原生平台,但不使用 Xamarin.Forms。对于 WebAssembly,Uno 使用 Mono-WASM 运行时。对于 Linux,Uno 使用 Skia 在画布上绘制用户界面。
阿瓦隆
Avalonia 是一个“用于从单一.NET 代码库构建美丽的跨平台应用程序的开源框架”,正如他们网站上所述,网址为:https://avaloniaui.net/。
您可以将 Avalonia 视为 WPF 的精神继承者。熟悉 WPF 的 WPF、Silverlight 和 UWP 开发人员可以继续受益于他们多年来积累的知识和技能。
它被 JetBrains 用于现代化他们基于 WPF 的工具,并使其跨平台。
Avalonia 扩展为 Visual Studio 和与 Rider 的深度集成使开发变得更简单、更高效。
项目结构化
你应该如何构建你的项目?到目前为止,我们主要构建了小型的独立控制台应用程序,以说明语言或库的特性,偶尔会有类库和单元测试项目来支持它们。在本书的其余部分,我们将构建多个使用不同技术的项目,这些项目协同工作以提供一个单一的解决方案。
对于大型复杂的解决方案,浏览所有代码可能会很困难。因此,构建项目的主要原因是为了更容易找到组件。为您的解决方案起一个反映应用程序或解决方案的整体名称是很好的。
我们将为一个名为 Northwind 的虚构公司构建多个项目。我们将把解决方案命名为 ModernWeb ,并使用名称 Northwind 作为所有项目名称的前缀。
有很多方法可以构建和命名项目和解决方案,例如,使用文件夹层次结构以及命名约定。如果您在团队中工作,请确保您了解您的团队是如何做的。
在解决方案中构建项目
在解决方案中为项目制定命名约定是很好的,这样任何开发人员都可以立即了解每个项目的功能。一个常见的选择是使用项目类型,例如,类库、控制台应用程序、网站等。
由于您可能希望同时运行多个网络项目,并且它们将托管在本地网络服务器上,我们需要通过为它们的端点分配不同的端口号来区分每个项目,包括 HTTP 和 HTTPS。
常用的本地端口号是 5000 用于 HTTP 和 5001 用于 HTTPS。我们将使用 5<chapter>0 作为 HTTP 的编号约定, 5<chapter>1 作为 HTTPS 的编号约定。例如,对于我们将在第 13 章中创建的网站项目,我们将为 HTTP 分配 5130 ,为 HTTPS 分配 5131 。
因此,我们将使用以下项目名称和端口号,如表 12.2 所示:
名称 | 端口 | 描述 |
Northwind.Common | 不适用 | 一个用于多个项目的公共类型的类库项目,如接口、枚举、类、记录和结构体。 |
Northwind.EntityModels | 不适用 | 一个用于通用 EF Core 实体模型的类库项目。实体模型通常在服务器端和客户端都使用,因此最好将对特定数据库提供程序的依赖分开。 |
Northwind.DataContext | 不适用 | A class library project for the EF Core database context, with dependencies on specific database providers. |
Northwind.UnitTests | 不适用 | 一个用于该解决方案的 xUnit 测试项目。 |
Northwind.Web | http 5130 和 https 5131 | 一个用于简单网站的 ASP.NET Core 项目,使用静态 HTML 文件和 Blazor 静态服务器端渲染(SSR)的混合。 |
Northwind.Blazor | http 5140 和 https 5141 | 一个 ASP.NET Core Blazor 项目。 |
Northwind.WebApi | http 5150 和 https 5151 | 一个用于 Web API 的 ASP.NET Core 项目,也称为 HTTP 服务。由于它可以使用任何 JavaScript 库或 Blazor 与服务进行交互,因此是与网站集成的良好选择。 |
表 12.2:各种项目类型的示例项目名称
中央包管理
在本书的所有先前项目中,如果我们需要引用一个 NuGet 包,我们会直接在项目文件中包含对包名称和版本的引用。
中央包管理(CPM)是一项功能,简化了在解决方案中多个项目之间的 NuGet 包版本管理。这对于拥有多个项目的大型解决方案特别有用,因为单独管理包版本可能变得繁琐且容易出错。
CPM 的关键特性和优势包括:
- 集中控制:CPM 允许您在一个文件中定义包版本,通常是 Directory.Packages.props ,该文件放置在您解决方案的根目录中。此文件集中管理您解决方案中所有项目使用的 NuGet 包的版本信息。
- 一致性:它确保多个项目之间的包版本一致。通过拥有一个包版本的单一真实来源,CPM 消除了不同项目指定相同包的不同版本时可能出现的差异。
- 简化更新:在大型解决方案中更新包版本变得简单明了。您只需在中央文件中更新版本,所有引用该包的项目将自动使用更新后的版本。这大大减少了维护开销。
- 减少冗余:它消除了在单个项目文件中指定软件包版本的需要( .csproj )。这使得项目文件更简洁,更易于管理,因为它们不再包含重复的版本信息。
让我们为本书接下来的章节设置一个将要使用的 CPM 解决方案:
- 在 cs13net9 文件夹中,创建一个名为 ModernWeb 的新文件夹。
- 在 ModernWeb 文件夹中,创建一个名为 Directory.Packages.props 的新文件。
- 在 Directory.Packages.props 中,修改其内容,如下所示的标记:
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</Man
agePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup Label="For EF Core 9." >
<PackageVersion
Include="Microsoft.EntityFrameworkCore.Sqlite"
Version="9.0.0" />
<PackageVersion
Include="Microsoft.EntityFrameworkCore.Design"
Version="9.0.0" />
</ItemGroup>
<ItemGroup Label="For unit testing.">
<PackageVersion Include="coverlet.collector"
Version="6.0.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk"
Version="17.12.0" />
<PackageVersion Include="xunit"
Version="2.9.0" />
<PackageVersion
Include="xunit.runner.visualstudio"
Version="3.0.0" />
</ItemGroup>
<ItemGroup Label="For Blazor.">
<PackageVersion Include=
"Microsoft.AspNetCore.Components.WebAssembly.Server"
Version="9.0.0" />
<PackageVersion Include=
"Microsoft.AspNetCore.Components.WebAssembly"
Version="9.0.0" />
<PackageVersion Include=
"Microsoft.AspNetCore.Components.WebAssembly.DevServer"
Version="9.0.0" />
</ItemGroup>
<ItemGroup Label="For web services.">
<PackageVersion
Include="Microsoft.AspNetCore.OpenApi"
Version="9.0.0" />
<PackageVersion
Include="Microsoft.Extensions.Caching.Hybrid"
Version="9.0.0" />
</ItemGroup>
</Project>警告! <ManagePackageVersionsCentrally> 元素及其 true 值必须在一行内。并且,您不能像在单个项目中那样使用浮动通配符版本号,例如 10.0-* ,以便在预览期间自动始终获取 EF Core 10 的最新补丁版本。
对于我们在包含此文件的文件夹下添加的任何项目,我们可以引用这些包而无需明确指定版本,如下所示的标记所示:
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" />
</ItemGroup>您应定期检查和更新 Directory.Packages.props 文件中的软件包版本,以确保您使用的是最新的稳定版本,其中包含重要的错误修复和性能改进。
我建议您在日历中设置每个月的第二个星期三的月度事件。这将在每个月的第二个星期二之后发生,第二个星期二是补丁星期二,微软会在这一天发布 .NET 及相关软件包的错误修复和补丁。
例如,在 2024 年 12 月中旬,可能会有新版本,因此您可以访问所有包的 NuGet 页面,然后在必要时更新版本,如下所示:
<ItemGroup>
<PackageVersion
Include="Microsoft.EntityFrameworkCore.Sqlite"
Version="9.0.1" />
<PackageVersion
Include="Microsoft.EntityFrameworkCore.Design"
Version="9.0.1" />
</ItemGroup>在更新软件包版本之前,请检查软件包的发布说明中是否有任何重大更改。更新后请彻底测试您的解决方案以确保兼容性。
教育您的团队,并记录 Directory.Packages.props 文件的目的和使用方法,以确保每个人都理解如何集中管理软件包版本。
您可以通过在 <PackageReference /> 元素上使用 VersionOverride 属性来覆盖单个软件包版本,如以下标记所示:
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design"
VersionOverride="9.0.0" />
</ItemGroup>这在新版本引入回归错误时可能会很有用。
更多信息:您可以通过以下链接了解有关 CPM 的更多信息:https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management。
为本书其余部分构建实体模型
网站和网络服务通常需要与关系数据库或其他数据存储中的数据进行交互。在本节中,我们将为存储在 SQL Server 或 SQLite 中的 Northwind 数据库定义一个实体数据模型。它将在我们后续章节中创建的大多数应用程序中使用。
创建 Northwind 数据库
创建 Northwind 数据库的脚本文件对于 SQLite 和 SQL Server 是不同的。SQL Server 的脚本创建了 13 个表以及相关的视图和存储过程。SQLite 的脚本是一个简化版本,仅创建 10 个表,因为 SQLite 不支持那么多功能。本书中的主要项目只需要这 10 个表,因此您可以使用任一数据库完成本书中的所有任务。
SQL 脚本可以在以下链接找到:https://github.com/markjprice/cs13net9/tree/main/scripts/sql-scripts。
有多个 SQL 脚本可供选择,如下所述:
- Northwind4Sqlite.sql script: To use SQLite on a local Windows, macOS, or Linux computer. This script could probably also be used for other SQL systems, like PostgreSQL or MySQL, but has not been tested for use with those!
- Northwind4SqlServer.sql 脚本:在本地 Windows 计算机上使用 SQL Server。该脚本检查 Northwind 数据库是否已经存在,如果数据库存在,则删除(即删除)该数据库,然后重新创建它。
- Northwind4AzureSqlDatabaseCloud.sql 脚本:在 Azure 云中使用与 Azure SQL 数据库资源创建的 SQL Server。这些资源只要存在就会产生费用!该脚本不会删除或创建 Northwind 数据库,因为您应该使用 Azure 门户用户界面手动创建 Northwind 数据库。
- Northwind4AzureSqlEdgeDocker.sql 脚本:在本地计算机上使用 Docker 中的 SQL Server。该脚本创建 Northwind 数据库。如果数据库已经存在,则不会删除它,因为 Docker 容器应该是空的,每次都会启动一个新的容器。
安装 SQLite 的说明可以在第 10 章《使用 Entity Framework Core 处理数据》中找到。在该章节中,您还会找到安装 dotnet-ef 工具的说明,您将使用该工具从现有数据库中生成实体模型。
在您的本地 Windows 计算机上安装 SQL Server 开发者版(免费)的说明可以在本书的 GitHub 仓库中找到,链接如下:https://github.com/markjprice/cs13net9/blob/main/docs/sql-server/README.md。
在以下链接中可以找到在 Windows、macOS 或 Linux 上通过 Docker 设置 Azure SQL Edge 的说明,链接为本书的 GitHub 存储库:https://github.com/markjprice/cs13net9/blob/main/docs/sql-server/sql-edge.md。
使用 SQLite 创建实体模型的类库
您现在将在类库中定义实体数据模型,以便它们可以在其他类型的项目中重用,包括客户端应用程序模型。
良好实践:您应该为实体数据模型创建一个单独的类库项目,而不是与数据上下文的类库合并。这使得在后端 Web 服务器和前端桌面、移动设备及 Blazor 客户端之间更容易共享实体模型,并且只有后端需要引用数据上下文类库。
我们将使用 EF Core 命令行工具自动生成一些实体模型:
- 使用您首选的代码编辑器创建一个新项目和解决方案,如下列表所示:项目模板:类库 / classlib项目文件和文件夹: Northwind.EntityModels.Sqlite解决方案文件和文件夹: ModernWeb
- 在 Northwind.EntityModels.Sqlite 项目中,添加 SQLite 数据库提供程序和 EF Core 设计时支持的包引用,如下所示:
<ItemGroup>
<PackageReference
Include="Microsoft.EntityFrameworkCore.Sqlite" />
<PackageReference
Include="Microsoft.EntityFrameworkCore.Design">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>- 删除 Class1.cs 文件。
- 构建 Northwind.EntityModels.Sqlite 项目以恢复包。
- 将 Northwind4Sqlite.sql 文件复制到 ModernWeb 解决方案文件夹中(不是项目文件夹!)。
- 在 ModernWeb 文件夹的命令提示符或终端中,输入命令以为 SQLite 创建 Northwind.db 文件,如以下命令所示:
sqlite3 Northwind.db -init Northwind4SQLite.sql请耐心等待,因为此命令可能需要一些时间来创建数据库结构。
- 要退出 SQLite 命令模式,在 Windows 上按两次 Ctrl + C,或在 macOS 或 Linux 上按 Cmd + D。
- 在 ModernWeb 文件夹的命令提示符或终端中,输入命令以列出当前目录中的文件,如以下命令所示:
dir您应该看到一个名为 Northwind.db 的新文件已被创建,如下输出所示:
Directory: C:\cs13net9\ModernWeb
Length Name
------ ----
Northwind.EntityModels.Sqlite
382 Directory.Packages.props
1193 ModernWeb.sln
557056 Northwind.db
480790 Northwind4SQLite.sql更改到项目文件夹:
cd Northwind.EntityModels.Sqlite在 Northwind.EntityModels.Sqlite 项目文件夹(包含 .csproj 项目文件的文件夹)的命令提示符或终端中,为所有表生成实体类模型,如以下命令所示:
dotnet ef dbcontext scaffold "Data Source=../Northwind.db" Microsoft.EntityFrameworkCore.Sqlite --namespace Northwind.EntityModels --data-annotations请注意以下事项:
- 执行的命令: dbcontext scaffold
- 连接字符串指的是解决方案文件夹中的数据库文件,该文件夹位于当前项目文件夹的上一级: "Data Source=../Northwind.db"
- 数据库提供者: Microsoft.EntityFrameworkCore.Sqlite
- 命名空间: --namespace Northwind.EntityModels
- 使用数据注解以及流式 API: --data-annotations
- 警告! dotnet-ef 命令必须全部在一行中输入,并且在包含项目的文件夹中;否则,您将看到以下错误: No project was found. Change the current working directory or use the --project option. 请记住,所有命令行都可以在以下链接找到并复制:https://github.com/markjprice/cs13net9/blob/main/docs/command-lines.md。
- 如果您使用 SQLite,那么您将看到关于表列与实体类模型中的属性之间不兼容类型映射的警告。例如, The column 'BirthDate' on table 'Employees' should map to a property of type 'DateOnly', but its values are in an incompatible format. Using a different type 。这是因为 SQLite 使用动态类型。我们将在下一节中解决这些问题。
使用 SQLite 创建数据库上下文的类库
您现在将定义一个数据库上下文类库:
- 将新项目添加到解决方案中,如下列表所定义:项目模板:类库 / classlib项目文件和文件夹: Northwind.DataContext.Sqlite解决方案文件和文件夹: ModernWeb
- 在 Northwind.DataContext.Sqlite 项目中,静态和全局导入 Console 类,添加对 SQLite 的 EF Core 数据提供程序的包引用,并添加对 Northwind.EntityModels.Sqlite 项目的项目引用,如下标记所示:
<ItemGroup Label="To simplify use of WriteLine.">
<Using Include="System.Console" Static="true" />
</ItemGroup>
<ItemGroup Label="Versions are set at solution-level.">
<PackageReference
Include="Microsoft.EntityFrameworkCore.Sqlite" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include=
"..\Northwind.EntityModels.Sqlite
\Northwind.EntityModels.Sqlite.csproj" />
</ItemGroup>警告!项目文件中的项目引用路径不应有换行。
- 在 Northwind.DataContext.Sqlite 项目中,删除 Class1.cs 文件。
- 构建 Northwind.DataContext.Sqlite 项目以恢复包。
- 在 Northwind.DataContext.Sqlite 项目中,添加一个名为 NorthwindContextLogger.cs 的类。
- 修改其内容以定义一个静态方法,命名为 WriteLine ,该方法将一个字符串附加到桌面上名为 book-logs 的文件夹中名为 northwindlog-<date_time>.txt 的文本文件的末尾,如以下代码所示:
using static System.Environment;
namespace Northwind.EntityModels;
public class NorthwindContextLogger
{
public static void WriteLine(string message)
{
string folder = Path.Combine(GetFolderPath(
SpecialFolder.DesktopDirectory), "book-logs");
if (!Directory.Exists(folder))
Directory.CreateDirectory(folder);
string dateTimeStamp = DateTime.Now.ToString(
"yyyyMMdd_HHmmss");
string path = Path.Combine(folder,
#34;northwindlog-{dateTimeStamp}.txt");
StreamWriter textFile = File.AppendText(path);
textFile.WriteLine(message);
textFile.Close();
}
}- 将 NorthwindContext.cs 文件从 Northwind.EntityModels.Sqlite 项目/文件夹移动到 Northwind.DataContext.Sqlite 项目/文件夹。
在 Visual Studio 解决方案资源管理器中,如果您在项目之间拖放文件,它将被复制。如果在拖放时按住 Shift 键,它将被移动。在 VS Code EXPLORER 中,如果您在项目之间拖放文件,它将被移动。如果在拖放时按住 Ctrl 键,它将被复制。
- 在 NorthwindContext.cs 中,请注意第二个构造函数可以将 options 作为参数传递,这使我们能够在任何项目中覆盖默认的数据库连接字符串,例如需要与 Northwind 数据库一起工作的网页,如以下代码所示
public NorthwindContext(DbContextOptions<NorthwindContext> options)
: base(options)
{
}在 NorthwindContext.cs 中,在 OnConfiguring 方法中,移除编译器的#warning 关于连接字符串的警告,然后添加语句以检查当前目录的结尾,以适应在 Visual Studio 中运行与在 VS Code 的命令提示符中运行的情况,如以下代码所示:
protected override void OnConfiguring(
DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
string database = "Northwind.db";
string dir = Environment.CurrentDirectory;
string path = string.Empty;
if (dir.EndsWith("net9.0"))
{
// In the <project>\bin\<Debug|Release>\net9.0 directory.
path = Path.Combine("..", "..", "..", "..", database);
}
else
{
// In the <project> directory.
path = Path.Combine("..", database);
}
path = Path.GetFullPath(path); // Convert to absolute path.
try
{
NorthwindContextLogger.WriteLine(#34;Database path: {path}");
}
catch (Exception ex)
{
WriteLine(ex.Message);
}
if (!File.Exists(path))
{
throw new FileNotFoundException(
message: #34;{path} not found.", fileName: path);
}
optionsBuilder.UseSqlite(#34;Data Source={path}");
optionsBuilder.LogTo(NorthwindContextLogger.WriteLine,
new[] { Microsoft.EntityFrameworkCore
.Diagnostics.RelationalEventId.CommandExecuting });
}
}抛出异常是重要的,因为如果数据库文件缺失,SQLite 数据库提供者将创建一个空的数据库文件,因此如果你测试连接,它是有效的。但是如果你查询它,你将看到与缺失表相关的异常,因为它没有任何表!在将相对路径转换为绝对路径后,你可以在调试时设置一个断点,以更容易地查看数据库文件预期的位置,或者添加一条语句来记录该路径。
相关推荐
- 如何设计一个优秀的电子商务产品详情页
-
加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...
- 怎么在JS中使用Ajax进行异步请求?
-
大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...
- 中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革
-
前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...
- 前端监控 SDK 开发分享_前端监控系统 开源
-
一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...
- Ajax 会被 fetch 取代吗?Axios 怎么办?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...
- 前端面试题《AJAX》_前端面试ajax考点汇总
-
1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...
- Ajax 详细介绍_ajax
-
1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...
- 6款可替代dreamweaver的工具_替代powerdesigner的工具
-
dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...
- 我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊
-
接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...
- 福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光
-
时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...
- 2021年超详细的java学习路线总结—纯干货分享
-
本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...
- 不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!
-
Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...
- 2025 年 Python 爬虫四大前沿技术:从异步到 AI
-
作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...
- 最贱超级英雄《死侍》来了!_死侍超燃
-
死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...
- 停止javascript的ajax请求,取消axios请求,取消reactfetch请求
-
一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)
- JS Loop For (32)
