前端js文件合并的三种方式推荐


Posted in Javascript onMay 19, 2016

最近在思考前端js文件该如何合并,当然不包括不能合并文件,而是我们能合并的文件,想了想应该也只有三种方式。

三个方式如下:

1. 一个大文件,所有js合并成一个大文件,所有页面都引用它。

2. 各个页面大文件,各自页面合并生成自己所需js的大文件。

3. 合并多个共用大文件,根据实践情况合并出多个共用js文件,每个页面引用多个共用大文件。

另外在我看来,合并有两个目的:

1. 为了减少请求数。

2. 代码安全考虑(文件分得越多,越容易被人看清)。

PS:注意我说的不是压缩混淆,只是合并

1. 一个大文件

这种方式就是不管三七二十一,所有js合并成一个大文件,所有页面都引用它,即使某些代码可能不会用到。

优点:

(1). 合并简单,使用也简单。

(2). 其他页面可利用缓存优化加载。

缺点:

(1). 页面可能会加载到本页面不使用的代码。

不适用场景:

(1). 这种方式肯定不适用于大型的Web应用,且不论单文件代码量,业务的复杂性也不允许我们这样干(我没见过那个网站这样做的)。

适用场景:

(1). Hybrid应用,无论是Mobile的Hybrid应用,还是PC的Hybrid应用(桌面应用,类似有道团队开发框架hex+chromium +nodejs),都非常适合,本身就不会有请求速度问题,这种位于客户端代码的应用的代码安全更为重要。

PS:当然最重要的还是后端的安全,无论前端是否被破解,后端是否完善输入校验,是否防止越权,后端才是关键,也就是常说一句话“不要相信用户的任何输入”。

2. 各个页面大文件

各个页面合并生成自己所需js的大文件,生成多份js合并。

优点:

(1). 每个页面都用到最精确的js,不会有不相关代码。

缺点:

(1). 有多少个页面,就会生成多个js,导致存在大量共同js代码的冗余。

(2). 共用部分无法使用缓存优化加载。

(3). 合并和使用会相对比较复杂。

这种方式我始终觉得不对劲,小应用直接单个大文件搞定,而大应用更不会这样去做,更不能用在Hybrid应用上,在这样讲究安装包大小的情形下,不能容忍冗余代码。我在思考各种场景时候,都发现能用上面或下面方式解决,而且是更优,所以我觉得这种方式是个鸡肋。

3. 合并多个共用大文件

根据实践情况合并多个共用大文件(例如依赖库分类),再合并本页面所需js文件(例如以业务分类),每个页面引用一个或多个共用大文件和本页面的js文件。

优点:

(1). 共用部分得到加载优化,每个页面引用的也尽可能的做到了不冗余。

缺点:

(1). 多多少少还是会存在某些页面会引用到不需要的代码,共用不并不是完完全全的共用。

适用场景:

(1). 大小型应用都比较适用,每个页面可能存在许多共用部分,合理的分文件合并将非常关键。

总结

这一篇文件只是思考,也只算泛泛之谈。文件合并方法挺多,由后端动态生成或工具直接生成(grunt+requirejs),合并的方式也就以上三种,也取决于我们实践需要。

合并很重要,但不是提倡所有文件都合并起来,有不能合并的,有些单独文件更优的,还是要看具体场景。

以上这篇前端js文件合并的三种方式推荐就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用JavaScript修改CSS属性的代码
May 06 Javascript
JS/Jquery判断对象为空的方法
Jun 11 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
js手机号批量滚动抽奖实现代码
Apr 17 Javascript
Js利用prototype自定义数组方法示例
Oct 20 Javascript
jquery实现左右轮播切换效果
Jan 01 jQuery
js实现复制功能(多种方法集合)
Jan 06 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
vue项目中使用vue-i18n报错的解决方法
Jan 13 Javascript
jQuery实现颜色打字机的完整代码
Mar 19 jQuery
Vue的props父传子的示例代码
May 20 Javascript
JS实现公告上线滚动效果
Jan 10 Javascript
Node.js+Express配置入门教程
May 19 #Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 #Javascript
判断数组是否包含某个元素的js函数实现方法
May 19 #Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
May 19 #Javascript
去除html代码里面的script正则方法
May 19 #Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
May 19 #Javascript
jQuery获取当前点击的对象元素(实现代码)
May 19 #Javascript
You might like
关于PHP实现异步操作的研究
2013/02/03 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php接口技术实例详解
2016/12/07 PHP
php生成HTML文件的类方法
2019/10/11 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
vue使用axios时关于this的指向问题详解
2017/12/22 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
基于python编写的微博应用
2014/10/17 Python
python脚本监控docker容器
2016/04/27 Python
Django实现表单验证
2018/09/08 Python
python实现AES加密与解密
2019/03/28 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
四风自我剖析材料
2014/09/30 职场文书
安全生产先进个人总结
2015/02/15 职场文书
行政上诉状范文
2015/05/23 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
七年级作文之下雨天
2019/12/23 职场文书
python四种出行路线规划的实现
2021/06/23 Python