<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Orm on ZRJ | 学习笔记</title>
        <link>https://blog.zrj.me/tags/orm/</link>
        <description>Recent content in Orm on ZRJ | 学习笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Sun, 30 Sep 2012 23:15:53 +0800</lastBuildDate><atom:link href="https://blog.zrj.me/tags/orm/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>从点击到呈现 — 详解一次HTTP请求（3）</title>
        <link>https://blog.zrj.me/posts/2012-09-30-%E4%BB%8E%E7%82%B9%E5%87%BB%E5%88%B0%E5%91%88%E7%8E%B0-%E8%AF%A6%E8%A7%A3%E4%B8%80%E6%AC%A1http%E8%AF%B7%E6%B1%823/</link>
        <pubDate>Sun, 30 Sep 2012 23:15:53 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-09-30-%E4%BB%8E%E7%82%B9%E5%87%BB%E5%88%B0%E5%91%88%E7%8E%B0-%E8%AF%A6%E8%A7%A3%E4%B8%80%E6%AC%A1http%E8%AF%B7%E6%B1%823/</guid>
        <description>&lt;p&gt;请求进入服务器之后，服务器上的的 http 监听进程会得到这个请求，然后一般情况下会启动一个新的子进程去处理这个请求，同时父进程继续监听。http 服务器首先会查看重写规则，然后如果是文件真实存在，例如一些图片，或者 css js 等的静态文件，就会直接把这个文件返回，如果是一个动态的请求，那么会根据 url 重写模块的规则，把这个请求重写到一个 rest 风格的 url 上，然后根据动态语言的脚本，来决定调用什么类型的动态文件脚本解释器来处理这个请求。&lt;/p&gt;
&lt;p&gt;我们以 php 语言为例来说的话，请求到达一个 php 的 mvc 框架之后，框架首先应该会初始化一些环境的参数，例如远端 ip，请求参数等等，然后根据请求的 url 送到一个路由器类里面去匹配路由，路由由上到下逐条匹配，一旦遇到 url 能够匹配的上，而且请求的方法也能够命中的话，那么请求就会由这个路由所定义的处理方法去处理。&lt;/p&gt;
&lt;p&gt;请求进入处理函数之后，如果客户端所请求需要浏览的内容是一个动态的内容，那么处理函数会相应的从数据源里面取出数据，这个地方一般会有一个缓存，例如 memcached 来减小 db 的压力，如果引入了 orm 框架的话，那么处理函数直接向 orm 框架索要数据就可以了，由 orm 框架来决定是使用内存里面的缓存还是从 db 去取数据，一般缓存都会有一个过期的时间，而 orm 框架也会在取到数据回来之后，把数据存一份在内存缓存中的。&lt;/p&gt;
&lt;p&gt;orm 框架负责把面向对象的请求翻译成标准的 sql 语句，然后送到后端的 db 去执行，db 这里以 mysql 为例的话，那么一条 sql 进来之后，db 本身也是有缓存的，不过 db 的缓存一般是用 sql 语言 hash 来存取的，也就是说，想要缓存能够命中，除了查询的字段和方法要一样以外，查询的参数也要完全一模一样才能够使用 db 本身的查询缓存，sql 经过查询缓存器，然后就会到达查询分析器，在这里，db 会根据被搜索的数据表的索引建立情况，和 sql 语言本身的特点，来决定使用哪一个字段的索引，值得一提的是，即使一个数据表同时在多个字段建立了索引，但是对于一条 sql 语句来说，还是只能使用一个索引，所以这里就需要分析使用哪个索引效率最高了，一般来说，sql 优化在这个点上也是很重要的一个方面。&lt;/p&gt;
&lt;p&gt;sql 由 db 返回结果集后，再由 orm 框架把结果转换成模型对象，然后由 orm 框架进行一些逻辑处理，把准备好的数据，送到视图层的渲染引擎去渲染，渲染引擎负责模板的管理，字段的友好显示，也包括负责一些多国语言之类的任务。对于一条请求在 mvc 中的生命周期，可以参考这里，&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/archives/404&#34;  title=&#34;临摹了一个 PHP MVC 框架&#34;
     target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;临摹了一个 PHP MVC 框架&lt;/a&gt;，在视图层把页面准备好后，再从动态脚本解释器送回到 http 服务器，由 http 服务器把这些正文加上一个响应头，封装成一个标准的 http 响应包，再通过 tcp ip 协议，送回到客户机浏览器。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
