天天看點

搜狗浏覽器,上網究竟能多快

李子拓:今天很高興能有機會跟大家一起探讨,怎麼在用戶端上我們的軟體做的更快。因為我是頭一次來談到這個CSDN這個活動,我做個調查。咱們在座的各位朋友裡面,有多少人親自在Windows或者其他平台做用戶端開發的。

看一個圖,大家看到這個圖,能想到什麼?浏覽器是肯定的。這兩個浏覽器,應該是比較高端的使用者才會用。但是,其實所謂的高端使用者,看到他有什麼特點,或者有什麼反映,那麼其實我們也做過一些調查。其實大家看到這個東西以後,很簡單,一個快,一個慢。就是這種結果,我們比如搞專業的人聽起來可能鄙視一番,但是他确實代表着一些問題。是以我們今×××狗浏覽器也是從這兒開始。

其實我們很多使用者在看浏覽器,或者其他用戶端産品快慢的時候,包括使用者調查,大家都隻得到一個很模糊的概念?具體什麼是快?什麼是慢剛才也講了。我随便列幾條,比如啟動時候,初次之後,我建一個标簽多長時間。IE8大家體會到,我建立一個标簽非常慢。比如說網站下載下傳資源用多長時間,甚至還有一些比較厲害的使用者,說你這個浏覽器退出用多長時間,也是一個問題。是以也是用戶端軟體快慢所探讨的範疇。我講之前,簡單的從我個人的角度定義一下用戶端産品什麼叫快和慢?

我們使用者每次電擊滑鼠或者按鍵盤有一個預期的行為。如果輕按兩下圖表以後,3分鐘一點動靜都沒有,大家需要幹什麼?看有沒有起來。對于普通使用者,他會再去放一些,我是不是剛才滑鼠點錯了,沒點上。這種情況下,一般來說,我們需要給他一個中間的結果。那麼,但是用VC的應該知道,點他以後,VC會出現一個條,就是在軟體裡面比較重要的一個地方。

我今天可能也是做廣告,就是介紹一下我們搜狗浏覽器團隊,然後在做搜狗浏覽器裡面的一些經驗。搜狐浏覽器,相比國内老牌的浏覽器來說,是太年輕的一個角色。像遨遊做了好幾年,搜狗是3年前才開始做,其實到今年年底是他的3周歲的生日。但是,大家可以關注搜狐浏覽器,在短短三年時間内,能上升到國内浏覽器排名的第三名,他一定是有使用者認可的一方面。

在浏覽器2.2版本,我們有一個圖,這個圖檔有點老,我們有一個五級加速。我們先簡單看一下浏覽器使用者怎麼操作。比如我去敲一個網址,通路網址以後,這個頁加載完了以後,得到我所要的資訊。在這個過程裡面有很多步驟,要做很的複雜的工作。是以我們簡單的歸納為一個網絡請求。還有一個就是你抓完東西回來以後,你要把伺服器的HTML源碼展示,看看中間有多少相交的區域。他不用等到你所有的資源下來以後才展示,我們把使用者第一次看見頁面頂上的那些定義一下。

我們先講網速,因為網速是根本。大家在上網的時候,肯定我先通路一個網址,然後這個網址去搜狐新浪發東西,然後這個頁面加載完成了。我不知道在座的有多少在教育網上過,他裡面非常快,教育網的幹線也很牛,但是他到公網不通,各種原因,可能是政治上,一些利益上的問題。總之,你的教育網去通路一些公網速度非常慢。當時搜狗在1.0的時候也是試圖解決這些事情。我們當時很簡單,就是架一個代理。其實這個東西,大家一拍腦袋都能想到,就是錢的問題,有錢把伺服器都架起來了。

其實外面的一些業界或者使用者可能都看不到,但是裡面很複雜。不是說我們使用者教育網的百分之百都是公網,就需要有一個名單濾一下,我們就有本地的一個政策,這個政策用來把這個教育網的這個類似于名單的東西過濾一下。隻有在你通路的網站,跟你不熟,紊亂的時候找這個伺服器。具體的技術細節,我就簡單說了,基本上就是去用戶端連接配接不同網端的伺服器,這時候,你數量哪一個網端,伺服器知道的一清二楚。等到使用者真正想通路一個真正的站點的時候,決定你是不是要加速。這套思路,我覺得用在用戶端的時候針對不同的網端在本地做一些政策,這也是我個人的一些猜測,具體還要看大家真正做軟體時候的需求。

網速這一塊,還有一種情景,就是說,大家經常用迅雷下載下傳,在下東西的時候,大家會不會覺得上網比較慢?應該有一些使用者會遇到,比如我開迅雷下東西,确實挺快,這時候我上網,一點都打不開,迅雷不想停怎麼辦?為了解決這個問題,我們可以說,我們去連目标網站的時候,我們先去借網速,相當于你暫時把他停掉,這個時候對使用者是透明的,他看不到。然後等到通路頁面完成以後,再把這個網速還回來,這個其實就是一個叫網速保護的概念。這個概念,現在像迅雷,360他們都有,原來也是比較簡單。就是通過一個驅動來控制系統底層的網速,等到有請求的時候,去通知其他的軟體讓一下,大家覺得浏覽器削弱了,比較可怕,但是這個其實對使用者還是有很大作用。

