文档中心 边缘应用 网站边缘渲染

网站边缘渲染

更新时间:2023-11-30 11:03:29

本章示例为基于『边缘函数』,实现页面渲染,缩短交互时延。
代码说明:输入一个ASN如132203之后,『边缘函数』会调用PeeringDB的API获取132203和714(苹果ASN)的数据,计算出两者之间共享的设施和交换机。然后,通过接口获取这些共享节点的详细信息。最终,用HTMLRewriter将结果渲染成HTML响应给客户端。

详细代码

import { NetworkComparisonHandler, ErrorConditionHandler, AsnHandler } from "./peering-handlers"
import { Network } from "./peering-models-net"
import { apple } from './peering-utils-constants'

async function handleRequest(request) {
    const url = new URL(request.url)
    const asn = url.searchParams.get('asn')
    console.log(`asn:${asn}`)
    try {
        if (asn) {
            const apNetwork = await new Network(apple['asn']).populate()
            const otherNetwork = await new Network(asn).populate()
            const sharedItems = await apNetwork.compare(otherNetwork)
            console.log(`sharedItems: ${sharedItems.length}`)
            let response = await fetch(request.url)
            return await new HTMLRewriter()
                .on('#asnField', new AsnHandler(asn))
                .on('#formContainer', new NetworkComparisonHandler({apNetwork, otherNetwork, sharedItems}))
                .transform(response)
        } else {
            return fetch(request.url)
        }
    } catch (e) {
        console.error(`error:${e}`)
        let response = await fetch(request.url)
        return await new HTMLRewriter()
            .on('#asnField', new AsnHandler(asn))
            .on('#formContainer', new ErrorConditionHandler(asn))
            .transform(response)
    }
}
                    
addEventListener("fetch", event => {
    return event.respondWith(handleRequest(event.request))
})

注:边缘渲染,还可使动态页面缓存在边缘,进而提升SEO排名等。

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!