github Pages绑定域名

网站已经有了,需要对网站来绑定一个自己的个性域名,本人是买了一个阿里云的域名,也就是现在正在使用的laofu.online。当然这个是主域名,我们需要是是一个带有含义的二级域名,这里我添加一个blog.laofu.online的域名。

映射记录的添加

买了域名后,阿里云会有一个后台,这里我们需要把现在的域名转发到我们github-pages所生成的网站。这里我们只需要添加一个CName的记录就可以了,设置如下:

domain

github添加CName文件

域名的跳转是双向的,我可以转发给你,你也要在服务器上面绑定打指定的域名才行,这个就可以在github的gh-pages的根目录下添加一个CName的文件,文件是你的二级域名,github会自动绑定CName中的域名。

domain

domain

如何搭建免费博客

对于经常写博客的人,都很想拥有一个属于自己的独立博客,但一个独立的博客可能需要以下几个东西:

  1. 域名
  2. 一个前端的模板
  3. 一个后台的管理
  4. 一个数据库
  5. 部分的统计和其它模块

这样的话,我们的精力可能都了要放到博客的管理上面,而不是博客的内容。 随着github的出现,这样问题出现了改观,使用gitbub提供的github pages功能可以提供一个独立的站点供我们使用。结合相关的域名配置,我们就可以很方便的搭建属于自己的博客平台。

github Pages的使用

概述

对于开发者来说github是很熟悉的,是一个托管代码和开源的网站.如果你想找一个开源的项目,首先看到的可能是一个源码的列表,这样对于项目的展示不够直观,github pages就是为也解决这个问题而出现,允许开发者自定义一个展示页面,来替代原有的代码列表。

具体的规则

在github的项目中,创建一个gh-pages的分支,分支创建完成后就可以使用http://{userName}.github.io/{projectName}来进行访问。更详细参见:github Pages{:target=”_blank”}

一个实例

  1. 创建一个项目,并对项目进行初始化,运行以下命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       
    mkdir gitDemo #创建一个目录

    cd gitDemo

    git init #git 初始化

    git checkout --orphan gh-pages # 创建gh-pages分支。

    ```
    2. 进行gitDemo文件夹,添加一个html文件,index.html,添加如下内容:

    ``` html
    <h1>Hello github Pages!!</h1>
  2. 在github上面添加一个Repositories,名为blogTest

  3. 把项目推送到分支,执行以下命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106

    git add .

    git commit -m 'first'

    git remote add origin https://github.com/{userName}/blogTest

    git push origin gh-pages

    ```

    大约等待2min后,访问https://{userName}.github.io/blogTest/index.html,看到如下效果:


    ![gh-pages](/img/assets/02/01.png)

    --------------------------

    #### 总结一下

    对于上面所述的github Pages(**以下称gh-Pages**)是github给用户提供一个**"静态页面的web服务器"**,我们可以根据需要把页面上传到指定的仓库中,可以通过github的规则来完成访问。到这里,不禁有一个疑问,gh-Pages虽然给了一个可以展示html平台,写博客如果全部都写html,那我们还要精力去调整样式和布局的问题.再者博客也要有评论功能,这两个问题如何解决?


    ### jekyll 模板

    jekyll 是基于ruby来编写的一个博客模板生成工具,也就是说我们可以根据相关的规则来生成对应的html文件,当然这份工作github也能帮你去做。详细介绍参见[jekyll官方文档](https://jekyllrb.com/){:target="_blank"}。

    #### jekyll安装

    jekyll的安装可以参见

    [windows安装Jekyll](https://jekyllrb.com/docs/windows/#installation){:target="_blank"} |[linux和MacOS安装Jekyll](https://jekyllrb.com/docs/installation/){:target="_blank"}

    #### jekyll使用

    1. jekyll 安装是否成功,首先看下jekyll的版本,执行:

    ``` bash
    jekyll --version

    ```

    ![jekyllversion](/img/assets/02/02.png)


    2. 创建jekyll的指定目录

    ``` bash
    mkdir _posts

    mkdir _layout

    echo >>_config.yml

    ```

    3. 在_layout下创建一个default.html,作为一个网站的模板,添加如下内容(此处代码中的所有的{ {中间都有一个空格,为了不让jekyll去解析,拷贝的时候请注意):

    ``` html
     <!DOCTYPE html>
      <html>
      <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <title>{ { page.title} }</title>
      </head>
      <body>

        { { content } }

      </body>
      </html>

    ```

    jekyll的支持Liquid 语法,详细参见:[Liquid for Designers](https://github.com/Shopify/liquid/wiki/Liquid-for-Designers){:target="_blank"}


    4. 进入_posts创建一个markdown文件或者是html文件,文件名格式必须是:年-月-日-xxxx.md

    ``` html

     ---
      layout: default
      title: Hello Jekyll
      ---
      <h2>{ { page.title } }</h2>
      <h3> Hello jekyll </h3>


    ```


    5. 创建首页,首页是为了显示文章列表的网页,我们需要做的是遍历_post文件夹中的所有文章,然后展现出来,添加简单的代码如下:

    ``` html
     ---
      layout: default
      title: My Blog
      ---
      <h2>{ { page.title } }</h2>
      <p>最新文章</p>
      <ul>
        { % for post in site.posts % }
          <li>{ { post.date | date_to_string } } <a href="{ { site.baseurl } }{ { post.url } }">{ { post.title } }</a></li>
        { % endfor % }
      </ul>
  4. 编译和运行,一切都准备好后,开始编译和生成我们的网站:

    
     jekyll build   # 生成_site目录         
    
    
     jekyll server  # 生成并启动一个server,127.0.0.1:4000可以访问本地的目录。     
    

    在浏览器中打开127.0.0.1:4000可以看到刚刚生成的网站:

      ![my blog](/img/assets/02/03.png)          
      ![my blog](/img/assets/02/04.png)             
    
  5. 到这里,我们使用jekyll根据我们写的模板生成了对应的静态页面,下面我们把数据传入到github的gh-pages下面。

    
      git add .
    
      git commit -m 'myblog'   
    
      git push origin gh-pages     
    

