gpt4 book ai didi

php - 为什么我的 301 重定向需要这么长时间?

转载 作者:IT王子 更新时间:2023-10-29 01:19:27 25 4
gpt4 key购买 nike

在为加速我的网站而进行的漫长而乏味的探索中,我发现重定向有问题:目前我的 index.php 通过 PHP header location 301 Redirect Permanently 处理所有主页重定向: website.com>> website.com/en/homewebsite.de >> website.de/de/home etcettera etcettera(这个多语言网站大约有 20 个)重定向需要 200 毫秒到 6000 毫秒。看看瀑布!

在那之后,页面在闪电般的眨眼间加载完毕!你说这多浪费时间?服务器一直在做什么?经过仔细检查,我最好的猜测是:它正在洗衣服!

为此我几乎要放弃 PHP 了!非常欢迎所有关于我令人费解的问题的线索 +1

一个。鉴于事实:Apache/2.0.54 Fedora,PHP 5.2.9。没有数据库:只有包含大约 15 个 php 的平面 php 文件,用页眉和页脚完成我的页面)。 YSlow 等级:92/100!良好的页面速度:93/100! javascript 和 css 尽可能结合。缓存控件似乎也设置得很好(正如成绩所证明的那样)。满分为 100 的 7 分中缺少什么:未使用 Keep-Alive(超出我在共享主机中的控制并且未使用内容分发网络。我可以忍受缺少的 7 分,但这是对速度的重大打击!

B.此外:我最近在这里得到了很好的见解,我应该通过 htacces 使用 url 重写。但是,也许这里有一些 else 错误,我应该在继续使用对我来说更困难的 apache regex 语法之前更正。

C.更快的方法:当我 php include 预期的主页而不是重定向时,所有加载速度都很快,但 url 没有被重写:它位于浏览器栏上的 website.com,而我希望在包含之后它成为 website.com/en/home。这可能用 PHP 实现吗?要包含+更改 url 的当前地址吗?

screenshot

结论:您可以使用 index.php 或使用 .htaccess 进行重定向。从我的测试来看(来自下面的天才答案!谢谢大家!)后者的速度似乎无与伦比:重定向比 php 重定向快得多!将重定向缩短到比第一次 DNS 查找更短。

see here how to do this correclty for multilingual site

最佳答案

该死,我讨厌被这种问题困住。您需要消除一些变量。

首先我应该指出,PHP 不会刷新它自己的所有 header ,直到您开始输出内容(或者,如果 output_buffering(?) ini 指令设置为 x 字节,直到您输出 x 字节)。所以下面的脚本直到最后才会完成“发送 header ”:

<?php
header('Content-Type: text/pants');
sleep(6);
header('Ding-Ding: time to put the socks in the dryer');
echo "z"; // headers are sent here

如果您输入 exit;echo "wheeeee"; 对 en/home 的调用会发生什么情况? exit; 在该 PHP 脚本的最顶部?那么当你用一个普通的空文件替换它时会发生什么?如果带有 exit 的 php 脚本很慢,但纯文本文件很快,则 PHP 解释器可能在播放有趣的代码。如果您仍然遇到两者的延迟,那么您已经消除了实际响应生成的原因(但如果是这种情况,我仍在尝试提出一些想法)。

还有,你能ssh到服务器吗?如果是这样,您可以尝试从服务器内部获取相同的页面吗?如果没有速度问题,我会看客户端。如果你不能 SSH,你可以尝试从 PHP 发出请求,但我真的不确定这是否有效:

<?php
$context = stream_context_create(array(
'http'=>array(
// send request headers if you need to
'header'=>array(
'Foo: Bar',
'Bar: Baz',
),
),
));
$start = microtime(true);
$response = file_get_contents('http://yourserver.com/', null, context);
$end = microtime(true) - $start;
var_dump($end);

// for some bizarre reason, PHP emits this variable into the local scope.
var_dump($http_response_header);

您是否尝试过从其他机器或世界其他地方执行相同的请求?这可以确认或否认它是否只是您的机器。

如果是响应生成,您可以尝试的另一件事是在生产服务器上进行一些黑客分析。我讨厌必须做这些事情,但有时您的代码只是拒绝在生产服务器上表现得像在您的开发环境或暂存环境中一样。对生成 /en/home 的脚本执行此操作:

<?php
// put this at the very top
$rqid = uniqid('', true);
$h = fopen(__DIR__.'/crap.log', 'a');
fwrite($h, $rqid.' [START] '.microtime(true).PHP_EOL);
fclose($h);

// do all that other wonderful stuff, like laundry or making a cup of tea

// put this at the very end
$h = fopen(__DIR__.'/crap.log', 'a');
fwrite($h, $rqid.' [END] '.microtime(true).PHP_EOL.PHP_EOL);
fclose($h);

针对它运行一些请求,检查以确保“crap.log”正在写入内容(检查权限!!),然后您将获得一些数据来显示您的脚本中是否有内容这需要进一步调查,作为缓慢的原因。

哦,我有提到 MySQL 索引吗?您在请求期间是否有任何疑问?您是否已将所有适当的索引添加到表中?

Steven Xu 在评论中针对您的问题提出了一个很好的观点 - 您确定您用于生成瀑布的程序是否为您提供了良好的信息?尝试安装 Firebug如果您还没有,请单击 firefox 右下角的小 Firebug 图标并确保“网络”面板已打开,然后重新运行您的请求并查看瀑布是否与您看到的结果一致您使用的程序。

此外,我知道这是一个愚蠢的建议,我深表歉意,但我认为有必要说明一下:您的主机不允许 ssh 并且只使用 PHP 4?我会认真考虑另一位主人。它甚至可以解决这个特定问题。

我会根据我的想法添加更多内容。

关于php - 为什么我的 301 重定向需要这么长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4480975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com