Ionic進行PC端Web開發時通過腳本壓縮提高第一次載入效率
注意,本文中的描述僅適用於基於Ionic進行PC端的Web開發,如果是手機端的開發,可以嘗試僅使用UglifyJS2進行壓縮,是否會有提高請自行驗證,至少文件小了載入速度會快。^_^
1. 問題
1.1. 問題上下文描述:
- 基於Ionic進行PC端的Web應用開發;
- 使用Tomcat作為最終服務發布容器。
1.2. 問題描述:
編譯後main.js
的大小為4-6MByte。(集成第三方控制項前4M左右,集成後6M左右),導致第一次載入時速度較慢。
2.解決方案
經過分析,main.js
有很大的壓縮空間:
- 首先,其沒有進行代碼級別的研發,可以通過
UglifyJS2
進行代碼級別的壓縮; - 其次,可以利用瀏覽器的特性,進行gzip壓縮。
經驗證原本6MByte左右的文件,壓縮後成了500KByte左右,極大提高了載入效率。
3. 具體操作
3.1. 安裝並使用UglifyJS2
進行代碼級別的壓縮:3.1.1. 安裝UglifyJS2
首先保證已經安裝了nodejs
和npm
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
。
本部分基於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性能