等待2min后,github 会根据我们上传的模板把数据生成到对应的分支上面. 开始你的博客之旅!

IIS执行原理

服务器的监听(IIS6.0+版本)

  1. 当请求到达服务器时,请求最终会到达TCPIP.SYS驱动程序,TCPIP.SYS将请求转发给HTTP.SYS网络驱动程序的请求队列中(可以理解为专门处理http请求的进程),当然在处理请求的过程中,HTTP.SYS进程会维护一个配置表用缓存请求的url和和应用程序池对应的关系。

  2. 当一个http请求被捕获到,HTTP.SYS会读取配置表,如果对应的应用程序没有启动,则HTTP.SYS会启动IIS相对应的应用程序。具体运行机制可以理解成为:

HTTP.SYS

HTTP.SYS是TCP之上的一个网络驱动程序,因此,HTTP.SYS不再属于IIS(这里说的IIS都是IIS6.0+版本,下文如果不特殊指明,默认为IIS6.0+版本),它已经从IIS中独立了出来。 Http.Sys独立有以下几个优点:

  • 可靠性: HTTP.SYS运行在内核模式下,作为操作系统的驱动程序运行。因此,HTTP.SYS不会受到用户代码的影响,它始终处于稳定运行状态,对用户的http请求进行监听,并及时作出反应。

  • 高性能: 从用户发送http请求到系统返回响应结果的这一过程都是HTTP.SYS在内核模式下完成的。不需要在内核模式和用户模式下进行切换,这样就极大地节省了系统资源,提高了请求的响应速度。

IIS处理

W3SVC

  1. W3SVC服务是一个独立运行的程序,寄宿在svchost.exe进程中,负责用户的参数监视和重新启动应用池的工作。 当一个请求进入HTTP.SYS的队列中,会通知W3SVC服务根据IIS中的配置去创建对应的应用进程,进行处理。

W3WP.exe

  1. 当HTTP.SYS把请求传递给IIS时候,W3SVC会启动对应的应用程序池
  2. 当用户请求的是静态文件,如:HTML和图片等,IIS会直接读取文件内容,转成二进制文件流,返回给HTTP.SYS。
  3. 当请求非静态文件,如:.aspx。
  • 3-1. w3wp.exe会根据IIS中ISAPI扩展读取对应的处理的Dll,用asp.net举例:当用户访问的网站是asp.net平台,则 类型是.cshtml和.aspx文件类型。根据配置w3wp.exe会加载aspnet_isapi.dll(简称是ISAPI).

IIS中应用程序的映射:

IIS中处理流程:

  • 3-2. 当ISAPI加载后,会启动一个ASP.NET的工作进程,把信息的控制权交给Asp.Net来处理。此处请求的处理由IIS交给了asp.net的程序。

    基于对上面的说明,可以把IIS的处理过程理解表示如下图:

说到这里,把IIS请求的流程简单的做了说明,后面的工作就由Asp.Net去完成了。

.Net程序的运行过程

说到Asp.Net的运行,不得不先说下.Net的运行机制(算是为后面的文章做一个铺垫)。
在vs中写了一段C#代码(或者其它.net平台的语言,此处简单的用C#来说明) ,编译器会把代码转译成IL的中间语言程序。当程序运行时,系统调用jit编译器,把中间语言编译成对应的cpu指令,等待cpu的最终调用。具体过程如下:

托管和非托管

  • 定义

    托管的概念是在.net框架诞生后出现的。用比较通俗的话解释就是运行在.net框架下,并受.net框架管理的应 用或其他组件称为托管的,反之为非托管的。

  • 区别

    1、托管代码是一种中间语言,运行在CLR上;非托管代码被编译为机器码,运行在机器上。
    2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;非托管代码依赖于平台和语言。
    3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;非托管代码需要自己提供安全检测、垃圾回收等操作。

  • 性能
    对于这个问题,首先澄清.net中的JIT是不同Java中的JVM的(JVM是一个Interpreter,在运行时读取IL汇编代码,然后模拟成x86代码),在.Net中使用的是一种更高级的技术,在程序首次加载的时候,JIT是把代码编译成本地指令(这也就是为什么.Net程序首次运行很慢的原因,但你的程序不可能只跑一次,尤其是在服务器上面的程序!),.NET程序经JIT转换后与非托管程序运行一样了,直接由CPU执行。
    但对于JIT来说,恰恰由于是即时编译,对当前的环境认识的比非托管更为深刻(包括当前的CPU最新的指令),在编译时可以进行优化。而非托管代码,在编译的时候要保证兼容性,所以只能使用最通用的cpu指令(公共的CPU指令),所以我个人认为,.Net在执行的效率上更具有优势。
    非托管编译运行过程

托管代码编译运行过程

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×