I';我有一个django网站,上面有大量的javascript,但是我的客户机的连接性很差——如何优化?

I';我有一个django网站,上面有大量的javascript,但是我的客户机的连接性很差——如何优化?,django,apache,caching,Django,Apache,Caching,我们正在为一些客户托管django服务,这些客户使用的是非常糟糕且断断续续的连接。非洲部分地区的卫星和GPRS连接尚未从最近的光缆登陆中受益 我整合了javascripts并使用了小型化版本,试图清理样式表,还有什么不 像一个好的django实现者一样,我让apache提供所有静态信息,如css和JS以及其他静态媒体。我已经启用了apachemodulesdeflate(对于gzip)和expired,以尽量减少javascript包的重新传输(主要是jQuery的巨大成本)。我还启用了djan

我们正在为一些客户托管django服务,这些客户使用的是非常糟糕且断断续续的连接。非洲部分地区的卫星和GPRS连接尚未从最近的光缆登陆中受益

我整合了javascripts并使用了小型化版本,试图清理样式表,还有什么不

像一个好的django实现者一样,我让apache提供所有静态信息,如css和JS以及其他静态媒体。我已经启用了apachemodules
deflate
(对于gzip)和
expired
,以尽量减少javascript包的重新传输(主要是jQuery的巨大成本)。我还启用了django的gzip中间件(但与apache的deflate结合起来似乎没有多大作用)

主要问题-优化带宽利用率还需要做些什么

  • 头文件中是否有django优化,或者不确保“已经看到的数据”不会通过网络传输
  • django缓存框架似乎是针对服务器优化而定制的(尽量减少对数据库的影响)-这如何转化为实际的带宽利用率
  • apache上还有哪些其他调整可以确保浏览器不会试图获取它已经拥有的数据

您可以将jQuery委托给一个与非洲连接更好的CDN,例如(而且,这是一项免费服务!)。除此之外,我还推荐每一篇文章(或视频演讲,有很多!),虽然他的演讲、书籍和论文对每一位网络开发人员来说都是无价的,但我认为对于那些为低带宽观众服务的人来说,它们尤其珍贵(例如,他在最新著作和演讲中提出的一个建议是,世界上有相当一部分浏览器没有从deflate或gzip中获得压缩好处——这与其说是关于浏览器本身,还不如说是关于代理和防火墙做错了事,所以“手动压缩”仍然很重要!).

这肯定不是我在这方面有很多经验的领域,但是研究Django的
ConditionalGetMiddleware
可能会很有用。我认为它可能会帮助您解决第一个要点


编辑:这可能是一个很好的起点:

您的一些优化对于提高服务器的性能很重要,但不要将它们与优化带宽利用率混淆。换句话说,gzip/deflate是相关的,但Apache提供静态内容却不是(尽管它很重要)

现在,对于您的问题,您需要看三件事:发送了多少数据,需要多少连接来获取数据,以及连接有多好

使用deflate/gzip、expires、最小化javascript等主要涉及第一个方面。因此,我只能添加一两件您可能不知道的事情。首先,您应该升级到Django 1.1,如果您还没有,因为它更好地支持Django视图的ETags/expires头。您可能已经有了这些hea对于Apache中的静态数据,DER可以正常工作,但如果您使用的是较旧的Django,则动态视图中的DER(可能)设置不正确

对于下一个领域,即连接数,您需要将javascript和css文件整合到尽可能少的文件中,以减少连接数。将图像文件整合到单个“sprite”图像中也非常有用。有几个Django项目可以处理此方面:,(这是唯一一个将创建图像精灵),您也可以看到


关于连接有多好的最后一个方面,您应该按照Alex的建议查看全球CDN,或者至少将您的站点托管在离您的用户更近的ISP上。这对非洲来说可能很困难,根据我的经验,非洲甚至无法与欧洲ISP建立良好的连接(至少南部非洲……北非可能更好).

您使用firebug或safari的开发者模式来评测页面了吗?它们是确定不同元素(js/html/images/css/etc)的实际时间和带宽成本的好工具。firebug的Yslow插件也是一个方便的评测工具。