合并压缩JavaScript,开发发布两不误

简介:

Web开发做优化的时候,需要将脚本进行压缩和合并。压缩好解决,可以找到一大堆工具在构建发布版本的时候压缩一下就好。合并就麻烦了,页面中引用的一大堆脚本文件,需要改为引用合并后的少数脚本文件,需要改动源代码,不能直接由构建工具来完成。


那么就只能从两个地方想办法了:



方法一


从源文件上想办法,将引用脚本那一块独立写到一个include文件inc_scripts中,同时针对发布版本写另一个include文件inc_scripts_r中,在构建的时候用inc_scripts_r替换掉inc_scripts即可。


比如,在ASP.NET中可以这样定义


inc_scripts.inc文件

1
2
3
4
5
6
< script  type = "text/javascript"  src = "js/jquery.js" ></ script >
< script  type = "text/javascript"  src = "js/common.js" ></ script >
< script  type = "text/javascript"  src = "js/date.js" ></ script >
< script  type = "text/javascript"  src = "js/number.js" ></ script >
< script  type = "text/javascript"  src = "js/format.js" ></ script >
< script  type = "text/javascript"  src = "js/cookie.js" ></ script >


inc_scripts_r.inc文件

1
< script  type = "text/javascript"  src = "js/combined.js" ></ script >


页面文件Demo.aspx

1
2
3
4
5
6
7
8
9
< html >
< head >...</ head >
< body >
<!-- 页面内容 -->
<%
     Response.WriteFile ("inc_scripts.inc")
%>
</ body >
</ html >


使用这种方法需要动态的服务器端语言支持。如果网站是由HTML作为视图页面的MVC模式来开发的,这个方法就不太适用。



方法二,推荐


直接从脚本文件想办法,一开始就生成合并后的文件combined.js给各页面引用,在combined.js再来加载需要合并进来的各个脚本。构建的时候,通过工具直接将脚本合并到comined.js中替换掉原来的内容即可。示例如下:


页面文件demo.html

1
2
3
4
5
6
7
< html >
< head >...</ head >
< body >
     <!-- 页面内容 -->
     < script  type = "text/javascript"  src = "js/combine.js" ></ script >
</ body >
</ html >


开发阶段的combined.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 配置在发布时需要合并为当前文件的脚本
var  scripts = [
     "jquery.js" ,
     "common.js" ,
     "date.js" ,
     "number.js" ,
     "format.js" ,
     "cookie.js"
];
// 找到脚本目录路径
var  basepath = ( function  () {
     var  s = document.getElementsByTagName( "script" );
     var   s[s.length  - 1].getAttribute( "src" ).replace(/\/[^/]+$/,  "/" );
     var  href = window.location.href.replace(/\/[^/]+$/,  "/" );
     return  href + src;
})();
// 定义载入脚本的函数
var  loadScript = ( function (basepath) {
     var  template =  '<script type="text/javascript" src="{0}"></script>' ;
     return  function (src) {
         var   basepath  + src;
         document.writeln(template.replace(/\{0\}/, href));
     };
})(basepath);
// 遍历载入scripts数组中配置需要载入的脚本
( function  () {
     for  ( var  i = 0; i < scripts.length; i++) {
         loadScript(scripts[i]);
         console.log( "loaded "  + scripts[i]);
     }
})();


构建过程合并后的combined.js

1
2
3
4
5
6
// jquery.js的内容
// common.js的内容
// date.js的内容
// number.js的内容
// format.js的内容
// cookie.js的内容


本文转自边城__ 51CTO博客,原文链接:http://blog.51cto.com/jamesfancy/1212544,如需转载请自行联系原作者
相关文章
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
505 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
391 1
|
9月前
|
前端开发 JavaScript
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
663 11
|
Web App开发 JavaScript 前端开发
Node.js开发
Node.js开发
249 13
|
存储 JavaScript 前端开发
深入浅出Node.js后端开发
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将以Node.js为例,深入探讨其背后的哲学思想、核心特性以及在实际项目中的应用,旨在为读者揭示Node.js如何优雅地处理高并发请求,并通过实践案例加深理解。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和思考。
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
在这篇文章中,我们将一起探索Node.js的奇妙世界。无论你是刚接触后端开发的新手,还是希望深化理解的老手,这篇文章都适合你。我们将从基础概念开始,逐步深入到实际应用,最后通过一个代码示例来巩固所学知识。让我们一起开启这段旅程吧!
|
Web App开发 开发框架 JavaScript
深入浅出Node.js后端开发
本文将带你领略Node.js的魅力,从基础概念到实践应用,一步步深入理解并掌握Node.js在后端开发中的运用。我们将通过实例学习如何搭建一个基本的Web服务,探讨Node.js的事件驱动和非阻塞I/O模型,以及如何利用其强大的生态系统进行高效的后端开发。无论你是前端开发者还是后端新手,这篇文章都会为你打开一扇通往全栈开发的大门。
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。