为啥 CSS 和 JS 不应该通过 Django?

Posted

技术标签:

【中文标题】为啥 CSS 和 JS 不应该通过 Django?【英文标题】:Why should CSS and JS not go through Django?为什么 CSS 和 JS 不应该通过 Django? 【发布时间】:2011-09-02 09:39:56 【问题描述】:

根据this answer 至Can I gzip javascript and CSS files in Django?:

您的 CSS 和 JS 不应该在您的生产系统上通过 Django。您需要配置 Apache(或 nginx 或其他)来提供这些服务,当您这样做时,您将能够在那里设置 gzip 压缩,而不是在 Django 中。

该问题的答案并未解释此要求/建议的原因。从不同的服务器提供静态内容(图像/CSS/JS)是否只是一种提高速度的好习惯?还是有更多内容?

【问题讨论】:

【参考方案1】:

Apache 和 Nginx 比 Django 快(因为它们做的事情少得多且简单得多)。所以用 Django 提供 CSS 和 JS 是一种资源浪费。

虽然“应该”在这里太强了,IMO。 “应该,如果你有高流量”,而是。

【讨论】:

还有。 Web 事务中最慢的部分是桌面。你想要(缓慢的)Django 实例推送无穷无尽的静态内容流吗?还是你想限制(慢)Django 实例推送重要的动态 html 页面? 诚然,django static module from django.views.static 对于大多数服务来说已经足够好了,如果您获得的流量超出了他们的处理能力,那么您要么拥有一个效率相当低的应用程序,要么您'将拥有处理移动以分别提供静态文件的资源。 @sleepynate:“足以满足大多数人的需求”。我们发现情况并非如此。我们发现让 Django 做的非常非常少,让 Apache 做尽可能多的事情使事情更具可扩展性。 Python 比 Apache 慢。 这里的提问者不明白为什么在生产中应该远离 d.v.static。我的观点是,当他有足够多的人使用他的应用程序来区分时,他可能会有资源(单独的服务器)来处理它。【参考方案2】:

Web 服务器提供的内容大致可分为两类。

    静态 动态

静态文件(CSS/JS/Img...)一般不会改变(即,它们可以从磁盘读取并发送到客户端。(推送前无需预处理

动态文件(您的动态 html 页面)通常需要以各种方式(数据库数据 + 表单处理 + 消息...)进行处理并发送给客户端。

当事情没有改变并且任何用户都保持不变时,不要将该工作分配给 Web 框架(它的额外负担),让 Web 服务器处理它

【讨论】:

【参考方案3】:

在生产环境中,您已经有 真实 http 服务器连接到 django(通过 mod_python、fcgi 或 wsgi),因此直接从它提供文件只是常识

它将更快地发送响应:

当您通过正确配置的 apache 或 nginx 提供静态文件时,开销将是最小的。根据请求,服务器检查指定路径中的文件是否存在,然后将其发送到浏览器(当然要添加一些标头)。 当您通过配置在 apache 或 nginx 后面的 django 提供静态文件时,首先 Web 服务器连接到 django,然后 django 会处理更复杂的事情: 创建请求对象, 运行 urlpatterns REGEXP 匹配,直到找到负责静态的行, 运行一些静态服务代码,将其发送回用户...

它将消耗更少的资源:

每个 django 进程都会消耗大量内存,比使用相同方式配置的 apache 进程服务相同静态文件的方式高出 10 倍,

它将更好地扩展:

正确配置的 nginx 可以处理 100 倍以上的请求,消耗更少的 CPU 和内存...

可以外包:

虽然它是写的,但您可能不需要配置 apache 或 nginx - 您可以将这些文件外包给 Amazon S3 或 Google API 等服务,因此 js 和 css 将“更接近”用户,以防出现 Google API 等服务您想要添加的库(如 jQuery)可能已经缓存在用户浏览器中。

所有这些东西加在一起只会让您的网站加载速度更快

【讨论】:

以上是关于为啥 CSS 和 JS 不应该通过 Django?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Django 不加载我的 CSS?

为啥 Web 前端开发不抛弃 HTML 和 CSS,用纯 JavaScript 开发

SHTML 和 DHTML - 应该使用它们,为啥不使用它们?

为啥 PHP 文件不用于(自定义)CSS 和 JS?

python Django1.3 建立网站,无法加载css

为啥我的 Fastcomet Django 网站没有加载 css?