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,如需转载请自行联系原作者

合并压缩JavaScript,开发发布两不误相关推荐

  1. uglifyjs php,使用UglifyJS合并/压缩JavaScript

    在UglifyJS入门中主要记录了UglifyJS的安装,配置.篇末在命令行中使用了一个简单命令来压缩一个JS文件.这篇以编程的方式去压缩JS文件.即写一个build.js文件,使用node命令执行该 ...

  2. [转载]用UglifyJS2合并压缩混淆JS代码——javascript系列

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  3. 推动RISC-V拾级而上 赛昉科技发布两款高性能产品: JH7110多媒体处理器与VisionFive 2开发板

    推动RISC-V拾级而上  赛昉科技发布两款高性能产品 8月23日,RISC-V领域迎来重大突破.RISC-V软硬件生态领导者赛昉科技在线举办2022新产品发布会,揭晓两款重磅新品:全球首款量产高性能 ...

  4. JetBrains发布两项重要更新:基于IDE的远程开发解决方案、轻量级编辑器Fleet

    近日,JetBrains 对外发布两项重要产品更新:专为云端和其他服务器打造的远程开发解决方案,以及轻量级编辑器Fleet. 为IntelliJ 平台引入远程开发支持 在近期陆续发布的2021.3 版 ...

  5. 使用SeaJS实现模块化JavaScript开发

    2019独角兽企业重金招聘Python工程师标准>>> 前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加 ...

  6. 使用SeaJS实现模块化JavaScript开发【转】

    前言 SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.与jQuery等JavaScript框架不同,SeaJS不会扩展封 ...

  7. JavaScript开发人员需了解的工具内容

    自从HTML5变得流行以来,整个Web平台取得了长足的进步,人们也开始将JavaScript视为一门能够创建复杂应用的语言.许多新的API纷纷浮现,而关于浏览器如何应用这些技术的文章也大量涌现. 作为 ...

  8. JavaScript开发工具简明历史

    译者按: JavaScript开发要用到的工具越来越多,越来越复杂,为什么呢?你真的弄明白了吗? 原文: Modern JavaScript Explained For Dinosaurs 为了保证可 ...

  9. 面向JavaScript开发人员的Adobe AIR与Dreamweaver

    入门教程,非常详细,CS4里面应该可以省略前面几步直接开发了. Adobe AIR对于HTML/JavaScript应用程序与桌面的集成有着出色的支持,但除了所有附加功能之外,还需要一些其他工具和技术 ...

最新文章

  1. C语言加强学习营(二):定义整型的最大值和最小值
  2. 2021-07-05-日历
  3. java解析字符串方法_java字符串的截取方法substring()代码解析
  4. 2021年南宁二中高考成绩查询,2021年广西南宁二中高考物理冲刺试卷(一).docx...
  5. mysql导入报错1071_导入sql文件报错:1071 Specified key was too long; max key length is 767 bytes...
  6. ggplot2作图详解:ggplot图形对象
  7. 全开源-微信小程序(附开源地址)
  8. linux 1394驱动下载,1394驱动
  9. 质性分析软件nvivo的学习(二)
  10. 【AE模板】扁平化MG动画卡通人物解说角色场景元素包
  11. 打印后台程序没有运行,怎么办?
  12. 软考程序员c语言、Java和c++考点
  13. 学了mysql用户权限我直接把管理员禁闭了
  14. Android 组合控件之删除文本框
  15. 一个可实施的技术方案模板
  16. 商家WIFI码项目全解析
  17. 非常摄影手记:EOS 60D完全实用5步通
  18. 学习笔记0 Linux环境搭建与脚本编程
  19. qt跨平台Linux到windows,Qt实现软件从Windows到Linux跨平台
  20. asp.net基于移动互联网的办公网站

热门文章

  1. java的第一个程序 ----Hello World
  2. Windows编程革命简史
  3. 关于主窗体与子窗体之间的通信以及面向对象思想的一些应用
  4. 探秘Spring AOP(上)
  5. 03-27 耗电量测试
  6. java进程生产者消费者_生产者与消费者(多线程经典案例)
  7. 诺基亚7plus支持html,【诺基亚7Plus评测】外观:全面屏是最大亮点_诺基亚 7 Plus(4GB RAM/全网通)_手机评测-中关村在线...
  8. Web前端程序员必备 前端面试题汇总(1)
  9. 为什么使用%lf读取double型的值,而用%f进行显示?
  10. mysql execution plan_MySQL Execution Plan--NOT IN查询