我有一个web应用程序的页面,其中有大约13个由我的应用程序生成的图像,这是在Kohana PHP框架中编写的。图像实际上是图形。它们被缓存,因此它们只生成一次,但用户首次访问该页面并且必须生成图像时,大约一半的图像不会在浏览器中加载。一旦页面被请求一次并且图像被缓存,它们全部加载成功。试图加载图像的浏览器超时
做一些即席测试,如果我在浏览器中加载单个图像,需要450-700毫秒的时间才能加载一个空的缓存(我使用Google Chrome的资源跟踪功能进行了检查)。作为参考,加载缓存图像需要大约90-150毫秒。
即使图像缓存为空,我也会缓存数据和某些应用程序的启动任务,以便在第一次请求后,不需要提取任何数据。
我的问题是:
- 为什么图像无法加载?看起来浏览器只是决定在某个点后不下载图片,而不是等待它们全部完成加载。
- 我能做些什么来让他们第一次加载空的缓存?
很明显,一种选择是减少加载时间,我可以通过分析应用程序来弄清楚如何做到这一点,但还有其他选择吗?
正如我所提到的,该应用程序位于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,并且几个图像根本无法加载。
请将图像响应头,有和没有缓存 – Kemo 2010-05-26 08:47:41
我添加了请求的头。感谢您提供的任何见解。 – notJim 2010-05-26 21:23:42