问题A部分▉(100项悬赏,授予)
主要问题是如何使这个网站,加载更快。首先,我们需要阅读这些瀑布。感谢大家对瀑布读数分析的建议。从这里显示的各种瀑布图可以看出主要的瓶颈:PHP生成的缩略图。这个协议--从David建议的CDN加载的jquery --得到了我的赏赐,尽管我的站点总体上只快了3%,而且没有回答网站的主要瓶颈。是时候澄清我的问题了,还有另一个赏赐:
问题B部分▉(100项悬赏,授予)
现在的新焦点是解决6 jpg图像的问题,这是造成加载延迟的最大原因。这6幅图片是PHP生成的缩略图,很小,只有3~5kb,但加载速度相对较慢.请注意各种图形上的“时间到第一个字节”。这个问题仍然没有解决,但是詹姆斯得到了回报,他修复了RedBot 下划线的头错误:“如果修改了--因为条件请求没有改变返回全部内容。”
问题C部分▉(我最后的悬赏: 250分)
不幸的是,即使是REdbot.org头错误被修复后,由PHP生成的图像所造成的延迟仍然没有被触及。这些小小的3~5Kb缩略图到底在想什么?所有的头信息都能把火箭送回月球。任何关于这个瓶颈的建议都会受到赞赏,并被视为可能的答案,因为我已经被这个瓶颈问题困住了七个月了。
在我的网站上的一些背景信息: CSS在顶部。在底部的JS ( JQuery,JQuery用户界面,购买菜单awm/menu.js引擎,标签js引擎,视频swfobject.js)第二张图片上的黑线显示了什么启动了加载。愤怒的机器人是我的宠物"ZAM“。他是无害的,而且常常更快乐。
负荷瀑布:按时间顺序计算的_ http://webpagetest.org

并行域分组_ http://webpagetest.org

站点-Perf瀑布_ http://site-perf.com

针织品工具瀑布\ http://tools.pingdom.com

GTmetrix瀑布 http://gtmetrix.com

发布于 2011-01-27 09:12:39
首先,使用这些多个域需要几个DNS查找。您最好还是使用把这些图像组合成一个精灵,而不是传播请求。
其次,当我加载您的页面时,我在all.js上看到了大多数阻塞(~1.25s)。我看到这是以(旧版本的) jQuery开始的。您应该从Google中引用这一点,不仅是减少负载时间,而且完全是可能会避免对它的HTTP请求。
具体来说,可以在这些URL中引用最新的jQuery和jQuery UI库(如果您对为什么省略http:感兴趣,请参见这个职位 ):
//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js
//ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js如果使用默认的jQuery UI主题之一,也可以使用将其CSS和图像从Google中删除。
在优化了jQuery宿主之后,还应该将awmlib2.js和tooltiplib.js合并到一个文件中。
如果你解决了这些问题,你就会看到一个显著的进步。
发布于 2011-01-30 21:44:58
几天前,我遇到了一个类似的问题&我找到了head.js。这是一个Javascript插件,允许您加载所有JS文件并行。希望这能有所帮助。
发布于 2011-02-09 13:40:05
我不是专家但是..。
关于这一点:“如果-修改-由于条件请求返回完整的内容不变。”还有我的评论。
用于生成缩略图的代码应该检查以下内容:
如果其中任何一个都是假的,那么无论如何都应该生成缩略图并返回。如果两者均为真,则应进行以下检查:
如果其中任何一个是假的,则应该返回缓存的缩略图。
如果这两种情况都为真,则应该返回304 http状态。我不确定是否需要它,但我也亲自返回缓存-控制,过期和最后修改的头部连同304。
关于GZipping,我被告知没有必要使用GZip图像,所以忽略我评论的那一部分。
编辑:我没有注意到你在你的帖子中添加了什么内容。
session_cache_limiter('public');
header("Content-type: " . $this->_mime);
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 2419200) . " GMT");
// I'm sure Last-Modified should be a static value. not dynamic as you have it here.
header("Last-Modified: " . gmdate("D, d M Y H:i:s",time() - 404800000) . " GMT");我还确信,您的代码需要检查HTTP_IF_MODIFIED_SINCE头并对其作出反应。仅仅设置这些头文件和.htaccess文件就不能提供所需的结果。
我想你需要这样的东西:
$date = 'D, d M Y H:i:s T'; // DATE_RFC850
$modified = filemtime($filename);
$expires = strtotime('1 year'); // 1 Year
header(sprintf('Cache-Control: %s, max-age=%s', 'public', $expires - time()));
header(sprintf('Expires: %s', date($date, $expires)));
header(sprintf('Last-Modified: %s', date($date, $modified)));
header(sprintf('Content-Type: %s', $mime));
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
if(strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) === $modified) {
header('HTTP/1.1 304 Not Modified', true, 304);
// Should have been an exit not a return. After sending the not modified http
// code, the script should end and return no content.
exit();
}
}
// Render image datahttps://stackoverflow.com/questions/4810806
复制相似问题