使用 WebForms 核心技术缓存 HTML 标签

发布:2024-10-25 14:53 阅读:15 点赞:0

在网站和 Web 应用程序中,通常会有一些静态部分,这些部分会频繁地从服务器请求。缓存这些标签通常是个挑战。在本文中,我们将介绍如何使用 WebForms Core 技术缓存静态标签的理念。通过将静态标签完全缓存到用户的浏览器中,我们能够在仅从服务器请求一次的情况下显著减少带宽。

一. 布局页面设置

布局页面是一种特殊类型的页面,可以作为其他页面的模板。它们用于定义可以在多个页面之间共享的公共布局。

以下代码是一个包含头部和底部以及左右菜单的布局页面示例。

全局布局 (layout.aspx)

@page
@islayout
<!DOCTYPE html>
<html>
<head>
    <title>CodeBehind Framework - @ViewData.GetValue("title")</title>
    <script type="text/javascript" src="/script/web-forms.js"></script>
    <meta charset="utf-8" />
    <style>
        /*
            ...
        */

    
</style>
</head>
<body>

    @LoadPage("/header.aspx")  // 加载头部页面
    @LoadPage("/left_menu.aspx") // 加载左侧菜单

    <main>
        @PageReturnValue // 页面内容将在此处显示
    </main>

    @LoadPage("/right_menu.aspx") // 加载右侧菜单
    @LoadPage("/footer.aspx") // 加载底部页面

</body>
</html>

在上述代码中,每当请求到达服务器时,服务器会将整个页面发送给客户端。头部、底部、左右菜单及样式占用了大量带宽,并增加了服务器的处理和内存压力。

注意事项

在 WebForms Core 技术中,一个 HTML 页面只需在浏览器中的第一次请求中完全加载。初始加载后,后续请求会通过 Ajax 自动放置在 body 标签中。如果不希望在新的请求后更改固定元素(如头部和底部标签及菜单),需要在 web-forms.js 文件中更改默认设置如下:

WebFormsJS 库 (web-forms.js)

function cb_GetResponseLocation() {
    // 返回第一个 main 元素而不是 body
    return document.getElementsByTagName("main")[0];
}

根据上述代码,服务器响应(非 Action 控件)会放置在 main 标签中。如果不进行此设置,通过 WebFormsJS 请求的页面内容(如头部、底部和固定菜单)将会被删除。

注意事项

当将 WebFormsJS 库添加到 HTML 页面时,自动表单提交将以 Ajax 模式进行;如果服务器响应是 Action 控件,WebFormsJS 将渲染这些 Action 控件的代码。否则,服务器响应会放置在 body 标签中。

二. 修改布局页面

接下来,我们希望改变这种情况。首先,我们修改上述布局页面。

修改后的全局布局 (layout.aspx)

@page
@islayout
<!DOCTYPE html>
<html>
<head>
    <title>CodeBehind Framework - @ViewData.GetValue("title")</title>
    <script type="text/javascript" src="/script/web-forms.js"></script>
    <meta charset="utf-8" />
</head>
<body onload="GetBack('/set_static_tags')"> // 页面加载时调用 GetBack 方法

    <main>
        @PageReturnValue // 页面内容将在此处显示
    </main>

</body>
</html>

修改说明

在布局页面中进行了以下更改:

  • 移除了头部、底部、左右菜单和样式标签。
  • 在 body 标签中添加了 onload 属性,值为 GetBack('/set_static_tags')
  • 创建一个名为 style.aspx 的新视图页面,并插入移除的样式标签。
  • 创建一个名为 set_static_tags.aspx 的页面,使用 WebForms 类设置头部、底部、左右菜单及样式页面。

视图 (set_static_tags.aspx)

@page
@{
WebForms form = new WebForms(); // 创建 WebForms 实例

form.AddText("<body>", LoadPage("/style.aspx")); // 将样式页面添加到 body 标签中
form.AddTextToUp("<body>", LoadPage("/left_menu.aspx")); // 将左侧菜单添加到 body 标签上方
form.AddTextToUp("<body>", LoadPage("/header.aspx")); // 将头部添加到 body 标签上方
form.AddText("<body>", LoadPage("/right_menu.aspx")); // 将右侧菜单添加到 body 标签中
form.AddText("<body>", LoadPage("/footer.aspx")); // 将底部添加到 body 标签中

form.SetCache(34164000); // 设置缓存时间为一年(34164000 秒)
}
@form.Response(context) // 输出 Action 控件的响应

根据上述视图代码,在创建 WebForms 类的新实例后,以下 Action 控件会按顺序应用到客户端:

  • 样式页面被添加到 body 标签内(顺序不重要)。
  • 左侧菜单页面被添加到 body 标签的顶部。
  • 头部页面被添加到 body 标签的顶部。
  • 右侧菜单页面被添加到 body 标签的底部。
  • 底部页面被添加到 body 标签的底部。
  • Action 控件的命令被缓存一年(34164000 秒)。

最后,调用 @form.Response(context) 会将 Action 控件写入页面。头部、底部、左右菜单的调用顺序是重要的,需按照上述代码的顺序执行。

GetBack 方法

GetBack 方法是 WebForms Core 技术中一个重要的方法,存在于 WebFormsJS 库中。添加到 body 标签的 onload 属性的方法在 HTML 页面调用后执行,因此调用 GetBack('/set_static_tags') 方法会请求 set_static_tags.aspx 页面。

注意事项

在 CodeBehind 框架的选项文件设置中,必须启用将视图重写到目录的能力(rewrite_aspx_file_to_directory=true)。否则,必须将 GetBack 方法设置为:

GetBack('/set_static_tags.aspx');

三. 缓存静态标签的好处

SetCache 方法会在用户的浏览器中长时间存储数据。若用户登录系统,则可以使用 SetSessionCache 方法。SetSessionCache 方法会在浏览器开启时保留数据,并在退出浏览器后自动丢失。

现在,如果你运行项目并查看执行页面的 HTML 源代码,你会发现头部、底部、左右菜单和样式标签不会从服务器发送。此外,set_static_tags.aspx 页面只会执行一次,即使在浏览器中刷新页面,此页面也不会被请求。

四. 结论

在本文中,我们学习了如何使用 WebForms Core 技术缓存 HTML 中的静态标签。缓存静态 HTML 标签是一种现代网页技术,能够有效降低带宽使用。