2010-05-26 56 views
0

我有一个web应用程序的页面,其中有大约13个由我的应用程序生成的图像,这是在Kohana PHP框架中编写的。图像实际上是图形。它们被缓存,因此它们只生成一次,但用户首次访问该页面并且必须生成图像时,大约一半的图像不会在浏览器中加载。一旦页面被请求一次并且图像被缓存,它们全部加载成功。试图加载图像的浏览器超时

做一些即席测试,如果我在浏览器中加载单个图像,需要450-700毫秒的时间才能加载一个空的缓存(我使用Google Chrome的资源跟踪功能进行了检查)。作为参考,加载缓存图像需要大约90-150毫秒。

即使图像缓存为空,我也会缓存数据和某些应用程序的启动任务,以便在第一次请求后,不需要提取任何数据。

我的问题是:

  1. 为什么图像无法加载?看起来浏览器只是决定在某个点后不下载图片,而不是等待它们全部完成加载。
  2. 我能做些什么来让他们第一次加载空的缓存?
    很明显,一种选择是减少加载时间,我可以通过分析应用程序来弄清楚如何做到这一点,但还有其他选择吗?

正如我所提到的,该应用程序位于Kohana PHP框架中,它运行在Apache上。另外,我现在通过在数据可用(即来自批处理过程)时获取页面来解决此问题,以便在用户看到它们时总是缓存图像。尽管如此,这感觉就像是一个奇怪的解决方案,我对实际上正在发生的事情感到好奇。


编辑:一个评论者要求查看请求的头:

请求

请求URL:http://domain.com/charts/chart_name/1234/
请求方法:GET
状态代码:200 OK

请求头

缓存控制:最大年龄= 0
的Referer:http://domain.com/home/chart_page
的User-Agent:Mozilla的/ 5.0(Macintosh上; U;英特尔Mac OS X 10_5_8; AppleWebKit/533.4(KHTML,如Gecko)Chrome/5.0.375.55 Safari/533。4

响应头

缓存控制:无店,无缓存,必重新验证,检查后= 0,预检查= 0
连接:保持活动
内容 - 长度:6354
内容类型:图像/ PNG
日期:星期三,2010 5月26日21时10分45秒GMT
到期日:星期四,1981年11月19日8点52分00秒GMT
保持活动:超时= 15,最大= 94
附注:无缓存
服务器:Apache
X-已启动通过:PHP/5.3.1

随着图像缓存,在响应头的唯一区别是:

的Content-Length: 1129
Keep-Alive:timeout = 15,max = 96

我在查看内容长度的奇怪差异,因为它应该是完全相同的内容。我意识到这在浏览器缓存图像方面可能没有优化,但一旦图像生成一次,整个页面加载(包括下载图像,脚本等)大约需要1-2秒。没有在服务器上缓存的图像,页面加载需要20-30s,并且几个图像根本无法加载。

+0

请将图像响应头,有和没有缓存 – Kemo 2010-05-26 08:47:41

+0

我添加了请求的头。感谢您提供的任何见解。 – notJim 2010-05-26 21:23:42

回答

0

在注意到文件大小的差异后,我意识到我已经错误地设置了Kohana的分析器,所以它在图像的末尾输出了一堆配置文件数据。每个请求都不是很多,但总体来说,它有很大的不同。图像全部加载。

相关问题