然後就是下載下傳,下載下傳是上網比較重要的一個操作,這裡不多講了,就是我們用P2P的下載下傳,這個東西到不是搜狗的專利,因為迅雷在這方面确實做的更好。但是,迅雷剛才講了,就是啟動慢,是以有些使用者不太願意用。覺得我開的時間還不夠下,是以搜狗提出一個搜狗高速下載下傳。我們接下來探讨一下用戶端共有的這麼一個問題,就是我們也談這個渲染跟繪圖。他其實目的就是把這個從網上下載下傳的描述語言,包括各種腳本把他轉變成排版,這裡面其實嚴格意義上講分好多階段。我們這裡面把他當成一個來看。

對于傳統的浏覽器,大家用IE可能是最多的,資料也擺在這兒,IE有什麼問題?其實用的也很好。但是,在他IE自己,隻有他自己,大家覺得也就這樣用了,但是當一些競争對手出來以後,大家覺得IE很慢,不是網速的問題,就是我們都下來了,然後你也慢,這就是他核心實作的問題。那麼,我們浏覽器又加了一個核,加了一個VIP的核,他是業界公認的更快的浏覽器的核。這裡面提一句,大家在寫用戶端軟體的時候,會不會在裡面嵌一些内容。最近新浪微網誌的用戶端也是用了一個IE核,應該是大家可能會用到這些。當你發現IE核在你做需求的時候比較痛苦,你可以換一個别的。痛苦具體是哪些方面,慢是一方面,還有一個就是準不統一。如果5、6個不同的标準寫這個Java腳本,你也是一個很痛苦的地方,核不在自己手裡的問題。在這種情況下,你可以考慮帶一個UIK的核。你不用去給IE擦這種屁股,是一個比較值得推薦的做法。大家在做用戶端開發的時候,可以有限考慮一下這個。這也是在消滅IE6的道路上做一些貢獻。

另外一個就是說,為什麼搜狗沒有抛棄IE核,就是解決相容性問題。然後我提一下搜狗的防假死,這個概念我很奇怪,自從我上高中的時候用遨遊就發現一個問題,一個頁面運作的非常慢,或者他已經死了,點什麼都沒有用了,他雖然會很人性化的列出來,但是還是很不爽。我就想,為什麼沒有一個機制說,一個網站挂了,别的可以看。後來,當我們團隊做的時候也發現了,這确實是一個很難的技術問題。因為在座的都是Windows開發,很多人知道這個Windows的結構。可以做一個實驗,我們比如說建一個框,我們裡面可以通一個子視窗。你如果嘗試停掉另外一個程序,把程序給死循環,外面的視窗也跟着一塊挂了。這個确實也表明了微軟他這個視窗系統裡面的一個問題,就是他的視窗表面上看起來,你可以了解為他是互相獨立的,但是其實不是,他裡面有很多内部消息,有一個叫活動的方式,我也不是很明白,他為什麼設計。但是,确實引入一個問題,對于多标簽多頁面的這種會帶來這種問題。

就是我在通路一個網址的時候,其實他是通過一個互相關聯的一個循環,我再來一個網址,發現他還是卡在這個地方,這也是使用者抱的一個問題。是以大家可以看到,現在大家對老牌浏覽器意見比較大。比如說我這個網址死掉了,我再通路一個網址不知道通路什麼,最慘的可能我連通路一個網址的機會都沒有。後來我們找到一個算是不是很完美的解決方法,就是用一個獨立的消息循環。這個是怎麼做呢?就是比如說,舉個例子,這是一個大視窗,裡面的子視窗,你看起來是一個字視窗,但是其實不是一個字視窗,是兩個頂視窗疊在一起,就脫離了父子視窗的關系。這樣的話,大家也可以想,開發起來确實難度比較大,這個也是一個優勢。現在應該是國内隻有360合搜狗有這個防假死,目前其他的還沒有,從體驗效果和回報來說,這個東西使用者還是比較滿意的。當然估計用不上這個東西,但是你如果發現有些東西不可控,你的程式裡面有一個第三方的視窗,或者引用别人的庫和邏輯。

對于防假死來說,可能還有别的一些要點,就是IO操作也是一個比較重要的東西,這個和啟動關系比較緊。其實和你平常的運作關系非常緊密,比如你的界面跑在一個固定的地方。還有一個就是說,騰出CPU優先處理目前标簽,使用者可能一受抖,開了幾十個标簽,但是目前可能最多隻能看到一個,這種情況下,如果他不能優先的處理,他也會抱怨,會說你這個東西不順暢。我們的優化就是說,在使用者開了很多标簽,但是隻展現一個的情況下,後面的都停掉,讓他優先關注前面的這個表現。