一個代碼濫用的例子

原文地址:Code Abuse

吉姆的一個客戶的WordPress網站遇到了嚴重的性能問題,甚至比一隻安靜的蝸牛還要慢,比一羣海龜通過糖蜜工廠時橫衝直撞還要慢。更糟糕的是,該網站在瀏覽器裏的實際渲染速度要比一些讓人比較信服的基準測試的速度慢的多得多。甚至有大量加載的基準測試都會有一個更短的渲染時間。而客戶的瀏覽器並沒有大量的東西要加載。

在研究了多種途徑後,吉姆決定將網站遷移到新的,更快的基礎設施上。老舊的機器總是要更新換代的。新的設備會運行在運行更精準的Ubuntu操作系統上,而老的系統是Lucid。那麼,作爲獎勵,客戶獲得了一次免費升級!就像免費的啤酒。

在新的設備上使用wget來安裝緩存系統,吉姆遇到一個segfault錯誤。啊?從wget來的segfault錯誤?爲什麼一個真的真的很老,並且穩定的CLI設備在讀取一個網站的時候會拋出一個段錯誤?要查找是什麼問題,日誌似乎是一個符合常規邏輯的正確的查找的地方。果然,一個奇怪的日誌條目被發現。

GET /[redacted]/[redacted]/%E2%80%9Dhttp:/ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js%E2%80%9D HTTP/1.1 404

非常奇怪!因爲,就吉姆目前所知,代碼裏應該沒有這樣的引用。因此,他開始查找源代碼,但是並沒有發現這樣的對Google API的引用。接下來,他轉儲數據庫並查找上下文。但是仍然找不到這個Google API的鏈接。但是他確實注意到在各種插件,主題和模板片段裏有對7個不同版本的jQuery的引用。所以搜索改爲專門查找特定的包含jQuery1.5版本的引用。

結果是這裏只有一個引用,在頭文件裏。而且它看起來很正常。

<script src=”http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js”></script>

作爲調試技巧,盯着一行代碼看可不是傳統的教學裏教過的。然而,在這種情形下,它是有效的。仔細觀察我們會發現,script標籤的src屬性是被雙引號引住。

並且,作爲被“聰明的”引號引的結果是,所有的現代瀏覽器(幸運的是,包括wget),會嘗試從以下 網址來獲取代碼:

http://[currentURL]/%E2%80%9Dhttp:/ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js%E2%80%9D

現在看來,在大多數情況下,這真的是很惱人的。但是吉姆的客戶的網站,使用了傳統的重定向來解析遇到的鏈接。結果是,它並不是一個快的,簡單地HTTP404結果被返回回來。他是一個完整的,完全沒有被緩存的頁面渲染,最終才導致404.因爲請求繞過了代理層,頁面以及對象的緩存,因此對每一個單獨的請求都增加了800--4000ms的時長。是的,對每一個,單獨的,請求。

也許你能夠想到極大的提高整個網站的速度的解決方案。

當我們很多人去尋找最近的我們正在努力解決的問題的解決方案的時候,我們最首要的,最終的並且是唯一的資源通常的是互聯網。當我們發現這個難以捉摸的例子,我們真正能夠去做的卻是,剪切、粘貼與盲目的放棄。重點在“盲目”上。是的,時代的集體智慧在網上是能獲取到的,也很容易被我們掌握。但是們沒有理解就去使用這些智慧是很危險的。即使是'理解'也包含更多特定的涵義。

發佈了45 篇原創文章 · 獲贊 10 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章