最近一直在學習linux網絡編程這一塊的內容,自己做了一個簡單web服務器,以前無法確切的瞭解web瀏覽器訪問網頁的的請求過程。現在有着樣的條件了,所以就自己實現一下看看過程了。
瀏覽器展示一個網頁的過程:(不涉及本地緩存,假設本地沒有緩存)
-
瀏覽器向服務發送請求,請求一個頁面。
-
服務器響應請求,向瀏覽器發送頁面。
-
瀏覽器加載頁面,如果有外部文件,轉向4步,沒有結束
-
瀏覽器依次生成進程,分別請求所需文件。
-
服務器響應請求,向瀏覽器發送外部文件。
-
瀏覽器加載外部文件。
下面是我測試得到的結果的截圖。(此網頁中有外部的css、js、圖片)
瀏覽器結果(本代碼和結論只經過本人的簡單測試,可能存在問題。請相信自己的能力,敢於質疑。歡迎提供更好的、更快、更簡潔的代碼或者方法和指出錯誤。在ubuntu12.04使用gcc4.6.3版本編譯,在vc中如出現錯誤,請諒解。)
請求網頁的效果圖:
得到瀏覽器請求的結果:
看完測試結果後,大家發現瀏覽器先請求了頁面,依次請求了外部文件所需要的文件。由於我寫的是單線程的服務端,大家可能會看到瀏覽器發送請求的文件的順序,如果你看了網頁的源代碼,你會發現web瀏覽器請求的順序正好是網頁中的書寫順序。我可以將想要優先顯示的內容書寫到代碼考前的部位。
通過以上信息對於web開發者的建議:
-
將內容少的js和css直接嵌入網頁中,從而減少瀏覽器的對web服務器的請求次數。減少web服務器的負擔。
-
減少外部文件,將可以合併的文件放到一個文件中,從而減少瀏覽器的對web服務器的請求次數。減少web服務器的負擔。(可以選擇在發佈時合併文件,便於開發。通常是css和js文件)
- 見多個小圖表合併到一起,統一請求文件。
-
將優先顯示的外部文件代碼書寫到前面。將不重要的文件放到最好請求。
- 同一個外部文件網頁只會請求一次。
如果針對本頁面來說,js爲空,css內容也很少,如果直接嵌入網頁頁面中,將會只有兩次web瀏覽器請求的。
代碼和測試主頁、makefile等文件:測試文件按文件地址
blog:http://blog.csdn.net/rentiansheng/article/details/8274489