日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何大幅提高 Django 网站加载速度

發布時間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何大幅提高 Django 网站加载速度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:進擊的coder

之前做了個爬蟲案例平臺,https://scrape.center/,具體文章在?原創丨發布一個爬蟲案例平臺,幫助爬蟲初學者進行練手。

平臺內我設計了非常多的網站,有服務端渲染、客戶端渲染等,其中服務端渲染的頁面大家可能爬取的頻率比較高,時不時就會遇到被爬掛的情況。

比如這個網站:https://ssr1.scrape.center/,當訪問頻率高的時候,甚至我后端開了 20 個 Pod 也承受不來,大家并發量有點猛啊。

這個后端是用 Django 寫的,而且這個網站的數據不怎么更新,索性再加個 Cache 吧,在 Django 中最高效的 Cache 當屬 Memcached 了,本篇文章就來簡單記錄下 Django 對接 Memcached 的過程。

官方資料

千說萬說都不如官方文檔來的直接,首推官方文檔:https://docs.djangoproject.com/en/3.1/topics/cache/。

然后后面就是我簡單的筆記了。

依賴庫

首先需要安裝個依賴庫,這里用的是 python-memcached,可以使用 pip 來安裝:

pip3?install?python-memcached

由于我使用的是 Docker,所以就把它寫到 requirements.txt 里面了。

配置

另外還需要在 settings.py 里面配置一下,內容如下:

CACHES?=?{'default':?{'BACKEND':?'django.core.cache.backends.memcached.MemcachedCache','LOCATION':?'cache:11211',} }

這里 LOCATION 是需要一個 Memcached 服務,運行在 11211 上面。

另外還需要開啟兩個中間件:

MIDDLEWARE?=?['django.middleware.cache.UpdateCacheMiddleware',...'django.middleware.cache.FetchFromCacheMiddleware', ]

這里要加兩個中間件,一個在最前面,一個在最后面,順序不能換,中間的是之前配置的其他中間件。

Docker-Compose

OK,接下來就是使用 Docker 啟動了,這里 Docker-Compose 里面就需要增加一個 Memcache 服務,配置如下:

version:?'3' services:ssr1-backend:container_name:?'scrape-ssr1-backend'restart:?alwaysbuild:?./backendimage:?'scrape-ssr1-backend'ports:-?'8000:8000'environment:...cache:image:?memcachedports:-?'11211:11211'entrypoint:-?memcached-?-m?64

這里主要是 cache 的配置,需要加上端口映射和入口參數,這里內存大小設置為 64M。

Kubernetes

我的部署使用的是 Kubernetes,所以對應的 yaml 文件也需要更改了,配置更改如下:

apiVersion:?v1 items:-?apiVersion:?v1kind:?Servicemetadata:annotations:kompose.cmd:?kompose?-f?docker-compose.yml?-o?kubernetes.yml?convertkompose.version:?1.20.0?()creationTimestamp:?nulllabels:io.kompose.service:?ssr1-backendname:?ssr1-backendnamespace:?scrapespec:ports:-?name:?"8000"port:?8000targetPort:?8000selector:io.kompose.service:?ssr1-backendstatus:loadBalancer:?{?}-?apiVersion:?apps/v1kind:?Deploymentmetadata:annotations:kompose.cmd:?kompose?-f?docker-compose.yml?-o?kubernetes.yml?convertkompose.version:?1.20.0?()creationTimestamp:?nulllabels:io.kompose.service:?ssr1-backendname:?ssr1-backendnamespace:?scrapespec:replicas:?20revisionHistoryLimit:?1strategy:?{?}selector:matchLabels:io.kompose.service:?ssr1-backendtemplate:metadata:annotations:kompose.cmd:?kompose?-f?docker-compose.yml?-o?kubernetes.yml?convertkompose.version:?1.20.0?()creationTimestamp:?nulllabels:io.kompose.service:?ssr1-backendspec:containers:-?env:-?name:?APP_ENVvalue:?production-?name:?MEMCACHED_HOSTvalue:?ssr1-cacheimage:?germey/scrape-ssr1-backend:${TAG}name:?scrape-ssr1-backendports:-?containerPort:?8000resources:?{?}restartPolicy:?Alwaysstatus:?{?}-?apiVersion:?v1kind:?Servicemetadata:annotations:kompose.cmd:?kompose?-f?docker-compose.yml?-o?kubernetes.yml?convertkompose.version:?1.20.0?()creationTimestamp:?nulllabels:io.kompose.service:?ssr1-cachename:?ssr1-cachenamespace:?scrapespec:ports:-?name:?"11211"port:?11211targetPort:?11211selector:io.kompose.service:?ssr1-cachestatus:loadBalancer:?{?}-?apiVersion:?apps/v1kind:?Deploymentmetadata:annotations:kompose.cmd:?kompose?-f?docker-compose.yml?-o?kubernetes.yml?convertkompose.version:?1.20.0?()creationTimestamp:?nulllabels:io.kompose.service:?ssr1-cachename:?ssr1-cachenamespace:?scrapespec:replicas:?1revisionHistoryLimit:?1strategy:?{?}selector:matchLabels:io.kompose.service:?ssr1-cachetemplate:metadata:annotations:kompose.cmd:?kompose?-f?docker-compose.yml?-o?kubernetes.yml?convertkompose.version:?1.20.0?()creationTimestamp:?nulllabels:io.kompose.service:?ssr1-cachespec:containers:-?image:?memcachedname:?scrape-ssr1-cacheports:-?containerPort:?11211resources:?{?}restartPolicy:?Alwaysstatus:?{?} kind:?List metadata:?{?} --- apiVersion:?networking.k8s.io/v1beta1 kind:?Ingress metadata:name:?ingress-ssr1namespace:?scrapeannotations:nginx.ingress.kubernetes.io/ssl-redirect:?"true"nginx.ingress.kubernetes.io/rewrite-target:?/ spec:tls:-?hosts:-?ssr1.scrape.centersecretName:?tls-wildcard-scrape-centerrules:-?host:?ssr1.scrape.centerhttp:paths:-?backend:serviceName:?ssr1-backendservicePort:?8000path:?/

注意這里我給 Django 后端增加了一個環境變量,叫做 MEMCACHED_HOST,所以在 Django 中,我們可以通過環境變量來讀取 Memcached 的 Host,當然端口也可以類似設置,不過端口我就直接寫死了,配置更改如下:

CACHES?=?{'default':?{'BACKEND':?'django.core.cache.backends.memcached.MemcachedCache','LOCATION':?os.getenv('MEMCACHED_HOST')?+?':11211',} }

OK,這樣改完之后重新部署就好了。

部署之后我直接將 Pod 降到了 2 個,第一次訪問速度可能稍慢,但是一旦加載出來之后,該頁面就會被緩存下來,后續訪問速度就只有兩三百毫秒了,測速如下:

簡單測速結果

網址在這:https://ssr1.scrape.center/,大家可以來爬爬試試吧。

作者:崔慶才

排版:崔慶才

-------?End -------

點右下角「在看」與轉發

是對我們最大的支持

特別推薦下公眾號「價值前瞻」,分享讀書、成長和投資思考,歡迎來串門。

回復「書單」?可獲取精選書單一份,包括《如何閱讀 一本書》、《巴菲特之道》、《金字塔原理》、高瓴張磊的《價值》、《投資最重要的事》、《戴維斯王朝》等書籍的筆記內容或思維導圖

價 值 前 瞻

做一個有遠見的人

掃碼關注,查看更多內容

總結

以上是生活随笔為你收集整理的如何大幅提高 Django 网站加载速度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。