【问题标题】:how to reduce time of first byte如何减少第一个字节的时间
【发布时间】:2016-09-28 04:41:40
【问题描述】:

我正在使用 WordPress 框架并在名称便宜的专用服务器上工作,并且只有一个站点在此服务器上运行。 即使在那之后,我的瀑布时间也在 500 毫秒的范围内,但我想让它在 100 毫秒左右。 这是我的网站 (http://ucbrowserdownload.net/) 和瀑布 你可以看到从我的角度来看一切都很完美,但仍然没有得到一些解决方案。 也可以查看http://labnol.org/ 这个网站也是 WordPress 并且使用相同的主题,即使我在我的索引页面上调用的图像或博客非常少,即使我错了一个巨大的瀑布。 想知道,如何解决所有这些问题,以及知道 WordPress、主题或主机中的问题出在哪里。 完全陷入困境,过去几周没有解决方案。 您的帮助将不胜感激。 谢谢

【问题讨论】:

  • 我不知道为什么人们给出负利率,在我看来他们不知道答案。
  • 有时,google pagespeed insights 工具会提供一些很好的提示。注意资源的加载顺序(有些资源在加载之前会阻塞渲染)。
  • 基本正确。他们不知道答案,因为您的网站运行缓慢的原因大约有 12831239 个。我们所能看到的是你的服务器很慢,只需要大约 400 毫秒来生成你的 4kb 主页。您应该尝试一般性能提示,查看google page insightsapache performance optionswordpress optimization(可能还有更多,请参阅google)。

标签: javascript php jquery mysql wordpress


【解决方案1】:

Original Source

Nginx 优化

本文介绍的最佳 Nginx 配置。再来一次 简要浏览已知参数并添加一些新参数 直接影响 TTFB。

化合物

首先我们需要定义 Nginx 的“worker”数量。 worker_processes Nginx 每个工作流能够处理许多 连接并链接到物理处理器内核。如果你知道的话 您的服务器中有多少核心,您可以指定数量 你自己,或者相信 Nginx:

worker_processes auto;
# Determination of the number of working processes

另外,你必须指定连接数:

worker_connections 1024;
# Quantification of compounds by one working process, ranging from 1024 to 4096

请求

到Web服务器可以处理的最大请求数,它是 必须使用默认关闭的指令 multi_accept :

multi_accept on;
# Workflows will accept all connections

值得注意的是,该功能只有在大 同时请求的数量。如果要求不是很多,它 优化工作流程是有意义的,这样他们就不会在 徒劳的:

accept_mutex on;
# Workflows will take turns Connection

提高 TTFB 和服务器响应时间取决于指令 tcp_nodelay 和 tcp_nopush :

on tcp_nodelay; 
tcp_nopush on;
# Activate directives tcp_nodelay and tcp_nopush

如果你不深入细节,这两个函数可以让你 禁用 TCP 的某些在 90 年代相关的功能, 当互联网刚刚获得动力,但没有意义 现代世界。第一个指令一旦发送数据 可用(绕过 Nagle 算法)。第二个允许你 发送标题响应(网页)和文件的开头, 等待填充包(即,包括 TCP_CORK )。所以 浏览器之前可以开始显示网页。

乍一看,功能是矛盾的。因此, 指令 tcp_nopush 应该与 sendfile 一起使用。 在这种情况下,包装在装运前按照指示填充 比 read + the 的方法更快、更优化 写 。包满后Nginx自动禁用 tcp_nopush 和 tcp_nodelay 使套接字发送数据。 启用 sendfile 很简单:

sendfile on;
# Enable more effective, compared to read + write, file sending method

因此所有三个指令的组合减少了 网络并加快文件的发送速度。

缓冲区

另一个重要的优化影响缓冲区的大小 - 如果 它们太小了,Nginx 经常会提到磁盘太大—— 将很快填满 RAM。 Nginx 缓冲区为此,您需要 设置四个指令。 Client_body_buffer_size 和 client_header_buffer_size 设置正文的缓冲区大小并读取 客户端请求标头,分别。 client_max_body_size 集 客户端请求的最大大小,以及 large_client_header_buffers 指定最大数量和大小 用于读取大型请求标头的缓冲区。

最佳缓冲区设置如下所示:

10K client_body_buffer_size; 
client_header_buffer_size 1k; 
of client_max_body_size 8m; 
large_client_header_buffers 2 1k;
# 10k buffer size on the body of the request, 1 KB per title, 8MB to the query buffer and 2 to read large headlines

超时和保活

适当配置待机时间和keepalive也可以 显着提高服务器响应能力。

指令client_body_timeout和client_header_timeout设置延时 在正文上并读取请求标头:

client_body_timeout 10; 
client_header_timeout 10;
# Set the waiting time in seconds

在客户端没有响应的情况下使用 reset_timedout_connection 你可以指定 Nginx 禁用此类 化合物:

reset_timedout_connection on;
# Disable connections timed-out

指令keepalive_timeout设置停止前的等待时间 connection 和 keepalive_requests 限制了 来自同一客户端的 keepalive-requests:

keepalive_timeout 30; 
keepalive_requests 100;
# Set the timeout to 30 and limitations 100 on client requests

好吧 send_timeout 设置传输响应中的等待时间 两次写操作之间:

send_timeout 2;
# Nginx will wait for an answer 2

缓存

启用缓存可显着缩短服务器响应时间。 Nginx 缓存 方法在关于缓存的材料中有更详细的介绍 Nginx,但在这种情况下包含重要的缓存控制。 Nginx 能够发送请求到 redkoizmenyaemyh 缓存数据, 通常在客户端使用。为此,服务器 您要添加一行的部分:

. Location ~ * (jpg | jpeg | png | gif | ico | css | js) $ {expires 365d;}

目标文件格式和持续时间缓存

缓存常用文件的信息也没有什么坏处:

open_file_cache max = 10000 = 20s the inactive; 
open_file_cache_valid 30s; 
open_file_cache_min_uses 2; 
open_file_cache_errors on;
# Enables the cache tags 10 000 files in 30 seconds

open_file_cache 指定文件的最大数量 信息被存储,以及存储时间。 open_file_cache_valid 设置您需要检查的相关性的时间 信息,open_file_cache_min_uses 指定最小数量 客户对文件的引用和 open_file_cache_errors 包括缓存故障排除文件。

日志记录

这是另一个会显着降低性能的功能 整个服务器以及相应的响应时间和 TTFB。所以 最好的解决方案是禁用基本日志并存储有关 仅限严重错误:

off the access_log; 
the error_log /var/log/nginx/error.log crit;
# Turn off the main logging

Gzip 压缩

Gzip 的用处再怎么夸大也不为过。压缩可以 显着减少流量,缓解通道。但他有一个 缺点 - 需要压缩时间。所以它必须关闭 改善 TTFB 和服务器响应时间。 Gzip 在这个阶段,我们不能 建议关闭 Gzip,因为压缩会提高 Time To Last Byte,即 整个页面加载所需的时间。这在大多数情况下是 更重要的参数。关于 TTFB 和改进服务器响应时间 极大地影响了 HTTP/2 的大规模实施,其中包含 用于报头压缩和多路复用的内置方法。所以在 未来可能会禁用 Gzip 不会像现在这样突出。

PHP 优化:Nginx 中的 FastCGI

所有网站都使用现代服务器技术。以 PHP 为例,它是 优化也很重要。通常,PHP 打开一个文件,验证并 编译代码,然后执行。可以设置这样的文件和进程, 因此 PHP 可以使用 OPcache 缓存 redkoizmenyaemyh 文件的结果 模块。和 Nginx,使用 FastCGI 模块连接 PHP 可以存储 将 PHP 脚本的结果发送给用户。

最重要的

资源优化和网络服务器的正确设置 - 主要影响 TTFB 和服务器响应时间的因素。也不要忘记稳定版本的定期软件更新,这 是为了优化和提高性能。

【讨论】:

  • 优秀而彻底的答案! :)
  • 总是提供源代码只是复制/粘贴...学分转到thehighload.com/post/TTFB+analysis+and+optimization 你确定OP在Nginx下运行服务器吗?
  • 你能解释一下如何使用上述步骤吗?
  • @gnziet 请参阅“如何配置”:thehighload.com/post/Optimizing+Nginx+configuration
  • 这与 OP 的问题有什么关系?我说没有迹象表明 Nginx 是正在运行的 Web 服务器。此外,许多因素会在 Web 服务器甚至在其端口上建立连接之前影响 TTFB,而其他因素则嵌入到 Web 内容的实际设计中。
猜你喜欢
  • 2018-12-04
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多