使用 Edge Functions 最大化 Next.js 13 应用程序的性能

在云计算中,术语边缘功能是指位于或靠近网络边缘的计算能力,通常更靠近数据源。在本分步教程中,您将学习如何使用 Next.js 13 轻松创建 Edge Functions。

边缘功能用于在靠近生成位置的地方处理数据,而不是将所有数据发送到集中式云进行处理。这减少了数据传输所需的延迟和带宽,并可以提高基于云的应用程序的效率、可扩展性和安全性。

无服务器功能与边缘功能

Edge Functions 可以理解为 Serverless 函数的变体。如何在 Windows PC 或 Mac 计算机上设置双显示器为了解释,让我们将 Edge Functions 与无服务器函数进行比较。

部署在 Vercel 上的无服务器功能在位于世界某个地方的服务器上运行。对函数的请求在服务器上执行。如果请求来自靠近服务器的位置,则速度很快。但是,如果它来自很远的地方,则响应速度较慢。

Edge Functions 解决了这个问题。简而言之,Edge Functions 是在靠近用户的地方运行的无服务器功能,无论用户身在何处,都能产生快速请求。

1. 创建一个新的 Next.js 13 项目

让我们开始使用以下命令创建一个新的 Next.js 13 项目:

$ npx create-next-app@latest --experimental-app

点击回车键后,您将被引导完成在命令行上创建新 Next.js 13 项目的过程。您需要为新项目指定一个名称并回答以下问题:

### C语言实现最小生成树算法课程设计 #### 1. 需求概述 为了满足需求,此项目旨在通过C语言编写程序来解决给定地区内的多个城市之间的最短路径连接问题。具体来说,该程序会应用Prim算法和Kruskal算法构建最小生成树(MST),并展示最终形成的MST以及其总成本。 #### 2. 数据结构定义 考虑到题目中的特殊要求—即城市数量不少于十个且存在十五条以上的边,因此选择了邻接表作为主要的数据存储方式。这种方式不仅能够有效地减少空间浪费,而且便于后续处理各种图论运算[^1]。 ```c #include <stdio.h> #include <stdlib.h> #define MAX_VERTICES 100 // 定义最大顶点数 typedef struct Edge { int u; int v; int weight; } Edge; // 创建一个简单的链表节点用于保存相邻结点的信息 struct AdjListNode { int dest; // 目的地编号 int weight; // 边权重 struct AdjListNode* next; }; // 图的表示方法之一:邻接表形式 struct Graph { int V; // 结点总数 struct AdjListNode** adjListArray; // 指向各个结点对应的邻居列表数组指针 }; ``` #### 3. Prim算法的具体实现 Prim算法的核心思想是从任意选定的一个起点出发逐步扩展已访问过的区域直到覆盖整个网络为止,在每一轮迭代过程中总是挑选那些尚未被纳入现有集合但又具有最低花费的新成员加入其中[^2]。 ```c void primMST(struct Graph* graph) { int parent[MAX_VERTICES]; // 存储各顶点的父亲节点索引 int key[MAX_VERTICES]; // 记录到达某一点所需的最少费用 char mstSet[MAX_VERTICES]; // 表明某个位置是否已被收录进MST // 初始化所有key值为无穷大,mstSet全部置false for (int i = 0; i < graph->V; ++i){ key[i] = INT_MAX, mstSet[i] = false; } // 设置第一个顶点的关键字为零以便从此处开始遍历 key[0] = 0; parent[0]=-1; // 主循环体负责更新剩余未决定点的状态直至完成整棵树的构造工作 for(int count=0 ;count<graph->V-1;++count){ int minKeyIndex=-1,minValue=INT_MAX; // 寻找当前不在MST里的拥有最小关键字值得那个顶点 for(int j=0;j<graph->V && minValue!=0;++j) if(!mstSet[j]&&minValue>key[j]){ minValue=key[minKeyIndex=j]; } // 将找到的那个顶点标记成已在MST之中 mstSet[minKeyIndex]=true; // 更新与新添入MST之中的那部分相连的所有其他非MST内部元素们的关键字数值大小关系 struct AdjListNode *pCrawl = graph->adjListArray[minKeyIndex]->next; while(pCrawl != NULL){ int v=pCrawl->dest; if (!mstSet[v] && pCrawl->weight < key[v]) parent[v] = minKeyIndex, key[v] = pCrawl->weight; pCrawl = pCrawl->next; } } printf("Edge \tWeight\n"); for (int i = 1; i < graph->V; ++i) printf("%d - %d \t%d \n", parent[i], i, key[i]); } ``` #### 4. Kruskal算法的具体实现 不同于Prim算法自底向上逐层累加的方式,Kruskal采取了一种更为直观的方法——它首先按照边的成本从小到大地排列所有的候选选项,接着依次考察这些预选对象能否安全地添加至正在成长当中的森林体系之内而不引起环路现象的发生;一旦确认无误便立即将其接纳进来成为正式组成部分的一部分[^5]。 ```c // 查找函数 Find function with path compression technique. int findSubtree(int subsets[], int node); // 合并子集 Union operation using union by rank heuristic. void mergeSubsets(int subsets[], int xRoot, int yRoot); bool isCyclePresentInGraph(const struct Graph* const gph, Edge edgeArr[]); void kruskalMST(struct Graph* graph) { Edge result[MAX_VERTICES]; int e = 0; // An index variable, used for result[] int i = 0; // An index variable, used for sorted edges qsort(edgeArr, graph->E, sizeof(graph->edge), compare); // Allocate memory for creating V ssubsets int *subsets = malloc(sizeof(int)*MAX_VERTICES); memset(subsets,-1,sizeof(int)*MAX_VERTICES); // Number of edges to be taken is equal to V-1 while(e < graph->V -1 ) { // Step 2: Pick the smallest edge and increment the index for next iteration Edge next_edge = edgeArr[i++]; int x = findSubtree(subsets,next_edge.src); int y = findSubset(subsets,next_edge.dest); // If including this edge does not cause cycle, include it in result and increment the index of result for next edge if(x !=y ){ result[e++] = next_edge; mergeSubsets(subsets,x,y); } // Else discard the next_edge } free(subsets); } // Helper functions implementation here... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pxr007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值