服务器网站所有的Php文件访问ttfb 时间过长?

如题,首字节加载慢……用测试网站速度一般在1-10秒甚至更久。
找遍了全网也没找到原因……崩溃惹

那就不是问题。就是你的网站慢,就这么简单。。。和配置没关系,不信你写个简单的php代码,看看是不是就是毫秒的waitting

以上是 的全部内容, 来源链接:

}

前言:当我们从电脑上去访问一个网址时,究竟发生了什么?这个问题可能是自己思考或者面试的时候问到,这里我们以访问百度首页为例,进行一个全面的HTTP请求分析。

计算机网络核心结构,就是TCP/IP五层网络模型(OSI七层模型是将应用层分为了三层)

以及,每一层对应的协议


键盘输入:你要访问,自然需要在浏览器地址栏中使用键盘输入(正常情况下),这个过程就涉及到输入设备与计算机的交互了,这个属于物理层,这里就不探讨了(==其实是我不会)
请求域名:首先你访问的是,并不带域名,所以浏览器会自动补全协议头。但是我们知道,很多时候域名会有http和https,它俩的默认端口一个是80,一个是443,在这里,一般都是对应域名的网站做了端口转发,http协议实现了HSTS机制来使得重定向到HTTPS下的域名。所以HTTP到HTTPS这个过程是服务器来完成的,至于浏览器的默认端口一直是80端口
IP查找:目前我们只知道了带协议类型的域名,那么是如何到具体的服务器的呢?我们知道,对于因特网内每个公有地址IP都是唯一的(局域网内不一定),域名相当于IP的别名,因为我们无法去记住一大堆无意义的IP地址,但如果用一堆有意义的字母组成,大家就能快速访问对应网站。
DNS解析:通过域名去查找IP,先从本地缓存查找,其中本地的hosts文件也绑定了对应IP,若在本机中无法查到,那么就会去请求本地区域的域名服务器(通常是你对应的网络运营商如移动),这个通过网络设置中的LDNS去查找,如果还是没有命中的话,那么就去根域名服务器查找,这里有所有因特网上可访问的域名和IP对应信息(根域名服务器全球共13台)。至少到了这里,我们肯定能查找对应的IP了,要不就是这个域名不对。
路由转发:然后我们通过网卡、路由器、交换机等设备,实现两个IP地址之间的通信。这里用到的主要就是路由转发技术,根据路由表去转发报文。。。还有子网掩码、IP广播等等知识点。这里就不多做介绍了,计算机网络里有详细准确的概念~~
三次握手:HTTP的底层基于TCP/IP协议,TCP连接的建立过程少不了三次握手。

第一次握手:客户端主动发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器收到SYN包并确认,发送SYN+ACK到客户端,服务器进入SYN_RECV状态
第三次握手:客户端收到SYN+ACK包,发送ACK确认连接,发送完毕后客户端和服务端进入ESTABLISHED状态,完成三次握手
数据发送:建立完连接后,TCP才能真正的开始传输数据==。TCP会依次、有序的发送一定大小的报文,其中包括了超时重传、拥塞窗口、慢开始快重传等等概念。总之加了很多机制,用来保证数据包的完整、有序。当然以上都只是传输层中TCP做的事,实现上在应用层也加了很多机制。


大家请看这张图,一个完整的HTTPS由以上众多模块组成。
」,那么就要遵循 DNS 协议。

DNS 运行在 53 号端口,于是浏览器会创建一个 UDP 套接字,标识该套接字的二元组分别是『目的 IP 地址』和『目的端口』。而套接字本质上就是为了唯一标识应用层进程,就是为了让响应报文能够找到目的地。

那么这里会创建一个 UDP 套接字,二元组为「本机 IP 地址 后执行的全部过程

在浏览器中输入后执行的全部过程

1、客户端浏览器通过DNS解析到的IP地址 
(6) 服务器通过HTTP响应把首页文件发送给浏览器 
(8) 浏览器将首页文件进行解析,并将Web页显示给用户。


DNS解析域名为目的IP,通过IP找到服务器路径,客户端向服务器发起HTTP会话,然后通过运输层TCP协议封装数据包,在TCP协议基础上进行传输

HTTP会话会被分成报文段,添加源、目的端口;TCP协议进行主要工作

(3)网络层:IP(IP数据数据包传输和路由选择), 
为数据包选择路由,IP协议进行主要工作

(4)数据链路层:ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址) 
相邻结点的可靠传输,ARP协议将IP地址转成MAC地址。

作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。

本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~

顶级域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。

DNS递归查找如下图所示:

DNS有一点令人担忧,这就是像这样的整个域名看上去只是对应一个单独的IP地址。还好,有几种方法可以消除这个瓶颈:

  •  是DNS查找时返回多个IP时的解决方案。举例来说,/ HTTP/

    GET 这个请求定义了要读取的URL: “//”中的斜杠是至关重要的。这种情况下,浏览器能安全的添加斜杠。而像“http: /// path=/; domain=./” 而非“/ 和/”才是要访问的正确地址,所以它会发送另一个获取请求:

    头信息以之前请求中的意义相同。



  • 请求处理阅读请求及它的参数和cookies。它会读取也可能更新一些数据,并讲数据存储在服务器上。然后,需求处理会生成一个HTML响应。

所 有动态网站都面临一个有意思的难点 -如何存储数据。小网站一半都会有一个SQL数据库来存储数据,存储大量数据和/或访问量大的网站不得不找一些办法把数据库分配到多台机器上。解决方案 有:sharding (基于主键值讲数据表分散到多个数据库中),复制,利用弱语义一致性的简化数据库。

