gpt4 book ai didi

asp.net - 在 ASP.NET 中为命中计数器实现存储的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-05 01:29:03 24 4
gpt4 key购买 nike

我正在创建一个点击计数器,用于跟踪访问特定页面的人数。保存此信息的表包含 page_id、ip_address 和时间戳(当 IP 地址访问页面时)。

我遇到的“问题”是保存这些信息的最佳方式。如果我每次用户访问页面时都存储它,它会影响网站性能,并且在保存过程中可能会出现问题。我希望可能使用 Application_EndGlobal.asax文件以将记录添加到计数器表中。但是我怎样才能保存这样的记录呢?我是否使用 Application多变的?如果是,如何?

最佳答案

which is the best way to save this information

有三种方法可以帮助不影响显示页面的性能,并且只关心您要保存和保留的数据。

第一种方式

您可以使用从页面调用的处理程序作为图像,仅用于编写此统计计数器。在此处理程序中,您不使用 session ,因此您甚至不会阻止其他页面。而且大多数蜘蛛都不会调用它,因此您只编写真实用户。

您可以通过以下方式在页面上调用:
<img src="keepstats.ashx?Page=CurrentPage.aspx" height="1" width="1" alt="" >

处理程序是
// 1x1 transparent GIF
private readonly byte[] GifData = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};

public void ProcessRequest (HttpContext context)
{
// save here your stat counter

// send the image
context.Response.ContentType = "image/gif";
context.Response.Buffer = false;
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}

第二种方式

不是从后面的代码而是从最后的页面内部调用这个函数。这种情况的缺点是 session 正在锁定页面并且页面必须完全加载以允许下一个请求继续进行。但最容易制作。
<body>
... all the page here...


..bottom of the page..
<%
// you send this part of the page and user all ready see it
Response.Flush();
// now you call the function that calculate the statistics
// the page still show that is loading, but the user all ready see it
CallTheStatisticSaveFunction();
%>
</body>

第三种方式

我忘记了另一种方法,即创建一个线程以使页面并行且不可靠地工作。

遗言

在我的代码中,我使用了上述所有技巧,一个用于统计,第二个用于必须在页面上完成但可能需要更多时间的操作。我使用线程执行必须在开始渲染页面之前完成的操作,并使用一些技巧,如果线程未结束,我将渲染我拥有的内容。

由于这个原因,我将避免 session 以了解用户是否已准备好查看页面:
  • 如果用户不使用 cookie session 不工作,所有蜘蛛不使用 session
  • 如果用户开始看到很多页面, session 数据就会增长。
  • Application_End当您关闭 iis 或停止您的应用程序时,仅被调用。全局且每次调用的点是 Application_BeginRequest但是在那里你会影响性能,因为每个 asp.net 元素都会被调用,你需要检查它是否是一个页面,如果有其他东西,并且在页面的第一点,你会在那里延迟。在用户看到一些东西后,我们在这里搜索如何在最后写入统计信息。

    关于asp.net - 在 ASP.NET 中为命中计数器实现存储的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266205/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com