浏览器页面请求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表 ...
随机推荐
- 【pyqtgraph绘图】Qt速成课程
解读官方API-Qt速成课程 参考:http://www.pyqtgraph.org/documentation/qtcrashcourse.html Qt速成课程 PyQtGraph广泛使用Qt来生 ...
- 不能往Windows Server 2008 R2 Server中复制文件的解决方法
目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度找到了解决方法,特此记录(记忆). 1.在任务管理器中找到“rdpclip.e ...
- 【托业】【新托业TOEIC新题型真题】学习笔记5-题库二->P7
--------------------------------------单词-------------------------------------- amenity 适意:休闲设施 onsit ...
- js字符串拼接
1. 2. 3.
- MySQL group replication介绍
“MySQL group replication” group replication是MySQL官方开发的一个开源插件,是实现MySQL高可用集群的一个工具.第一个GA版本正式发布于MySQL5.7 ...
- NYOJ 圈水池
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...
- 微信小程序使用阿里图标-iconfont
步骤一:下载项目图标 步骤二:解压文件,重命名 iconfont.css为 iconfont.wxss ,并复制 到项目 static文件夹 icon文件夹下 ...
- vertical-align:middle实现图片与文字垂直居中对齐
css代码: header .logo{ display:inline-block; margin-left: 10px; width: 15%; line-height: 9.1rem; backg ...
- Centos7上安装Apache
Apache HTTP服务器是世界上最流行的Web服务器. 它是一款免费的开源和跨平台的HTTP服务器,提供强大的功能,可以通过各种模块进行扩展. 以下说明介绍如何在CentOS 7机器上安装和管理A ...
- js模拟栈---汉诺塔
var Stack = (function(){ var items = new WeakMap(); //先入后出,后入先出 class Stack{ constructor(){ items.se ...