當前位置:
首頁 > 知識 > Ionic進行PC端Web開發時通過腳本壓縮提高第一次載入效率

Ionic進行PC端Web開發時通過腳本壓縮提高第一次載入效率


注意,本文中的描述僅適用於基於Ionic進行PC端的Web開發,如果是手機端的開發,可以嘗試僅使用UglifyJS2進行壓縮,是否會有提高請自行驗證,至少文件小了載入速度會快。^_^

1. 問題

1.1. 問題上下文描述:

  1. 基於Ionic進行PC端的Web應用開發;
  2. 使用Tomcat作為最終服務發布容器。

1.2. 問題描述:

編譯後main.js的大小為4-6MByte。(集成第三方控制項前4M左右,集成後6M左右),導致第一次載入時速度較慢。


2.解決方案

經過分析,main.js有很大的壓縮空間:

  • 首先,其沒有進行代碼級別的研發,可以通過UglifyJS2進行代碼級別的壓縮;
  • 其次,可以利用瀏覽器的特性,進行gzip壓縮。
    經驗證原本6MByte左右的文件,壓縮後成了500KByte左右,極大提高了載入效率。

3. 具體操作

3.1. 安裝並使用UglifyJS2進行代碼級別的壓縮:3.1.1. 安裝UglifyJS2

首先保證已經安裝了nodejsnpm

npm install uglify-js -g

3.1.2. 代碼級壓縮

uglifyjs main.js -o main.min.js

通過上面的壓縮命令,生成的main.min.js大約是原來的一半3MByte左右。

3.2. 使用gzip進一步壓縮

首先到gzip官網下載對應命令行的安裝包。

解壓後,可以在環境變數中進行配置,方便後續操作。

然後通過如下命令進行gzip壓縮:

gzip -9 -S gz main.min.js

壓縮後會生成一個名為main.min.jsgz的文件,好了可以看到這個文件只有500KByte左右,我這裡是577KByte。

壓縮後,就是使用了,基於Tomcat我們增加過濾器,對訪問main.js的請求都轉發給main.min.jsgz

3.3. 增加過濾器進行請求轉發

本部分基於Servlet3.0以上支持的註解方式增加:

package com.telchina.workmanage.common.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet Filter implementation class JSRequestFilter
*/
@WebFilter(filterName="JSRequestFilter",urlPatterns={"/build/main.js"})
public class JSRequestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(request instanceof HttpServletRequest){
this.doFilter((HttpServletRequest)request, (HttpServletResponse)response, chain);
}
else{
chain.doFilter(request, response);
}
}
public void doFilter(HttpServletRequest request, HttpServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(request.getRequestURI.endsWith("main.js")){
response.addHeader("Content-Encoding", "gzip");
request.getRequestDispatcher("/build/main.min.jsgz")
.forward(request, response);
}
else{
chain.doFilter(request, response);
}
}
@Override
public void destroy {
}
}

OK了,感受一把修改後飛一般的速度吧。O(∩_∩)O~~

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

TCP:三次握手、四次握手、backlog及其他
Django初探——工程創建以及models資料庫相關配置
js 給文本框增加快捷鍵

TAG:科技優家 |

您可能感興趣

如何使用Facebook開發的這種快速數據壓縮演算法Zstd
一行代碼自動調參,支持模型壓縮指定大小,Facebook升級FastText
用TensorFlow 實現基於 GAN 的極限圖像壓縮框架
Android studio 3.3大幅提升代碼壓縮速度
JPEG推新VR/AR視覺無損壓縮標準,Nyko促銷PlayStation VR配件
Facebook 的 zstd 壓縮演算法將 Ubuntu 安裝速度提高 10%
歐洲原產Compressport R2小腿套壓縮綁腿 CS壓縮腿套 Calf R2跑步必備
日本C3fit Inspiration女款戶外運動跑步壓縮七分褲
你的最後一款 Windows 解壓縮軟體:Bandizip
Imagination為各種GPU提供業界首個視覺無損圖像壓縮模塊以保障更低的內存佔用
Intel發布神經網路壓縮庫Distiller:快速利用前沿演算法壓縮PyTorch模型
TensorFlow 首個優化工具來了:模型壓縮4倍,速度提升3倍!
參數少一半 效果更好,天津大學和微軟提出Transformer壓縮模型
DisplayLink為無線VR演示「注視點壓縮」技術,可將所需帶寬降至1/3
DisplayLink為無線VR演示「注視點壓縮」,可將所需帶寬降至1/3
奇簡 Terark:數據壓縮存儲方面,我們幹掉了 Facebook、Google|創業
壓縮機橫空出世 Intel會輸掉與AMD的核大戰嗎
Google 推出圖片壓縮工具 Squoosh
奇簡 Terark:數據壓縮存儲方面,我們幹掉了 Facebook、Google
DeepMind論文:深度壓縮感知,新框架提升GAN性能