• 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.某些浏览器不支持

  • 相关阅读:
    css 解决fixed 布局下不能滚动的问题
    js 正则常用函数 会正则得永生
    巧用call,appl有 根据对象某一属性求最大值
    锚点 , angular 锚点 vue锚点
    css 改变浏览器滚动条的样式
    angular 常用插件集合
    angular4,angular6 父组件异步获取数据传值子组件 undefined 问题
    angular组件之间的通讯
    tomcat的配置详解:[1]tomcat绑定域名
    click 绑定(三)防止事件冒泡
  • 原文地址:https://www.cnblogs.com/lovesong/p/4338146.html
Copyright © 2020-2023  润新知