Angular項目的首頁打開速度很慢,有時候會有幾秒的加載時間。如果在手機端訪問的話,怕是要等待十多秒,這對用戶體驗很差。下面參考http://www.cnblogs.com/feiyu159/p/8473790.html 介紹一下我自己的Angular優化之旅。
一、靜態圖片加載:
項目中存在很多圖片資源,有的圖片資源很大。如果和項目放在一起的話,項目啟動時既要加載項目的html,css等靜態文件,對服務器的響應互有影響。考慮把圖片單獨存放,並使用nginx做映射。當請求頁面的圖片時,css和圖片就從兩個地方加載出來。這個好像大多數大型的網站都有,譬如百度官網地址:https://www.baidu.com,如果查看項目的源代碼就會發現,百度首頁的圖片時放在baidu.com下邊的一個子域名的文件夾下。那就暫且嘗試這樣實現一下好了。
1)創建圖片資源的服務器。
2)配置nginx
#圖片服務器 // 這是一個單獨的Server server { listen 80; server_name “域名或IP”; location / { root D:/project/images; // 服務器上圖片資源存放的位置 autoindex on; } }
3)設置nginx的壓縮
// 這個一般在nginx.conf中進行配置, gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary off; gzip_disable "MSIE [1-6]\."
二、Angular懶加載路由
懶加載,也就是按需加載。頁面啟動的時候,並不是將全部的component全部加載進來,否則初始化啟動會以為加載太多文件,網站訪問會超級慢。只有當訪問該模塊的時候才去加載,否則不加載。如下:
如上圖,只有訪問登錄(Login)模塊的時候,項目才會去加載Login模塊的component。
該項目可以參考我的一個關於angular4快速啟動項目,github地址:https://github.com/JinGangRed/angular-my-quickly-start
三、與微信網頁授權相關
微信網頁授權過程中,需要為微信提供一個redirectURL。在angular項目中的這個地方就會有個分歧,這個redirect_url是放當前頁面的地址(login)呢,還是登錄后的跳轉的地址?
其實我們可以采用后一種方式,直接賦值redirect_url為登錄后跳轉的地址。
具體實現思路是這樣的:
1.訪問某個頁面(sell.component),添加一個路由守衛canActivate: [AuthloadService] (請忽略這個名字的含義,因為這個AuthLoad會和路由守衛的是否加載子模塊的AuthLoad產生混淆,你可以認為他是一個判斷是否激活該組件的攔截器)在AuthLoadService中,
// 如果是微信跳轉請求該組件,會攜帶上code信息,這個時候獲取code,然后將這個code返回給后台,讓后台根據這個code,去獲取AccessToken和OpenId的信息 const code = route.queryParamMap.get('code'); if (code) { alert('存在code ' + code); this.auth.getAccessTokenByWechat(code); this.auth.isLoggedIn = true; } return this.checkLogin(state.url);
2.在該路由守衛中,canActivate中 如果沒有訪問憑據的話,則設置NavigationExtras,配置參數targetURL,然后跳轉到登錄頁面。
3.在登錄頁面上,設置網頁授權連接上的redirect_url地址為上一步驟配置的targetURL(這一步我已經實現)。
4.其實第三步,是否真的需要?應該可以不需要登錄頁面這個組件,直接在第二個步驟中設置redirect_url為當前地址不就可以了嗎?這個我還沒實現,不敢妄下結論,待后期更新。
大家有什么關於angular項目優化的好方法,請不吝賜教
非常感謝:http://www.cnblogs.com/feiyu159/p/8473790.html 受益頗深