前端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 相关文章推荐
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
Jun 24 Javascript
jQuery中next方法用法实例
Apr 24 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
Nov 02 Javascript
高效Web开发的10个jQuery代码片段
Jul 22 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 Javascript
vue项目中定义全局变量、函数的几种方法
Nov 08 Javascript
vue 解除鼠标的监听事件的方法
Nov 13 Javascript
PHP 502bad gateway原因及解决方案
Nov 13 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 header示例代码(推荐)
2010/09/08 PHP
10 个经典PHP函数
2013/10/17 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
Django实战之用户认证(初始配置)
2018/07/16 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
python模拟斗地主发牌
2020/04/22 Python
python中get和post有什么区别
2020/06/19 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
学校司机岗位职责
2013/11/14 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
党委领导班子整改方案
2014/09/30 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
python实现进度条的多种实现
2021/04/29 Python
pandas进行数据输入和输出的方法详解
2022/03/23 Python