三個基於 Python 的網站:知乎、豆瓣、V2EX 都存在卡頓的問題,是 Python 的問題嗎?

來源:互聯網
上載者:User
1. 知乎有時候開啟一個連結非常之慢,大量評論展開更是無法忍受。有時頁面重新整理完了,點任何串連都沒有響應。
2. 豆瓣經常掛掉,502 之類的(當然我知道這個跟 python 無關),也存在同樣的問題,時不時會響應非常慢,一個頁面等待 10s 以上。
3. v2ex 相比來說要小一點兒,也是類似的問題,但它時快時慢跟網路環境關係差別巨大。
======================================
天天刷網頁,這三個網站卡頓是很明顯的現象。
如果沒遇到這個問題請不要搗亂。

而且我沒有推匯出跟語言『有關』,我在詢問『是否有關』。
A、B、C 使用了同一種技術,有同樣的癥狀,難道不能懷疑這種技術 普遍/很可能 存在這樣的癥狀嗎?
為什麼當年 twitter 從 ruby 遷移到了 java ?

回複內容:

再補一刀吧,之前沒看到。
雖然我用豆瓣從沒碰到過 502
但是,如果你真的碰到了,而且確信這個 502 來自豆瓣的前端 HTTP 伺服器
那麼這是 唯一一個 可能和後面 Python 有關的現象。

------------

一個網站是不是卡頓,可能的情況太多,隨之帶來的細節表現不同都是可以值得分析的問題。
  • 線路
  • DNS
  • CDN / 檔案服務
  • 靜態資源
  • 動態資源
  • 緩衝同步
線路
國內出名的南北分裂、電聯分裂。雖然這些年很少再聽到集中討論這個問題,但真碰到誰家沒做好雙線機房設定也只能自認倒黴是不?去 ping 一下網站網域名稱,看看 ping 的延遲,如果異乎尋常的大(比如數百毫秒到 1 秒以上,多半是這裡的問題)。

DNS
其實和線路一樣相關。好的 DNS(e-DNS 擴充)會根據使用者當前位置,為使用者指派合適的伺服器。當然如果不支援 e-DNS 是沒辦法的,伺服器只有一個 IP 也沒什麼可以做的。

CDN / 檔案服務
CDN 是將一時不會改變的靜態內容發放給使用者的最重要渠道。檔案服務(Amazon S3 等)通常與 CDN 做類似的事情 / 與 CDN 搭配使用。CDN 通過動態緩衝靜態檔案到所謂的 edge server - 通常是位於靠近 ISP 接入的機房,使使用者訪問這些資源的路徑更短、延遲更低。同時因為 CDN 的巨大主機數量,正確使用也可以降低網站本身伺服器壓力。知乎的圖片來自 http://p4.zhimg.com 等一系列網域名稱,這些網域名稱實際上是重新導向到雲端儲存 / CDN 的主機去,譬如知乎:
$ nslookup p3.zhimg.comServer:192.168.1.1Address:192.168.1.1#53Non-authoritative answer:p3.zhimg.comcanonical name = d.qiniudn.com.d.qiniudn.comcanonical name = wsall.36tr.com.wscdns.com.wsall.36tr.com.wscdns.comcanonical name = 08911.xdwscache.glb0.lxdns.com.Name:08911.xdwscache.glb0.lxdns.comAddress: 122.228.218.146
1、簡短回答:
不是Python導致的,我這裡豆瓣非常快,但知乎好像真的有點卡頓的現象(也有可能看到問題之後才腦補意識到的.......).

2、為什麼不是Python導致的
或者說,任何一個網站很卡,都不大應該說是其後端的某個語言導致的(雖然寫的很爛確實會導致卡頓,但知乎之類的肯定不是這個原因),對於知乎這類訪問量很大,同時又大量常值內容的網站,會大量使用Cache,也就是說直接從記憶體取資料不再頻繁訪問資料庫,從這個層面基本各個語言都不會差太多,甚至HTML頁面也都是cache出來的.

3、是什麼導致了卡頓
很有可能是大量的Ajax請求導致的,我注意到滑鼠移動到人名、話題上的時候都會觸發3個新的Ajax請求,新進入一個頁面大約有30~40個HTTP請求發出去,雖然資料量不大,但如果瀏覽器效能較差或者系統分配給瀏覽器的記憶體不足,頻繁的調用Ajax可能就會需要等待其他地方釋放一點記憶體。

我沒有仔細看,但似乎有些知乎的頁面是整個HTML頁面都是Ajax非同步渲染的,由於dom樹的構造也很耗費效能,所以如果機器過老,或者網路太差都會出現這個問題.

4、如何解決
其實我並沒有特別留意到樓主說的卡頓現象,解決方案可能就是升級機器吧......對於知乎來說,可能需要考慮部分網路不好的使用者,盡量少的發送HTTP請求,一個頁面30多個請求我感覺還是蠻多的.

或者學習Quora進行消極式載入(直觀的猜測),就是不要進入頁面的時候把Ajax請求一口氣全發出去,而是先等使用者進入頁面(比如8個請求的時候),然後頁面基本資料渲染完畢後再 依次發送其他Ajax請求。終於明白為什麼上不了YouTube了我還想補充一下,php也是垃圾啊,facebook那麼大的網站,用php做的,根本上不去嘛。知乎一直時好時壞,有時翻牆才能上。和Python無關吧,也許是被攻擊了呢。武功差不要怪手上的兵器,
網站慢不要怪所用的語言。我感覺google也做的挺爛的,以前偶爾能上去,現在完全上不去了。"屙屎不出賴地硬"怪毛線語言,都是習慣問題。首先,說Python慢,這是和編譯語言比,比如與C,C++,Java比,在動態語言中,它並不慢,它比Ruby要快,它和Perl效能相當。如果選擇動態語言的話,Python並不是很慢。另一方面,如果做網站開發,語言的不是速度的瓶頸,比如現在用Python寫的程式全部用C寫,程式當然會快一點,但是改變不是很大。Web網站一般會有很多對IO的操作,比如對資料庫的訪問,對硬碟的訪問響應使用者的請求,80%,90%你的時間都花在IO上,語言的速度,相對而言,不是那麼重要。也可以這樣說,網站的效能主要取決於架構設計的是否合理。因為網站需要響應大量的並發的請求,如果你的設計的不好,即使你用C寫的,也可能無法應付。所以更多的考慮是在架構設計上,要使架構體系不會產生速度瓶頸。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.