委 托工作给批处理是一个廉价保持数据更新的技术。举例来讲,Fackbook得及时更新新闻feed,但数据支持下的“你可能认识的人”功能只需要每晚更新 (作者猜测是这样的,改功能如何完善)。批处理作业更新会导致一些不太重要的数据陈旧,但能使数据更新耕作更快更简洁。

时需要重获取的几个URL:

    //////”在地址中代表什么?聪明的答案是"Facebook内容分发网络"。Facebook利用内容分发网络(CDN)分发像图片,CSS表和JavaScript文件这些静态文件。所以,这些文件会在全球很多CDN的数据中心中留下备份。

    静态内容往往代表站点的带宽大小,也能通过CDN轻松的复制。通常网站会使用第三方的CDN。例如,Facebook的静态文件由最大的CDN提供商Akamai来托管。

    由上面的图,我们能知道,SAPI运行PHP都经过下面几个阶段

    *  模块初始化阶段(Module init):即调用每个拓展源码中的的PHP\_MINIT\_FUNCTION中的方法初始化模块,进行一些模块所需变量的申请,内存分配等。

    * 请求初始化阶段(Request init):即接受到客户端的请求后调用每个拓展的PHP\_RINIT\_FUNCTION中的方法,初始化PHP脚本的执行环境。

    ####我们具体来看看每一步都做了什么?

    1)**模块初始化阶段**:

    在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中), 该过程只进行一次,第一步的操作在任何请求到达之前就发生了。

    **从图上可以看出,php从下到上是一个4层体系**

    Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕zend实现。

    围绕着zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析就是extension的典型应用)。

    Interface,也就是服务端应用编程接口,sapi通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过sapi成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。后面将在sapi章节中介绍

    这就是我们平时编写的php程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。

    引擎(Zend)+组件(ext)的模式降低内部耦合

}

WordPress 对于普通用户来说,玩玩确实挺好用,但是如果安装的东西多,有没有特别进行一些优化的话,是很慢的,所以慢不慢是相对的,看你怎么优化你的服务器。

对于怎么优化,号称国内 WordPress 界最快的快男(自封的),然我也一直提供 WordPress 优化服务,这方面我还是很有经验的。

不管 WordPress 博客还是其他 CMS 建的站点,优化的第一步一定是动静态分离,这也是你看到新浪,腾讯等门户,他们图片的域名和网站的域名不是同一个的原因。

网站的静态文件一般有两种:第一种是网站的 CSS,JS 和一些主题的常用背景图片和按钮文件,这些图片如果网站不进行改版或者其他改动,基本上是不会修改的,第二种是每天更新的网站内容中时上传的图片或者附件,这些图片文件也是基本不会改动的。

解决好静态文件存储和加速,网站性能就首先能得到基本的保证了,WordPress 构建的网站和博客也是一样的。对于这些静态文件来说,最好的解决方案永远是使用 CDN 网络进行加速,这样服务器的压力将大大降低,因为访问页面只有当前页面是在自己的服务器上,其他所有图片,JS 和 CSS 都是从

WordPress 博客如何使用 CDN 服务,我写的 插件,已经支持第三方云存储服务:和,只要你安装了 插件,就可以一键实现 WordPress 博客静态文件 CDN 加速。

优化好静态文件之后,就要开始对网站的动态内容进行优化,优化动态内容,首先要有一个稳定网络环境,稳定的主机供应商和服务器性能的优化。

选择一个靠谱的主机托管商,个人推荐 BGP 或者多线机房,让全国用户访问都能有不错的速度,然后尽量选择独立的服务器,再不济,也得 VPS, 因为你没有服务器的 Root 权限很多东西是无法进行的,国内一般推荐:和。

服务器问题解决之后,服务器可以做如下优化:

  • PHP 开启 OPCache:把经过编译后的 PHP 代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。
  • MySQL 设置 MySQL Query Cache,可以保存保存查询结果,同样的查询不再从数据库检索,对速度有很大的提升。

要彻底明白和搞懂 WordPress 性能优化,首先要理解 WordPress 缓存机制,WordPress 默认是一种叫做 的对象缓存机制,它是把需要缓存的内容按照 Key-Value 这样的模式进行缓存(和 No-SQL 的 key-value 的有点类似),当然它还支持按照 Group 来划分和避免缓存的内容冲突。

所以最基础的 WordPress 缓存插件就是,把 WordPress 产生的 Key-Value 存起来,如果是使用 Memcached,就是存到内存,如果使用 Flie 就是存到硬盘中,当然高级的 WordPress 插件还能做更多,比如 把整个页面缓存到硬盘中,下次直接访问静态的 HTML 文件,让服务器直接绕过 PHP,节约 CPU 时间。 会把整个页面当做一个对象存到内存里面。我个人推荐使用 Memcached 足够。

会把 WordPress 的对象存到内存里面,服务器的内存足够大,读取和存储速度也够快,并且内存缓存命中率也大于 97%。另外我们 WordPress 程序经过优化之后,每个页面的查询一般在 2 条左右,所以整个网站效率很高,首页甚至做到 0 SQL,页面生成只需要 0.0013秒

  • 只使用必须的 WordPress 插件,安装太多的 WordPress 插件很容易引起性能问题。
  • 从正规站点下载 WordPress 主题,这样下载的主题才能保证质量和安全,推荐我和 xintheme 发布的 和 主题。已经实现了首页 0 SQL。
  • 这两个函数,功能基本一样,但是 get_the_terms 直接从对象缓存中取数据,无查询,而 wp_get_object_terms 每次都从数据库中取数据。

总结一下:优化 WordPress,首先下载和安装 插件,可以帮你干很多事情,然后选择好的服务器和托管商,比如和,对 WordPress 程序进行优化,并且使用 Memcached 做好缓存。

}

我要回帖

更多关于 ie未响应因为脚本长时间运行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信