<ASP.NET4 从入门到精通>学习笔记3

第三部分,状态管理与缓存

何为状态管理,起始对于web而言,经过前面章节的讲解,已经理解,对于web程序,就是一个无状态的程序,每次的请求与每次的响应,两者之间本身就是独立存在的,这一点对于早期的静态网页来说,倒没什么,因为每次的请求和响应其实都是固定不变的。但是到了动态网页时代,就不行了,web开发的很大一部分工作将变为状态管理。这一点,可能举一个例子,最具有代表性,比如说购物车,那么对于购物车而言,就需要知道他的访问者是谁?虽然他们可以在不同的页面切换,但是购物车不能够变化,此时就是一种状态管理。

(更多状态管理的场景,各位可以补充)

第14章会话状态

Session就是一种会话状态,统一浏览器在一段时间内访问服务器之后,会产生一个24位的唯一SessionID,这个ID就标识了客户端的身份,虽然客户可以在不同的网页间切换,但是SessionID都是不变的。

Session的用法,Session是Page类的内部属性,然后直接采用KEY/VALUE模式直接使用。

Session的场景,分为两种:服务端和客户端

服务端:意思就是说Session所定义的需要缓存的变量的存储位置,可以存储在进程中,专有服务器,数据库

客户端:意思就是说SessionID的存储位置,可以使cookies,也可以是url当中(用于解决非cookie支持的浏览器)

Web.confg 中的<sessionState></sessionState>节用于完成该部分的设置。

Session可以存储的数据类型,除了简单地数据类型以外,所有的可以序列化的类型都是客户存储的。

说明: page类的内置对象,有application,session,cache,request,response等,通常很多人都是用application,session,cache来用作数据缓存,其实他们是有区别的。

Application,是作为全局变量在使用,他在进程中,生命周期为应用程序生命周期。它越多占用内存越多。

Session,其实它不仅仅是存取一个变量,他存储的是一个会话内的变量,而且他会有sessionID来区分客户端,session存储变量只是他的一个间接实现功能。并且他可以存在进程,数据库,或者专用服务器中。

Cache,他是存储在进程中,生命周期是可以设置的,他有比较灵活的属性,包括过期时间,过期通知等等,他目的是完成复杂对象的缓存处理。

第15章应用程序数据的缓存

Cache对象介绍,使用方法类似Session,目的是改善复杂变量的获取方式。提升web访问的性能。

第16张输出缓存

刚开始看的时候,还真是没有特别理解什么叫做输出缓存,后来看了一下原来就是所谓的页面缓存,不同的书籍,叫法可能不同而已。为什么会存在页面缓存哪?本质目标是改善web访问的性能,对于重复网页不要重复计算,降低服务器的压力,提升web应用的性能,因此从数据的角度缓存,产生了cache,从页面的角度产生了输出缓存,就是页面生成后,放在一个地方,然后每次请求直接返回该页面。

用法:就是在每个页面头部使用<%@outputcache >指令,属性包括周期,依赖项等等。

说明:个人觉得,只从有了ajax后,输出缓存的意义降低了,因为可以局部刷新,输出整个页的概念不大了。

<ASP.NET4 从入门到精通>学习笔记3,布布扣,bubuko.com

时间: 2024-10-24 03:39:47

<ASP.NET4 从入门到精通>学习笔记3的相关文章

C PRIMER PLUS 学习笔记(一)

1显示程序执行的窗口一闪即逝.可以添加如下语句: getchar() 作用是获取键盘输入. 2 inf 和 nan float toobig = 3.4e38 * 100.0f; float not_a_number = asin(1.2);//math.h printf("%e \t %e\n", toobig,not_a_number); inf-表示无穷大,nan-Not-a-number 3 long double 的输出格式 long double x; x = 3.2e-5

C++ Primer Plus学习笔记之虚函数

C++ Primer Plus学习笔记之虚函数 C++语言的多态性有两种类型:静态多态性和动态多态性.函数重载和运算符重载就是静态多态性的具体表现,而动态多态性是指程序运行过程中才动态的确定操作所针对的对象,它是通过虚函数实现的: 1,虚函数的概念: 一个指向基类的指针可用来指向从基类派生的任何对象,这样就可以达到一个接口多个实现的访问了:虚函数是在基类中被冠以virtual的成员函数,它提供了一种接口界面.虚函数可以在一个或者多个派生类中被重新定义,但要求在派生类中从新定义时,虚函数的函数原型

C++ Primer Plus学习笔记之静态成员

