js资源加载优化

互联网应用或者访问量大的应用,对js的加载优化是不可少的。下面记录几种优化方法

CDN  + 浏览器缓存

CDN(content delivery network)内容分发网络, 最传统的优化方式。其实就是将自己页面所依赖的js(静态的)放置到CDN上,或者使用一些CDN库,以此降低对应用服务器的请求,而浏览器缓存也是不重复加载js文件的性质。

优点:

1.简单、容易维护

2.304 cache

简单来说就是转掉请求,缓存不重加载。

缺点:

1.缓存会失效,当用户强制刷新时会有请求

2.无法增量更新

离线存储(HTML5 AppCache)

通过配置一个manifest文件实现离线缓存

manifest文件包含:

1.当前版本号

2.cache的文件

3.需要网络请求的文件

4.失败响应

优点:

1.真有版本更新才会有请求(CDN方式还是会有请求的,只不过是304请求)

缺点:

1.更新完版本后,必须刷新一次页面才会启用新版本文件。

  PS:所以必须监听一个事件,重刷页面

window.applicationCache.addEventListener('updateready', function (e) {
        console.warn('页面更新中');
        window.applicationCache.update();
        window.applicationCache.swapCache();
        setTimeout(function () {
            location.reload();
        }, 10);
}, false); //from  http://dd.m.taobao.com/

2.进入离线存储的页面,如果不更新版本,是会将其当初静态页面不请求,这样就无法进行灰度发布等策略。

  PS:灰度发布:简单来说就是一部分人使用旧版,一部分人使用新版。

3.无法增量更新

  PS:例如一个100KB的文件,你只修改了其中4KB的东西,但你不得不更新整个100KB文件。

4.当需要更新某个文件时,会连带其他文件也跟着更新

本地存储

应用页面通过对用户当前版本与服务端版本的比较(本地存储有版本信息),通过跨域ajax请求有更新的js文件,如果是增量更新,则通过算法计算出新版本的js代码,然后将代码eval一下并将新js字符串存储到本地存储中(localStorage),以供下次增量更新。

优点:

1.减少不必要的请求

2.避免离线存储的问题

3.增量更新(需要算法计算)

PS:1.chunk算法,四个字符为一个块,比对块。

       2.编辑距离计算算法

缺点:

1.实现起来比前面几种方法复杂

2.某些浏览器不支持

转载:http://www.cnblogs.com/lovesong/p/4338146.html

时间: 2024-11-03 18:37:09

js资源加载优化的相关文章

代码-js 自动加载 函数 可以一性加载几个,并且是高效

问题描述 js 自动加载 函数 可以一性加载几个,并且是高效 我写了段代码,前台调用后台的数据,但是因为可以局部刷新,所以每个函数都分开写了!大约有9个函数,并且在点击页面时需要同时加载进来,所以写了一个自动加载函数,然后在自动加载函数中,分别条用这9个函数,但是当点击页面 加载时却有的加载很慢,有时却很快,数据库交互也时快时慢!!我想问下是不是我调用的太多了!? 解决方案 建议你优化一下,对于函数做一下合并,每次访问都是耗时和耗资源.会使加载变慢 解决方案二: 你使用ajax动态加载还是scr

js并行加载,顺序执行

<script>运行脚本或加载外部文件时,会阻塞页面渲染,阻塞其他资源的加载.如果页面中需要加载多个js文件,在古老浏览器中性能会比较糟糕. 因此有了最原始的优化原则:把脚本放在底部. 如何实现js非阻塞.并行加载,甚至能保持执行顺序呢?各浏览器表现如何?站在巨人的肩膀上,Kyle Simpson.Nicholas C. Zakas和Steve Souders对此有过总结和方案. 背景 1. Script DOM Element. 动态插入<script>,不会阻塞,但无法保持执行

Android WebKit HTML主资源加载过程

