『壹』 如何有效提升WebView的載入速度
在做混合應用的時候,有幾個痛點,一個是無網路無法使用,還有一個是受網路環境影響的網頁載入速度。今天就這兩個問題,和大家交流一下自己的經驗。
離線緩存
這個比較容易,開啟webView的緩存功能就可以了。
WebSettings settings = webView.getSettings();
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);//開啟DOM緩存,關閉的話H5自身的一些操作是無效的settings.setCacheMode(WebSettings.LOAD_DEFAULT);
這邊我們通過setCacheMode方法來設置WebView的緩存策略,WebSettings.LOAD_DEFAULT是默認的緩存策略,它在緩存可獲取並且沒有過期的情況下載入緩存,否則通過網路獲取資源。這樣的話可以減少頁面的網路請求次數,那我們如何在離線的情況下也能打開頁面呢,這里我們在載入頁面的時候可以通過判斷網路狀態,在無網路的情況下更改webview的緩存策略。
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();if(info.isAvailable())
{
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
}else {
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//不使用網路,只載入緩存}
這樣我們就可以使我們的混合應用在沒有網路的情況下也能使用一部分的功能,不至於什麼都顯示不了了,當然如果我們將緩存做的更好一些,在網路好的時候,比如說在WIFI狀態下,去後台載入一些網頁緩存起來,這樣處理的話,即使在無網路情況下第一次打開某些頁面的時候,也能將該頁面顯示出來。
當然緩存資源後隨之會帶來一個問題,那就是資源無法及時更新,WebSettings.LOAD_DEFAULT中的頁面中的緩存版本好像不是很起作用,所以我們這邊可能需要自己做一個緩存版本控制。這個緩存版本控制可以放在APP版本更新中。
if (upgrade.cacheControl > cacheControl)
{
webView.clearCache(true);//刪除DOM緩存
VersionUtils.clearCache(mContext.getCacheDir());//刪除APP緩存
try
{
mContext.deleteDatabase("webview.db");//刪除資料庫緩存
mContext.deleteDatabase("webviewCache.db");
} catch (Exception e)
{
}
}
預載入
有時候一個頁面資源比較多,圖片,CSS,js比較多,還引用了JQuery這種龐然巨獸,從載入到頁面渲染完成需要比較長的時間,有一個解決方案是將這些資源打包進APK裡面,然後當頁面載入這些資源的時候讓它從本地獲取,這樣可以提升載入速度也能減少伺服器壓力。重寫WebClient類中的shouldInterceptRequest方法,再將這個類設置給WebView。
webView.setWebViewClient(new WebViewClient()
{ @Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
{ if (url.contains("[tag]"))
{
String localPath = url.replaceFirst("^http.*[tag]\\]", ""); try
{
InputStream is = getApplicationContext().getAssets().open(localPath);
Log.d(TAG, "shouldInterceptRequest: localPath " + localPath);
String mimeType = "text/javascript"; if (localPath.endsWith("css"))
{
mimeType = "text/css";
} return new WebResourceResponse(mimeType, "UTF-8", is);
} catch (Exception e)
{
e.printStackTrace(); return null;
}
} else
{ return null;
}
}
});
這里我們隊頁面中帶有特殊標記的請求進行過濾替換,也就是上面代碼中的[tag],這個可以跟做後台開發的同事約定好來就行了。對圖片資源或者其他資源進行替換也是可以的。補充一個小點可以通過settings.setLoadsImagesAutomatically(true);來設置在頁面裝載完成之後再去載入圖片。
H5優化
Android的OnPageFinished事件會在Javascript腳本執行完成之後才會觸發。如果在頁面中使 用JQuery,會在處理完DOM對象,執行完$(document).ready(function() {});事件自會後才會渲染並顯示頁面。而同樣的頁面在iPhone上卻是載入相當的快,因為iPhone是顯示完頁面才會觸發腳本的執行。所以我們這邊的解決方案延遲JS腳本的載入,這個方面的問題是需要Web前端工程師幫忙優化的,網上應該有比較多LazyLoad插件,這里放一個比較老的鏈接Painless JavaScript lazy loading with LazyLoad,同樣也放上一小段前端代碼,僅供參考。
<script src="/css/j/lazyload-min.js" type="text/javascript"></script><script type="text/javascript" charset="utf-8">
loadComplete() { //instead of document.read();
}
function loadscript() {
LazyLoad.loadOnce([ '/css/j/jquery-1.6.2.min.js', '/css/j/flow/jquery.flow.1.1.min.js', '/css/j/min.js?v=2011100852'
], loadComplete);
}
setTimeout(loadscript,10);</script>
『貳』 怎麼使用Web加速器
web加速一般是對WEB進行內容的過濾,這種的話你開著就行了.另一種是P2P加速,那就和你下載東西一樣,一個網頁可能你沒有,但你可以搜索到其他人是不是打開過,這樣你就不必從伺服器上下載,而是從別人那兒得到.這一種的話看看你電腦用的IP是不是內網IP,如是你記得把UPNP打開就行.
『叄』 WEB請求處理之瀏覽器響應
當我們使用瀏覽器進行瀏覽操作的時候,會產生一系列的數據請求。現在瀏覽器和伺服器之間的數據交互是基於B/S架構的,而這種架構是建立在HTTP請求的基礎上的,當我們在瀏覽器的地址欄中輸入一個網頁的地址後,會觸發一些列事件,如下圖所示:
以上就是我們訪問網頁時會觸發的一系列事件,也是web請求處理的基本流程,接下來對幾個概念詳細介紹.
TCP協議是OSI七層協議中傳輸層的一項協議,它是一種面向連接的可靠交付的數據傳輸協議,和UDP用戶數據報協議不同的是,它需要建立連接,並且需要無差錯和可靠地交付數據。通過TCP建立連接,需要經過三次握手,關閉TCP連接需要四次揮手。
OSI七層模型中TCP處於的層級位置如圖所示
TCP建立連接是為了可靠地傳輸數據,因此建立過程比較復雜,以確保可靠地傳輸數據。具體流程如下圖所示:
TCP四次揮手
當數據傳輸成功後需要關閉連接,這就是TCP四次揮手。四次揮手比握手還要復雜,具體流程如下圖所示:
在這個過程中,為什麼會涉及到四次揮手呢,這是因為在客戶端發送主動關閉連接請求時,伺服器端收到關閉請求並返回確認收到請求報文,但是伺服器不會立即關閉,因為在這個時間段內可能還會有數據傳送,伺服器端會繼續傳送數據給客戶端,當沒有數據傳送時,伺服器端會主動發送報文給客戶端請求關閉,等待客戶端返回確認時伺服器端就進入了close狀態。
從上面的OSI七層模型中我們可以看到HTTP處於七層協議中的應用層,也就是最接近用戶的一層。它主要是處理WEB數據請求,它是無狀態無連接的協議。無狀態是指上一次傳送的數據是沒有存儲下來的,下一次操作獲取不到上次的數據。無連接是指需要請求數據時才會建立連接,否則處於無連接狀態。在WtEB請求處理過程中,我們主要是關心HTTP請求頭和響應頭還有就是狀態碼.
下面是使用FIDDLER抓包工具抓取的請求包
CONNECT www..com:443 HTTP/1.1
Host: www..com:443
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36
人們習慣記憶域名,但機器間互相只認IP地址,域名與IP地址之間是多對多的關系,一個ip地址不一定只對應一個域名,且一個域名可以對應多個ip地址,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析伺服器來完成,整個過程是自動進行的。
由於DNS域名解析有些復雜,本文章就不就過多的講解。
總結:以上就是web請求處理中瀏覽器響應的相關知識,由於涉及到的 知識太多因此沒喲很詳細的將解,只將解了部分的重要內容,待到以後學習加深,進一步完善。
『肆』 如何優化web伺服器的訪問速度
網站運營的任何時期,網站訪問速度都是至關重要的部分,它是網站友好體驗中最基本的一項,如果訪問體驗都令人不滿意,那麼後期所做的營銷推廣模式都有可能徒勞無功,因為網路中客戶的選擇成本很低,加上普遍客戶的耐心都不高,頁面訪問超過6秒客戶就會選擇離開,這對於一些流量本來就不高的企業網站來說無疑是雪上加霜。
一、升級正在使用中的伺服器
進行伺服器升級工作之前,要考慮多方面的問題,是升級已有的伺服器還是購置新的伺服器設備須根據實際情況抉擇。首先來說升級現有的伺服器設備,一般來說網站運營到後期隨著業務不斷增加,多平台應用的開發對於伺服器性能的要求也逐步提升,長而久之伺服器遇到性能瓶頸也是情理之中的事情,對於這種情況,我們可以通過升級伺服器(例如增加硬體設備或網路帶寬)等相關配置來滿足不斷擴大的業務需求,那麼伺服器性能瓶頸問題就可以得到解決。
二、優化正在使用的伺服器
不管是完成升級後的伺服器,還是新購置的伺服器,我們都要對其進行優化,從而提升伺服器的性能以及利用率。如何優化伺服器?作為在國互網工作到現在的資深IDC工作人員,小編認為大概分為以下四個方面
要點一:盡可能的減少HTTP請求數
從客戶訪問網站頁面到整個頁面內容完全展現出來,這其中要花費較多的時間來下載各種Scripts、CSS樣式表、Flash以及圖片,而每一類下載都相當於一次HTTP請求,這樣的請求越多網站被完全載入出來所花的時間會越長,意味著客戶端的訪問會很慢,那麼此時就需要盡可能的減少HTTP請求數,通常我們可以直接把css和js寫入到頁面中,避免了外部的調用;或者我們可以把CSS文件和JS文件分來,在後台再進行合並,這樣客戶端瀏覽器相當於一次請求。這是小編在國互網美女前端那學來的。
要點二:降低DNS查詢時間
眾所周知網路伺服器端的域名和IP地址是相互對應的,當客戶端發出請求時,計算機還需要通過域名和IP地址的相互轉換來判斷,而這個轉換工作便是域名解析DNS,通常DNS的查詢需要10~20毫秒時間,客戶端瀏覽器也只會等待DNS查詢結束之後才會載入此域名下的內容。因此,我們要加快頁面的訪問速度,就可以從降低DNS查詢時間方面去做改善。
要點三:啟用伺服器Gzip壓縮功能
對於大中型網站來說,頁面的內容多且比較多樣化,單個頁面的大小可能是幾百K以上了,客戶端訪問的時候下載會比較慢,此時我們可以採用伺服器Gzip頁面壓縮功能,可以將一個大小為100K的頁面文件壓縮成25K以下,這樣就可以減少網路傳輸的數量從而提高客戶端訪問速度。一般伺服器都是可以使用Gzip壓縮功能的,並且能夠針對JS文件、CSS文件和Html進行壓縮,多方面去進行優化網站訪問速度。
要點四:推薦大中型網站使用CDN加速工具
CDN加速是目前大型網站普遍使用的頁面加速方式,它對於網站優化幾乎沒有影響的,基本原理是將網站鏡像備份到很多伺服器節點上,使伺服器節點周圍的用戶訪問速度更快,從而提升客戶端高速訪問網站的體驗;但是並不是所有的網站都適合使用CDN加速,一般對於小規模站點個人站的話,就不需要使用CDN加速,畢竟從長期來看這可是一筆不小的開支;建議圖片站以及多媒體站點可使用CDN加速。
希望以上知識能夠幫到您
『伍』 什麼是Web加速器
騰訊Web加速器的加速原理是,通過P2P的方式,在訪問同一網頁的用戶之間傳輸數據,從而達到加速作用.對於伺服器壓力大的網站,或不同運營商的網站,有很好的加速效果.
作用和原理都與BT一樣
也有人說:
問題一:系統資源佔用多。問題二:其它非 IE 瀏覽器要加速,設置麻煩。問題三:卸載後,IE 無法正常使用?問題四:安裝後佔用近百MB。
所以慎重使用。