惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
S
Securelist
D
Docker
The Register - Security
The Register - Security
GbyAI
GbyAI
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
罗磊的独立博客
博客园 - 【当耐特】
F
Full Disclosure
WordPress大学
WordPress大学
腾讯CDC
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
SecWiki News
SecWiki News
L
Lohrmann on Cybersecurity
I
InfoQ
MyScale Blog
MyScale Blog
量子位
Cyberwarzone
Cyberwarzone
博客园 - 三生石上(FineUI控件)
The Hacker News
The Hacker News
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园_首页
H
Help Net Security
K
Kaspersky official blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Webroot Blog
Webroot Blog
Blog — PlanetScale
Blog — PlanetScale
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
The Cloudflare Blog
P
Proofpoint News Feed
V
Visual Studio Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tailwind CSS Blog
爱范儿
爱范儿
P
Privacy International News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
The GitHub Blog
The GitHub Blog
C
Cybersecurity and Infrastructure Security Agency CISA
B
Blog RSS Feed

博客园 - ji yang

页面点击分析工具设计与实现 使用FreeMind代替PowerPoint做演示 Velocity 2011大会归来 通过扩展属性为SqlServer的索引添加注释信息 memcached对中文key的支持 更安全的服务器:Windows账号权限修改监控 网站活跃用户统计的思路与设计 safari的url地址转义问题 fastdfs dotnet 客户端发布 go lang web项目的部署与发布 从设计图到HTML页面时的注意点 关于加班 关于Google App Engine 一个简单的Spring.net绑定例子 SOA中国路线图活动感受 文章被转载了 Asp.net中基类页的设计和使用 产品营销上的求同策略
以服务的方式提供站点基础功能支持
ji yang · 2011-05-12 · via 博客园 - ji yang

Web站点除了提供内容展示,业务逻辑处理外,还有很多看不到的操作,如:错误日志,后台管理,权限分配,访问统计等。如果只有一个站点,完全可以根据需要逐步添加,但实际的情况是往往有多个子站点,这时这些重复的功能就可以以服务的方式提供了。

举个例子,我们需要统计执行慢的页面列表,简单的做法是:
1 在Global.asax 的 BeginRequest, EndRequest事件中记录执行时间,如果超过某个值,如2秒,就记录到数据库。
2 在后台管理增加 slowpage_list.aspx 页面用于查看执行慢的页面列表。

基本实现还是蛮简单的,如:

[Global.asax]

<%@ Application Language="C#" %>
<script runat="server">
     
protected void Application_BeginRequest(object sender, EventArgs e) {
        
// 记录开始时间
        this.Context.Items["page_request_starttime"= DateTime.Now;
    }
protected void Application_EndRequest(object sender, EventArgs e) {
       
// 最大用时,单位毫秒,根据需要指定多慢的页面需要记录
        const int maxTimeUse = 2000;
        
string url = HttpContext.Current.Request.Url.ToString();// 页面处理用时
        int timeUse = (int)(DateTime.Now - (DateTime)this.Context.Items["page_request_starttime"]).TotalMilliseconds;// 如果执行时间超过最大用时
        if (timeUse > maxTimeUse) {
            
// 记录执行慢的页面
            AddSlowPage(url, timeUse);
        }
    }
</script>

以及:
[slowpage_list.aspx]

代码略 ......

这样做的缺点是,各个站点只能以拷贝的方式重用slow_page_list.aspx,以及还要重复数据库建表等。

改进的做法是:
增加一个 service.yousite.com 公用服务站点,各个子站点有执行慢的页面时,往这个公用服务站点提交。

if (timeUse > maxTimeUse) {
   
// 当前站点标识
    string site = "site001";
    
string address = string.Format("http://service.yousite.com/add_slowpage.ashx?site={0}&timeUse={1}&url={2}",
                                    site, timeUse, url);
    
    
// 指定超时时间,并用异步方式提交执行慢的页面地址
    System.Net.HttpWebRequest client = System.Net.WebRequest.Create(address) as System.Net.HttpWebRequest;
    client.Timeout 
= 2000;
    client.ReadWriteTimeout 
= 2000;
    client.BeginGetResponse(
nullnull);
}

然后在 service 站点,提供查看的页面,根据site参数来查看指定站点的slow page。
http://service.yousite.com/slowpage_list.aspx?site=site001

同时这个页面可以很方便的以iframe的方式嵌入到各个子站点的后台。

就像开发时,要DRY(Don't Repeat Yourself)避免重复代码一样,在规划站点时,也要避免重复的基础功能建设,这样的好处不光是减少工作量,也能够更好的保证整体站点的一致与稳定。