C++ Primer Plus学习笔记之静态成员 关键字static可以用来说明一个类的成员(包括数据成员和成员函数),这样的成员被称为静态成员: 1,静态数据成员 在一个类中,若将一个数据说明前加上static,则该数据成为静态数据,静态数据成员被该类的所有对象共享.无论建立多少个该类的对象,都只有一个静态数据存储空间: 具体语法如下: 类型名 类名::静态数据成员[=常量表达式] 其中,常量表达式用于初始化类的静态数据成员: 静态数据成员属于类,而不属于对象,因为静态成员的存在是不依赖于某个

C++ Primer Plus学习笔记之继承类的初始化顺序

C++ Primer Plus学习笔记之继承类的初始化顺序 基类的构造函数,析构函数和操作符函数operator=是不能被派生类继承的: 那么,当创建一个派生类对象时,怎样调用基类的构造函数对基类的数据进行初始化呢??? 答案是:构造函数执行时遵行先兄长(基类),再客人(对象成员),后自己(派生类)的顺序: 另一方面,执行析构函数时,先执行派生类的析构函数,再执行基类的析构函数.原因是,对基类的破坏隐含了对派生类的破坏,所以派生类的析构函数必须先执行: #include<iostream> u

C++ Primer Plus学习笔记之运算符重载

C++ Primer Plus学习笔记之运算符重载 1,成员函数和友元函数选择的建议 下面我们先看两个例子: 成员函数重载 #include<iostream> using namespace std; class Complex { public: Complex(double r=0,double i=0) { re=r; im=i; } Complex operator+(const Complex& obj); Complex operator!(); void Display

C++ Primer Plus学习笔记之拷贝构造函数

C++ Primer Plus学习笔记之拷贝构造函数 1,什么是拷贝构造函数 拷贝构造函数有两个含义: 首先,它是一个构造函数,当创建一个新对象时,系统自动调用它: 其次,它将一个已经定义过的对象的数据成员逐一对应的复制给新对象: 如果一个类没有显式定义拷贝构造函数,C++编译器可以为该类产生一个缺省的拷贝构造函数.这个缺省的拷贝构造函数采用C的方式,将拷贝对象的内存一个字节一个字节的拷贝到拷贝对象的内存中(内存拷贝): 2,拷贝构造函数的作用 (1)创建一个新对象,并将一个已存在的对象拷贝到这

c++ primer plus学习笔记(栈指针)

c++ primer plus 程序清单14.5 程序清单14.6 模拟如下情况: 某人将一车文件交给plodson,如果plodson的收取蓝是空的,他将取出车中最上面的文件,将它放入收 取蓝,如果收取蓝是满的,他将取出栏中最上面的文件,并进行处理,然后放入发出蓝,如果收取蓝不空不满 plodson将采用抛硬币的方式来决定采取措施. 很明显,我们需要使用栈去管理上述文件. 1 #ifndef STACK_H_ 2 #define STACK_H_ 3 4 //定义类模板 5 template

《c++primer》学习笔记

花了一个多月时间总算是把这本书看完了,再去看自己家游戏的服务器的代码还是很难懂,里面用到了好多boost库的东西,不过这些东西很多都已经加入了c++11的新标准里了,要到自己能做服务器还得接着学,所以接下来的一个月开始看<C++标准库>. 把看<c++primer>的时候抄的笔记先誊在这里方便以后参考. #include 来自标准库的头文件使用<> 来自非标准库的头文件使用"" ------------------------------------

c++ primer plus 学习笔记

我的机子用Xcode,单位是字节 0开头为8进制 0x为16进制 cout默认输出的是10进制 wchar_t 宽字节,它是一种足够大的整形类型,可以用来表示的是比如中文的编码 c常量一旦被定义,就不能被修改(const) 浮点数,c++中浮点数在计算内存中由两部分组成,一部分为基数,一部分用来表示浮点,这个浮点是用二进制来表示. 非常大或者非常小的数可以用e表示法来表示 这个程序充分说明了精度的问题,double能保存更高的精度.对于c++来说float只能保存6位有效数字,如果需要更高的精度

《C++ Primer》学习笔记【第一部分 基本语言】

第2章 整型的赋值:当我们试着把一个超出其范围的值赋给一个指定类型的对象时,结果如何?答案取决于类型是signed还是unsigned的.对于unsigned,编译器会将该值对unsigned类型的可能取值数目求模然后取所得值:对于signed类型,未定义行为,很多处理器处理方式和unsigned类似. 字符串字面值的连接:std::cout << "multi-line" L"literal " << std::endl;结果未定义,即连接