Sam*_*Sam 27 php redirect location header
在漫长的疲惫寻求加速我的网站,我发现重定向有问题:目前我的index.php通过PHP标头位置处理所有主页重定向301永久重定向: website.com>> website.com/en/home 和website.de>> website.de/de/homeetcettera etcettera(大约20)对于这个多语言网站,它需要200ms到6000ms才能进行重定向.看看瀑布!
在那之后,页面在霹雳眨眼之间加载!你不会说什么浪费时间?什么是服务器这么做?仔细检查后,我最好的猜测是:它做了洗衣!
我几乎放弃了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重写.点了,但是,也许还有其他错误,我应该纠正,然后继续为我更难的apache正则表达式语法.
C.更快的方式:当我浏览include预期的主页,而不是重定向,然后所有加载速度快,但网址没有被重写:它位于浏览器栏上的website.com,而我希望包括它成为website.com/EN /家.这可能用PHP吗?要包含+更改网址的当前地址?
结论:您可以使用index.php或使用.htaccess重定向.从我的测试中得到Sofar(来自下面的天才答案!感谢所有人!)后者在速度方面似乎无与伦比:重定向比重定向更快!将重定向减少到比第一个dns查找短.
该死的,我讨厌陷入这种问题.你需要消除一些变量.
首先,我应该指出,在您开始输出内容之前,PHP不会刷新所有标头(或者,如果output_buffering(?)ini指令设置为x字节,直到输出x字节为止).因此,以下脚本将不会完成"发送标头"直到最后:
<?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
Run Code Online (Sandbox Code Playgroud)
如果你放入exit;或echo "wheeeee"; exit;放在那个PHP脚本的顶端,对en/home的调用会发生什么?那么当你用一个简单的空文件替换它会发生什么?如果php脚本exit速度很慢但是纯文本文件速度很快,那么PHP解释器可能会扮演有趣的bug.如果你仍然得到两者的延迟,你已经消除了实际的响应生成(但是如果是这样的话,我仍然想要提出一些想法).
另外,你可以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);
Run Code Online (Sandbox Code Playgroud)
您是否尝试过从其他机器或世界其他地方做同样的请求?这可以确认或否认它是否只是您的机器.
如果是响应生成,您可以尝试的另一件事是在生产服务器上进行一些hack-profiling.我讨厌不得不做这些事情,但有时你的代码只是拒绝在生产服务器上表现,就像它在你的开发环境中或在登台时一样.对生成的脚本执行以下操作/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);
Run Code Online (Sandbox Code Playgroud)
针对它运行一些请求,检查以确保'crap.log'正在写入内容(检查权限!!),然后您将获得一些数据,以显示脚本中是否存在需要的内容作为缓慢的原因进一步调查.
哦,我提到了MySQL索引吗?您在请求期间是否在进行任何查询?您是否已将所有正确的索引添加到表中?
Steven Xu在你的问题评论中提出了一个很好的观点 - 你确定你用来生成瀑布的程序给你提供了很好的信息吗?尝试安装Firebug,如果你还没有,点击firefox右下角的小火炬图标,确保"Net"面板打开,然后重新运行你的请求,看看瀑布是否与你的结果一致在你使用的程序中看到.
此外,我知道这是一个愚蠢的建议,我道歉,但我认为需要说:你的主机不允许ssh,只使用PHP 4?我会认真考虑另一位主持人.它甚至可以解决这个具体问题.
我会想到它会添加更多东西.