【问题标题】:Site incredibly slow for firefox, instant on every other browser: KeepAlive issue?Firefox 的网站非常慢,在所有其他浏览器上都是即时的:KeepAlive 问题?
【发布时间】:2011-03-26 14:10:26
【问题描述】:

我有一个网站,用 Firefox 加载一个页面需要 10 秒,再加载图像需要 10 秒。这是一个在 apache 上运行的 php 页面。图片只是静态图片。

它在 chrome 上运行良好....即时加载。

在谷歌上搜索答案已将我指向可能存在的问题,即保持活动状态和缺少内容长度使 firefox 感到困惑,实际上,服务器似乎没有在静态或非静态内容上设置内容长度,但在服务器上禁用保持活动会使加载时间加倍!

有些网站建议在浏览器上禁用保持活动,但我不愿意向所有查看该页面的人推荐!我是不是找错树了?

浏览器是 Lucid Lynx 上的 firefox 3.6.8。服务器是 Apache 2.2.11。

apache.conf 已附加...我认为它是开箱即用的,尽管我将 KeepAlive 超时减少到 3 以尝试加载页面是徒劳的。

我是不是找错树了?

ServerRoot "/etc/apache2"

LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>
<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>
DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/apache2/error.log
LogLevel warn
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined
Include /etc/apache2/conf.d/
Include /etc/apache2/sites-enabled/

【问题讨论】:

  • 你能链接到实际的网站吗?是不是重JS?
  • 我在farnthropkelly.co.uk建立了一个测试站点
  • 我已经在那个网站上发布了一些时间... DNS 查找很好.. 目前我认为这是一个奇怪的 Firefox 错误.. 将在 Windows 版本上尝试这个firefox,也许还有 IE,或者不同版本的 firefox。
  • 我一直在对许多其他站点运行篡改数据工具,看起来这是我的 firefox 安装在许多站点上遇到的问题,但已被本地缓存掩盖。这可能是本地网络问题。
  • “保持活动状态和缺少内容长度的可能问题” - 您能否为此提供任何参考? TIA

标签: apache http firefox keep-alive content-length


【解决方案1】:

不要禁用keep-alive。它使得一个连接可以用于获取多个页面(或图像,或.js文件,或.css文件等),从而显着减少页面加载时间。

只要确保您的脚本添加 Content-Length 标头,一切都会好起来的。

【讨论】:

  • 我会看看 php 脚本,但是 apache 不应该将内容长度添加到静态文件吗?想想看,我也不必手动将内容长度添加到 php 文件中......
  • Apache 应该这样做,是的。但只需从修复简单的事情开始。内容长度问题可能会导致分块传输、https 以及我多年来看到的各种怪异问题。只需按照规范执行:指定 Content-Length。
  • 正在阅读w3.org/Protocols/rfc2616/rfc2616-sec14.html 的 wc3 规范,该规范说,在传输之前知道内容长度时,应该设置内容长度。如果内容是动态生成的,那么确定值的最佳做法是什么?以及如何让 apache 设置静态图形文件的内容长度?
  • 不了解 apache,我认为当 keepalive 开启时它会设置 content-length。从 php 脚本获取内容长度,通常(作为示例)是通过在完成生成输出后调用 ob_get_length() 来完成的。 (是的,在这种情况下您必须使用输出缓冲)在某些情况下,您可能会提前知道内容长度。
  • 好的,我的静态文件也有同样的问题,而且服务器正在提供内容长度的标头,所以我将暂时搁置这行查询。我已经在测试网站上发布了相关数据。
【解决方案2】:

问题在于本地 DNS 查找。命令行 DNS 解析似乎没问题,而且 chrome 的速度快如闪电,这一事实隐藏了这个问题。原来chrome使用DNS预取,它不使用本地网络堆栈。这让我完全走错了方向。

创建本地绑定服务后,firefox 似乎运行良好。

因此,在与其他浏览器相同的平台上运行 chrome 时需要注意一些事项。

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 2013-08-31
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多