00:00
好,我想了一下,还是提前把图画好,这样说比较方便啊。呃,大家看,我们想要用Sam lef来实现一个模板视图引擎啊,这样的一个解析啊,因为它解析以后,模板里边的动态值就变成具体值了啊,这个时候我们就能显示页面了,想完成这个工作呢?呃,我们把它分成两步啊,一步在初始化阶段完成,一步在请求处理阶段完成。为什么要分开呢啊,如果仅仅只是去实现这个功能啊,那么我们不区分,全部都在请求处理阶段来做,呃,这个语法上也能够行得通啊,就是他也能够执行下来,但是呢,性能上边呢会差一点啊,为什么这么说呢?就是这个过程当中呢,我们会用到一个对象叫template in,哎,翻译过来就是叫做模板引擎嘛,这个对象呢,在它创建的过程当中,对每个请求来说呢,都是一样的。
01:01
啊,那么如果这个过程呢,每个请求都一样,那我在每个请求来执行的时候,再都重新再执行一遍啊,把这对象建出来啊GC垃圾回收销毁掉,建出来销毁掉,建出来销毁掉。你这不就是白费功夫吗?你想这个我们GC啊,他去查找我们的垃圾对象啊,他去执行GC执行清除,甚至他这个过程当中呢,还得去移动我们这个对象啊等等这些操作,它本身GC也是要花费很多时间的,创建对象它它底层呢,也是要支付一些个代价,也是需要消耗性能的,哎,结果呢,你创建了半天啊,最后销毁了,你创建和销毁呢,都是白做的啊,你销毁了还要建,建出来还要销毁。而且你做的是完全重复的工作,所以说呢。为了我们提高性能的考虑啊,这样重复性的工作呀,咱们做一次就行了,哎,重复性的工作做一次就行了啊。为什么结婚这事儿这么麻烦呢?就是让让你知道啊,这个结婚以后轻易的不要离婚啊,你这个下一次你要再结婚的话,这个会很麻烦,哎,你就会珍惜是吧,现有的生活好嘞啊所以说这个时候呢,为了让这个创建模板引擎的这个操作,我们只做一次。
02:18
我们把它呢在初始化阶段来做,然后呢,将来把这个template硬件呢,作为我们的一个成员变量。如果成员变变量所在的这个类是单实例的啊,那么这个类里边的这个成员变量,它也就是一个,其实也是单实例的啊,所以time类的引擎这个对象呢,其实在整个项目里边只有一个,哎,然后后边呢,由他呢来为每一次请求分别去进行不同的处理啊。这就是首先第一个问题,为什么是分成这两个阶段分别来做,哎,那么说呢,这个模板引擎这个对象啊,它创建是怎么创建的呢?大致是这么一个过程哈。我们先需要拿到solve context对象啊,要在我们solve里边呢,拿到solve context对象应该是不费事儿的。
03:07
然后呢?这里边还需要用到一个template resolve对象,哎,我们把solve context啊把这个对象。传入到创建template reserve啊,模板解析器的构造器里边,啊,传入到创建它对象的构造器里边。那么template这个对象呢?他创建好了以后,需要做这样一些个设置。啊呃,你这些呢,其实我们说哈,你不用去太在意这些细节,就包括我们刚才说的这个创建这个对象的过程,你把这个templateorver建好以后,给他装备进去就行了,啊设置进去就行了,这个过程呢,其实也不需要你去记,包括我们下边请求处理阶段,他怎么去处理的,也不需要你去记,不需要你去学,不需要你去掌握,为什么要跟你去说这些呢?啊是因为我们下边这一整套代码呢,都是直接粘过来的。
04:02
我们这儿说一下呢,只是让你大概知道啊,说我们在这儿呢,去摘的是什么。哎,然后呢,呃,你想如果我们不跟你说哈,直接啪一大堆100多行的代码啊,一个类拿过来说,我们就把它粘过来就完了啊,然后你你心里边会很难接受啊,你这到底是干啥的哈,你就会很懵啊,但是我们在这儿给你解释一下啊,跟你说一下我们后边要粘的代码,他要干嘛啊,但是呢,这个代码为什么要粘呢?啊,为什么不需要学呢?因为后边必然会要用框架啊,只要用到框架以后呢,这些东西框架都替我们封装好了。哎,呃,不需要我们在这个。再去考虑底层这些东西怎么去写啊,包括我们说像创建temp类的音擎这样的对象,这样的代码都是框架替我们去写好了,哎,所以说呢,在这儿我们只是借用这些写好的代码呢,来实现我们的功能,我们在这儿过渡一下就行了啊,这个代码呢,必然要用现成的,哎,相当于呢,我们自己给自己写了一个,呃,很简单很简单啊,很小的很小的一个小框架啊,就可以这么去理解啊。
05:10
哎,我讲只是为了让大家呢,说一会儿,呃,丢给你一大段代码,让你直接拿过来用的时候啊,你你不要心里边儿不要有这个抗拒啊,你知道他是干什么事的。第二个请求处理的阶段呢。是这一部分啊,这个时候你看我们就是使用temp类的引擎模板引擎这个对象去调一个process方法。哎,然后呢,我们就能够把一个包含动态内容的一个模板进行处理和解析,让它里边呢,全部变成这个静态的确定的固定的内容,这就是一个处理啊,也可以说呢,这就是我们服务器端渲染要做的事情。然后呢,在这个里边哈。这涉及到这样一个东西,哎,我们template name呢,是我们传入的逻辑视图名称,哎,那说什么叫逻辑视图呢,它是相对于物理视图来说的啊,这个详细的我们一会儿再说啊,然后呢。
06:05
现在我们就知道,通过逻辑视图的名称,咱们就知道找哪个页面啊,说白了就是这意思,然后呀,需要这个地方,你看需要一个web context啊,Web context呢,我们去拗一下,然后它的构造器呢,需要request对象,Response对象,Context对象。然后呢,设置响应题内容类型字符集啊,就这时候需要给response对象设置一下,主要是为了指定一下UTF杠八啊,这样的话就没有字符乱码问题。哎,把它传进来,它传进来,然后response get传进来啊,就能够执行这个处理,然后呢,我们说这为什么有这么三个东西标颜色了啊,是因为呢,对每个请求来说呢,这三个东西是不一样的。所以说呢,这一部分才需要拿到请求处理阶段来做。啊,如果这些,如果这里边儿,呃,没有说请求处理阶段没有不一样,全都一样的话,咱有可能就全部放在初始化阶段了,哎,正因为正因为这些呢,是每个请求是不一样的啊,所以说咱们放在请求处理阶段来处理。
我来说两句