浏览器页面请求js、css大文件处理
当页面引用一个比较大的js和css文件时,会出现较大下载延迟,占用带宽的问题,如果一个应用里有很多这样的js或CSS文件,那么就需要优化了。
比如ext-all.js有1.4M,页面引用这个文件,正常引用如下:
<script type="text/javascript" charset="utf-8" src="/extjs/ext-all.js"></script>
HTTP中响应头(Response Headers)属性content-Encoding,可以指定内容编码方式。内容编码方式则指出字节如何编码为其他字节。
比如我们这里设定content-Encoding:gzip,这样浏览器请求一个gzip格式的文件到浏览器端,然后浏览器端再按照gzip格式解压使用。
这样就给刚才的问题提供了一种思路,我们可以把服务器端较大的js或CSS使用gizp压缩一下,文件就变小了,然后发送这个较小的文件到浏览器端,让浏览器解压后共页面引用。
第一步:把js文件压缩一下
ext-all.gzjs
第二步:html添加引用
<script type="text/javascript" charset="utf-8" src="/extjs/ext-all.gzjs"></script>
第三步:web.xml设置header属性过滤器
<filter>
<filter-name>GzipFilter</filter-name>
<filter-class>com.util.GzipFilter</filter-class>
<init-param>
<param-name>headers</param-name>
<param-value>Content-Encoding=gzip</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>*.gzjs</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>GzipFilter</filter-name>
<url-pattern>*.gzcss</url-pattern>
</filter-mapping>
第四步:实现过滤器GzipFilter
package com.util; import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry; 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.http.HttpServletResponse;
public class GzipFilter implements Filter { /** 参数键值:头信息 */
public static final String PARAM_KEY_HEADERS = "headers"; /** 头信息 */
private Map<String, String> headers; /**
* <B>方法名称:</B>初始化<BR>
* <B>概要说明:</B>初始化过滤器<BR>
*
* @param fConfig 过滤器配置
* @throws ServletException Servlet异常
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
String param = fConfig.getInitParameter(PARAM_KEY_HEADERS);
if (param == null || param.trim().length() < 1) {
return;
}
this.headers = new HashMap<String, String>();
String[] params = param.split(",");
String[] kvs = null;
for (int i = 0; i < params.length; i++) {
param = params[i];
if (param != null && param.trim().length() > 0) {
kvs = param.split("=");
if (kvs != null && kvs.length == 2) {
headers.put(kvs[0], kvs[1]);
}
}
}
if (this.headers.isEmpty()) {
this.headers = null;
}
} /**
* <B>方法名称:</B>过滤处理<BR>
* <B>概要说明:</B>设定编码格式<BR>
*
* @param request 请求
* @param response 响应
* @param chain 过滤器链
* @throws IOException IO异常
* @throws ServletException Servlet异常
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
* javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
if (this.headers != null) {
HttpServletResponse res = (HttpServletResponse) response;
for (Entry<String, String> header : this.headers.entrySet()) {
res.addHeader(header.getKey(), header.getValue());
}
}
chain.doFilter(request, response);
} public void destroy() {
this.headers.clear();
this.headers = null;
} }
浏览器页面请求js、css大文件处理的更多相关文章
- Node + js实现大文件分片上传基本原理及实践(一)
_ 阅读目录 一:什么是分片上传? 二:理解Blob对象中的slice方法对文件进行分割及其他知识点 三. 使用 spark-md5 生成 md5文件 四. 使用koa+js实现大文件分片上传实践 回 ...
- 使用监听器解决路径问题,例如在jsp页面引入js,css的web应用路径
使用监听器解决路径问题,例如在jsp页面引入js,css的web应用路径 经常地,我们要在jsp等页面引入像js,css这样的文件,但是在服务器来访问的时候,这时间就有关到相对路径与绝对路径了.像网页 ...
- [Asp.net Mvc]为js,css静态文件添加版本号
方式一: 思路 string version = ViewBag.Version; @Scripts.RenderFormat("<script type=\"text/ja ...
- 构建工具是如何用 node 操作 html/js/css/md 文件的
构建工具是如何用 node 操作 html/js/css/md 文件的 从本质上来说,html/js/css/md ... 源代码文件都是文本文件,文本文件的内容都是字符串,对文本文件的操作其实就是对 ...
- js之大文件断点续传
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- js实现大文件上传分片上传断点续传
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- ASP.NET MVC 扩展HtmlHelper类为 js ,css 资源文件添加版本号
写在前面 在项目部署当中会需要更新 css 文件或 js 等资源文件,为了避免由于浏览器缓存的原因无法加载新的 css 或 js ,一般的做法是在资源文件的后面加上一个版本号来解决,这样浏览器就会去服 ...
- Vue.js实现大文件分片md5断点续传
背景 根据部门的业务需求,需要在网络状态不良的情况下上传很大的文件(1G+).其中会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长,请求超时:3,传输中断,必须重新上传导致前功尽 ...
- js解决大文件断点续传
最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
随机推荐
- vue-loader是什么?使用它的用途有哪些?
vue-loader是解析 .vue 文件的一个加载器,跟 template/js/style转换成 js 模块: 用途:js可以写es6.style样式可以scss或less:template可以加 ...
- try catch和spring事务
- SQL——查询一段时间内每天的数据,按天将数据封装进行封存
DROP TABLE IF EXISTS `T_ROTA_RECORD`; CREATE TABLE `T_ROTA_RECORD` ( `id` ) NOT NULL AUTO_INCREMENT, ...
- 控制input框只能粘贴,不能输入
.禁用文本框的onkeydown事件 <input type="text" onkeydown="return false"> .改造,可以使用ct ...
- ionic3 读写权限申请
This plugin is designed to support Android new permissions checking mechanism. 1.安装插件 $ ionic cordov ...
- Scala的apply unapply unapplySeq 语法糖
apply 可以理解为注入 unapply unapplySeq 可以理解为提取 apply 与 unapply 虽然名字相近,但是使用起来区别挺大.apply有点像构造函数unapply主要是结合模 ...
- go https ajax
这个很好用啊,估计大有用武之地 你会喜欢 //https-ajax.go package main import ( "fmt" "io" "net/ ...
- iOS应用图标及尺寸
Icon and Image Sizes Every app needs an app icon and a launch file or image. In addition, some apps ...
- vue打包后404,webpack配置问题
首先声明这是基于vue2.x的 1. 将其中build的配置项assetsPublicPath进行修改,改为上图-->目的是将资源文件的引入路径,改为相对地址(相对index.html) 2.h ...
- cocos2d-x JS 复选按钮checkBox的单选与多选
var HZ_createRoom = jx.BaseView.extend({//红中麻将 ctor : function() { this._super(); this.addLayout(res ...