页面生命周期

简介:

很早就看了cat chen的深入理解 ASP.NET 动态控件 (Part 3 - 页面生命周期) ,当时是理解了,但是很不好理解。尤其是追赶加载那部分。最近重新看到那篇文章,禁不住想用打比方的方式来描述一下,不知道我的比喻是否恰当?


一下引用自CatChen的原文:

一般加载分为以下几个主要阶段(粗体标出的阶段的特殊性后面解释):

  1. Init - 初始化,是否为动态控件就以此为分界,Init之前加入到控件树的控件其处理过程就和ASPX中静态声明的一致,因为静态控件也就是在Init前加入的。
  2. LoadViewState - 加载ViewState。
  3. ProcessPostData - 处理PostData,倒不如说是加载PostData,因为此阶段控件多数仅加载PostData,顺便判断PostData是否有改变,别的处理不在此阶段作。
  4. Load - 加载,让ASP.NET程序员尽情发挥创意的地方,包括如何糟蹋ASP.NET这个框架。
  5. ProcessPostData Second Try - 第二次尝试处理PostData,和第一次所做的一样,不过第一次执行时已在控件树上的控件不会受到第二次打扰。
  6. Raise ChangedEvents - 冒泡Changed类事件,这里指的是由于PostData变更而引起的Changed类事件。
  7. Raise PostBackEvent - 冒泡PostBack类事件,除了Changed类以外的所有事件都在这里引发。
  8. PreRender - 预呈现,这名字不怎么好记,改为“末日审判”或许会好一些,因为作为上帝的程序员在这里判决每一个变量的最终值。
  9. SaveViewState - 保存ViewState,判决执行的阶段,变量最终值在此保存,判入地狱的变量无权进入ViewState这个天堂并从此消失。
  10. Render - 呈现,可能是生命周期中最无法解耦的一个阶段。
  11. Unload - 卸载,有加载自然有卸载,但其实没有多少人知道它的存在。

追赶加载不同于一般加载,打个比方的话: 
11个步骤中,粗体字部分比喻成“军机处”(专门发布军事任务),非粗体部分(处理PostData事件等)比如成“军事任务”。 
父亲(Parent Control)带领着儿子(Control)加入了光荣的人民解放军,随时准备为伟大的WEB革命献身。 
父子俩人沿着同一条革命行军路线(生命周期路线),一路上有多个军机处。每个军机处仅发布该处到下一处之间军事任务列表(任务太多了,所以分多处发布,分布式嘛)。父子均在军机处获取军事任务。 
父亲比较有经验,被指挥官安排从革命爆发之始就加入了革命,一直在认认真真地执行各处发布的任务。而儿子因为经验不足,由指挥官(asp.net程序员)安排不定时加入革命执行任务。 
如果安排儿子在军机处加入,可以取到该处与下一处之间所有军事任务列表,并顺利完成任务。 
否则, 
如果儿子是在相邻两个军机处之间加入的话,因为没有收到 到达下一军机处之前的 军事任务列表,自然就会在到达下一军机处之前,什么也不会干(因为不知道干什么)。 
儿子接到指挥官(asp.net程序员)的军事任务:“处理PostData事件”,由父亲引导执行(因为老爸年纪大有经验些)。 
如果儿子在名为“load“的军机处或以前被安排加入革命,可以取到“处理PostData事件”的军事任务,完成任务没问题。否则儿子因为没完成任务WEB革命失败,伤心的可是我们这些指挥官了。

本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2009/05/08/1452539.html,如需转载请自行联系原作者
相关文章
真下饭!字节技术官DDD(领域驱动设计)手册,拆解业务代码首选
至少20年前,一些顶尖的软件设计人员就已经认识到领域建模和设计的重要性,但令人惊讶的是,这么长时间以来几乎没有人写出点儿什么,告诉大家应该做哪些工作或如何去做。尽管这些工作还没有被清楚地表述出来,但一种新的思潮已经形成,它像一股暗流一样在对象社区中涌动,我把这种思潮称为领域驱动设计(domain-driven design)。
|
IDE Linux 开发工具
零基础也能学会!Linux下安装RStudio工具及实现远程访问的详细指南
RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问,从而将 RStudio IDE 的强大功能和工作效率带到基于服务器的集中式环境中。
|
Java 调度 C++
ANR分析总结
ANR分析总结
1486 0
ANR分析总结
|
监控 前端开发 Java
Spring Boot中的拦截器配置
Spring Boot中的拦截器配置
|
SQL 存储 缓存
Mysql优化高级篇(全)
目录前言1. 简介1.1 安装1.2 MySQL逻辑架构存储引擎2. 索引优化分析2.1 原因2.2 常见通用的join查询2.3 索引2.3.1 索引分类2.3.2 索引结构2.3.3 索引情况2.4 性能分析2.4.1 id 前言 本篇文章主要涉及mysql的高级篇,主要是mysql的架构介绍、索引优化分析、查询截取分析、mysql锁机制以及主从复制等 在这之前的学习可参考我之前的文章进行学习 数据库知识 链接 数据库查询常用语句语法 博客链接 数据库中增删改常用语法语句(全) 博客
78783 19
Mysql优化高级篇(全)
|
存储 弹性计算 小程序
阿里云服务器的四种购买方式及其适合对象和购买流程简介
对于第一次购买云服务器的新手用户来说,阿里云服务器购买页面有点复杂,从云服务器购买、配置选择到网站上线全过程都是很多新手用户关心的问题,2023年了,小编决定写一篇阿里云服务器购买流程的图文教程。
631 1
阿里云服务器的四种购买方式及其适合对象和购买流程简介
|
机器学习/深度学习 数据可视化 算法
SHAP值:用博弈论的概念解释一个模型
SHAP值:用博弈论的概念解释一个模型
948 0
SHAP值:用博弈论的概念解释一个模型
|
域名解析 网络协议 算法
阿里云免费SSL证书配置(图文详解)
阿里云SSL免费证书在哪申请?一个阿里云账号一年可以申请20张免费SSL证书,很多同学找不到免费SSL的入口,阿小云来详细说下阿里云SSL证书免费申请入口链接以及免费SSL证书申请流程
4314 0
|
Python
趁着课余时间学点Python(八)函数的简单理解
趁着课余时间学点Python(八)函数的简单理解
135 0
趁着课余时间学点Python(八)函数的简单理解
|
人工智能 安全 搜索推荐
苹果 WWDC 2016 大会内容预测:Siri将成最大亮点
6 月 13 日,世界各地的苹果粉又会踏上年度旧金山朝圣之旅,因为 2016 年度苹果全球开发者大会(WWDC)即将召开。这场会议已经见证了很多颠覆性新产品的诞生,比如 iPhone 和 iPad。从严格意义上来说,WWDC是一场开发者会议,当然也会发布一些影响商业技术用户的消息。以下是对这次WWDC大会发布内容的推测。
290 0
苹果 WWDC 2016 大会内容预测:Siri将成最大亮点