Android WebKit HTML主资源加载过程 前言 在浏览器里面输入网址,最终浏览器会调用WebView的loadUrl(),然后就开始加载整个网页.整个加载过程中,最重要的一步就是HTML主资源的加载.WebKit将网页的资源分为主资源(MainResource)和子资源(SubResource). WebKit资源分类 主资源:HTML文件. 子资源:CSS, JS, JPG等等,除了HTML文件之外的所有资源都称之为子资源 本章主要讲主资源的加载过程,子资源的加载过程后期会专门详细

学习javascript文件加载优化_javascript技巧

在js引擎部分,我们可以了解到,当渲染引擎解析到script标签时,会将控制权给JS引擎,如果script加载的是外部资源,则需要等待下载完后才能执行. 所以,在这里,我们可以对其进行很多优化工作. 放置在BODY底部 为了让渲染引擎能够及早的将DOM树给渲染出来,我们需要将script放在body的底部,让页面尽早脱离白屏的现象,即会提早触发DOMContentLoaded事件. 但是由于在IOS Safari, Android browser以及IOS webview里面即使你把js脚本放到

javascript-关于codefollow编辑器的js偶尔加载不出来的问题

问题描述 关于codefollow编辑器的js偶尔加载不出来的问题 一.问题描述 codefollow网站用的是Simditor编辑器,在网速不是很快的情况下偶尔会出现编辑器工具栏加载不出来,导致无法发布问题和回答问题.查看控制台,报的是404的错,错误信息如下: 这两个js的文件路径是正确的,这两个js是模版引擎解析的源文件,静态资源没有问题,不懂为什么会报404的错,有没有哪位大神之前遇到过这种情况,一般是什么原因会导致报404的错? 解决方案 把你的dns设置为8.8.8.8看看

配置-关于spring mvc静态资源 加载的问题

问题描述 关于spring mvc静态资源 加载的问题 浏览器报了这样的错误 然后小弟的项目里面是这样配置滴: 解决方案 第一行错误就显示jquery没找到,$肯定也就不好使了.可以在src里加上"${pageContext.request.contextPath}/"配完整路径 解决方案二: 不能用 /js 开头,应该这样写:/web工程名/js .... 这是个非常基础的问题,建议看下 html 相关知识 解决方案三: 1可能是你用的SpringMVC框架,拦截了静态资源.你检查下

JS动态加载脚本并执行回调操作_javascript技巧

关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件里面的函数是不会成功的.本文讲解怎么在js中加载其它js文件并在加载完成后执行回调函数.  我们可以动态的创建 <script> 元素,然后通过更改它的 src 属性来加载脚本,但是怎么知道这个脚本文件加载完成了呢,因为我们有些函数需要在脚本加载完成生效后才能开始执行. 经过对网络上资源的搜索,我发现在 IE 浏览器中可以使用

js实现加载更多功能实例_javascript技巧

项目的一个前端页面展示已购买商品时,要求能下拉加载更多.关于如何实现『加载更多』功能,网上有插件可用,例如比较著名的使用iscroll.js实现的上拉加载更多.下拉刷新功能. 但实际用起来却是很麻烦.由于是第三方插件,要按照对方定义的方法使用,用起来总感觉很不顺心.再加上iscroll.js本身并没有集成加载更多的功能,需要进行自行扩展.想继续使用iscroll.js实现加载更多功能的,上面给的链接可以看看. h5项目里需要实现简单的分页功能,由于是移动端,考虑用『加载更多』会更好,而不是PC端

js预加载图片方法汇总_javascript技巧

本文实例汇总了js预加载图片方法.分享给大家供大家参考.具体分析如下: 1. 纯CSS: #preload-01 { background: url(yun_qi_img/image-01.png) no-repeat -9999px -9999px; } #preload-02 { background: url(yun_qi_img/image-02.png) no-repeat -9999px -9999px; } #preload-03 { background: url(yun_qi_