前端js文件合并三种方式
最近在思考前端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),合并的方式也就以上三种,也取决于我们实践需要。
合并很重要,但不是提倡所有文件都合并起来,有不能合并的,有些单独文件更优的,还是要看具体场景。
本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。
本文地址 :http://www.cnblogs.com/lovesong/p/5068025.html
前端js文件合并三种方式的更多相关文章
- 前端js,css文件合并三种方式,bat命令
前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...
- ORACLE SQL前端补0的三种方式。
前端补0的三种方式. select lpad(sal,8,'0') from emp;select to_char(sal,'00000000') from emp;select substr('00 ...
- android中解析文件的三种方式
android中解析文件的三种方式 好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...
- 转 Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式 velocitypropertiespath Velocity中加载vm文件的三种方式: 方式一:加载classpath目录下的vm文件 Prope ...
- Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式: a. 加载classpath目录下的vm文件 /** * 初始化Velocity引擎 * --VelocityEngine是单例模式,线程安全 * @th ...
- 解析Xml文件的三种方式及其特点
解析Xml文件的三种方式 1.Sax解析(simple api for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用 ...
- Ajax上传数据和上传文件(三种方式)
Ajax向后端发送数据可以有三种方式:原生Ajax方式,jQuery Ajax方式,iframe+form 方式(伪造Ajax方式) <!DOCTYPE html> <html la ...
- js 函数定义三种方式
<p>Js 函数定义的三种方式:</p> <br> <p>方式一:function</p> <script type="te ...
- 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...
随机推荐
- Linux的学习--配置LNMP环境
最近,回到公司,发现电脑都换成linux系统了...很无力... 配置环境,跑起项目来就花了一天...额...在这里记录一下-- 系统是ubuntu 12.04. 一.安装nginx1:ubuntu因 ...
- CLR执行模型
好好学习底层运行机制,从CLR via C# 开始. CLR的执行模型: CLR:Common Language Runtime,是一个可由多种编程语言使用的"运行时".CLR的核 ...
- 【Android】Android应用安装失败及无法打开
以下是我个人遇到过的APP无法安装的一些问题: 无法安装应用: 手机系统版本过低:不符合应用支持的最低版本.(比如应用只支持Android 4.0以上的手机,而手机是Android2.3的)解决方案: ...
- 1.Visual FoxPro 基础
1.菜单栏的使用 ******************************* 方法一:鼠标点击 方法二:快捷键 Alt+F打开文件菜单 Alt+E打开编辑菜单 Alt+V打开显示菜单 Alt+P ...
- JS和jQuery中的事件总结(一)
学而时习之,小白现在天天写页面,基础知识还是要恶补的. 进入正题,什么是事件(此处单独对jQuery.JS)?就是JS和Html之间的交互时呢,用户和浏览器操作页面时的动作(其实是为引发的效果的执行操 ...
- Gradle目录解析
Gradle目录解析 Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动化构建工具. Gradle这个工具集成了构建,测试,发布和其他,比如软件打 ...
- 7z制作自解压安装包
像7z和winRAR这样的压缩工具都支持制作自解压的文件.所谓自解压的文件就是不需要目标机器上安装解压工具,通过运行压缩包自己即可解压出压缩包中的文件.下面我们就介绍一下如何利用7z的自解压功能制作应 ...
- LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg
适用场景:统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数. Count 说明:返回集合中的元素个数,返回INT类型:不延迟.生成SQL语句为:SELECT COUNT(*) FROM ...
- JS表单验证插件(支持Ajax验证)
自己编写了一个表单验证插件,支持ajax验证,使用起来很简单. 每个需要验证的表单元素下面有一个span标签,这个标签的class有一个valid表示需要验证,如果有nullable则表示可为空:ru ...
- Java总结篇系列:java.lang.Object
从本篇开始,将对Java中各知识点进行一次具体总结,以便对以往的Java知识进行一次回顾,同时在总结的过程中加深对Java的理解. Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java ...