首页 web前端 js教程 javascript的动态加载、缓存、更新以及复用(一)_javascript技巧

javascript的动态加载、缓存、更新以及复用(一)_javascript技巧

May 16, 2016 pm 04:45 PM
动态加载 复用 更新 缓存

使用范围:

  OA、MIS、ERP等信息管理类的项目,暂时不考虑网站。

遇到的问题:

  完成一个项目,往往需要引用很多js文件,比如jQuery.js、easyUI等。还有自己写的一些列js文件,那么这些文件如何方便的加载,如果文件有变化如何才能让客户端及时更新缓存?如果能够提高点运行效率,那就更好了。

目标:

1、  可以方便的引用js文件。

2、  尽量使用各种缓存,避免频繁从服务器读取文件。

3、  如果js文件有更新或者增加、减少几个减少js文件,需要客户端能够自动、立刻更新。

4、  Js文件的复用。

页面结构:

  一般OA、MIS这一类的项目,大多采用frameset或者iframe的方式来实现,这样就有了父页和子页的概念。我们可以利用这一点来做做文章。

  网页可以分为三块:外壳、首页、标签、数据列表、表单(添加、修改)。因为这里要说的加载js的方法,需要利用这种页面结构,也正是因为这个原因,所以暂时不支持网站。

  看这个图有点眼熟吧。恩,就是这种结构。

javascript的动态加载、缓存、更新以及复用(一)_javascript技巧

正文

  现在做web版的应用,越来越依赖各种js了,第三方的jQuery、easyUI、my97等,还有自己写的各种js。要实现的功能越来越多,需要使用的js也越来越多,js文件的修改也很频繁。于是就出现了许多问题,比如每个页面都要写一大堆

动态加载

  在页面里使用<script>加载js,显然很麻烦,那么怎么办呢?想来想去还是用动态加载的方法来解决。在网上也搜索了一番,有很多种方法,有自己手动写的,有整理成框架的(比如seejs)。有的时候还是感觉自己弄一个更加的应手,所以打算自己写一套。</script>

  如何动态加载呢?使用jQuery提供的方法吗?这个倒是可以,但是页面必须引用jQuery和我写的加载js文件的js。也就是说一个页面要写两个<script>,这个就麻烦了。能写一个,就一定不要写两个,虽然只是多了一个,但是多了这么一个就真的很麻烦。所以决定自己手写一个动态加载的小方法。</script>

  不会写怎么办呢?百度大婶来帮忙吧。各种搜呀,终于找到了一个比较理想的方法,恩就用这个了。

复制代码 代码如下:

/*实现动态加载js的函数,来自于互联网,做了一点修改,可以兼容IE10 */
var loadscript =
{
    $$: function(id) { return document.getElementById(id); },
    tag: function(element) { return document.getElementsByTagName(element); },
    ce: function(element) { return document.createElement(element); },
    js: function(url, callback) {
        var s = loadscript.ce('script');
        s.type = "text/javascript";
        s.src = url;
        if (document.documentMode == 10 || document.documentMode == 9) {
            s.onerror = s.onload = loaded;
        } else {
            s.onreadystatechange = ready;
            s.onerror = s.onload = loaded;
        }
        loadscript.tag('head')[0].appendChild(s);

        function ready() { /*IE7.0/IE10.0*/
            if (s.readyState == 'loaded' || s.readyState == 'complete') {
                callback();
            }
        }

        function loaded() { /*chrome/IE10.0*/
            callback();
        }
    }
};

加载顺序

  和新代码已经搞定了,下面就是如何加载其他js文件了,由于文件比较多,还有一定的依赖关系,想来想去还是弄个js文件的字典吧,然后做一个加载顺序,按照这个顺序来加载。

  为了更稳定一点,决定采用一个一个加载的方式,即加载完一个js,然后在加载另一个js。这样就可以确保依赖关系。当然缺点是加载速度会比较慢。一般网页加载js是可以多个js文件一起下载的,这个速度就会比较快。

使用缓存

  一般浏览器对于各种资源(比如网页、图片、js、css等)会有一个缓存,已经有了就不会再向服务器去下载了。看似很好,但是有两个问题:

    A、浏览器如何判断缓存的js文件是不是最新的?

    B、js文件更新了,如何强制浏览器更新?

  浏览器是怎么判断的呢?具体步骤我也不太清楚,只是知道有一个步骤是要到服务器问问,我缓存的js文件是不是最新的,然后才能够确定本地的缓存是否是最新的,如果是最新的就不折腾了,如果不是再去下载最新的。就是说呢,即使客户端已经有了js文件的缓存,但是浏览器要确认一下是否最新,还是会跑到服务器去问问。这个,折腾呀。当然一般情况下,这个过程会很快,但是有时候这个过程会很慢。

  所以呢,还是尽量避免加载js的好。于是就引出来的“js文件的复用”。

更新js文件

  Js文件更新了,但是浏览器却还在用以前的js文件,因为有缓存了,而且还固执的认为缓存的js文件就是最新的,哎咋办呀?

  最简单的方法就是在加载js的时候,后面跟一个版本号,有更新了,就版本号+1。比如 xxx.js?v=1。Js文件更新后就是 xxx.js?v=2。这样js就肯定会被更新了。

  看起来似乎很简单,但是这个版本号如何加上去?版本号本身又如何更新呢?

复用

  这个就要先看看上面那个图了,就是页面结构,有一个外壳页(或者首页),我们叫做父页。里面还有若干个iframe加载的页面,我们加做子页。

  一般的做法是,父页里加载jQuery.js,然后子页里也要加载jQuery.js。当然当子页在加载jQuery.js的时候,直接从缓存里面提取,一般不会再去折腾服务器了。

  但是,既然父页里面已经加载了,子页为啥还要再加载一次?直接用父页里加载好的行不行呢?到网上搜了一下,似乎没有人这么做。也许是我太另类了吧,我就是想实现这个方法。优点就是,所有的js文件都在父页里加载,子页直接使用父页里加载好的js,这样子页就不需要在折腾js文件了。这样效率也可以更高一些,毕竟即使用缓存里加载,也是要判断一下,然后在做个加载的动作,还是会有一点点损耗,js文件越多也就越明显。

  那么如何实现呢,想想似乎很简单。

  父页里使用jQuery

  Var aa = $('div');  //找到父页里的所有div

  子页里是不是可以这么做?

  Var  bb = top.$ ('div') ; //能够找到div,但是不是子页的div而是父页里的div。

  咋回事呢?原因就在于搜索范围。jQuery是有三个参数的,我们平时只用了第一个,后面的就被忽略了。那么第二个参数是啥呢?就是搜索范围。没有指定的时候,jQuery会在哪里搜索呢?加载jQuery的页面里面搜索,而不是调用$的页面里搜索。

  解决方法也很简单,加个参数就好了

  Var  bb = top.$ ('div',document) ; //指定搜索范围:子页的document

  等等,这个似乎很烦人,我们在写脚本的时候,还要考虑一下,这个脚本是在父页里执行还是在子页里执行吗?

  好了,做一个简单的封装,避免这个麻烦。子页里写个函数

复制代码 代码如下:

function $ (p1){
         return top.$ (p1,document);
}

 

  好了,大功告成了吗?当然没有!预知后事如何,请听下回分解。

ps:下集预告。就是具体的实现代码,还有一些思路和想法,不知道大家还有啥想知道的没,有的话,欢迎在下面回复一下。谢谢先。

javascript的动态加载、缓存、更新以及复用(一)_javascript技巧
 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
暴雪战网更新一直卡在45%怎么解决? 暴雪战网更新一直卡在45%怎么解决? Mar 16, 2024 pm 06:52 PM

  暴雪战网更新一直卡在45%怎么解决?近期有很多人在更新软件的时候,都是卡在45%的进度条,重启多次还是会卡住,那么这种情况应该要如何解决,我们可以通过重新安装客户端、切换地区、删除文件的方式来处理,本期软件教程就来分享操作步骤,希望能够给更多的人带来帮助。  暴雪战网更新一直卡在45%怎么解决  一、客户端  1、首先需要确认你的客户是官网下载的官方版本。  2、如果不是的话,用户可以进入亚服网址来进行下载。  3、进入以后点击右上角的下载就可以了。  注意:安装的时候一定不要选择简体中文。

如何在Ubuntu 24.04上安装Angular 如何在Ubuntu 24.04上安装Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一种可自由访问的JavaScript平台,用于创建动态应用程序。它允许您通过扩展HTML的语法作为模板语言,以快速、清晰地表示应用程序的各个方面。Angular.js提供了一系列工具,可帮助您编写、更新和测试代码。此外,它还提供了许多功能,如路由和表单管理。本指南将讨论在Ubuntu24上安装Angular的方法。首先,您需要安装Node.js。Node.js是一个基于ChromeV8引擎的JavaScript运行环境,可让您在服务器端运行JavaScript代码。要在Ub

Linux如何查看和刷新dns缓存 Linux如何查看和刷新dns缓存 Mar 07, 2024 am 08:43 AM

DNS(DomainNameSystem)是互联网中用于将域名转换为对应IP地址的系统。在Linux系统中,DNS缓存是一种将域名和IP地址的映射关系存储在本地的机制,可提高域名解析速度,减轻DNS服务器的负担。DNS缓存允许系统在之后访问相同域名时快速检索IP地址,而不必每次都向DNS服务器发出查询请求,从而提高网络性能和效率。本文不念将和大家一起探讨如何在Linux上查看和刷新DNS缓存,以及相关的详细内容和示例代码。DNS缓存的重要性在Linux系统中,DNS缓存扮演着关键的角色。它的存在

Windows无法访问指定设备、路径或文件 Windows无法访问指定设备、路径或文件 Jun 18, 2024 pm 04:49 PM

小伙伴电脑出现这样的故障,打开“此电脑”和C盘文件会提示“Explorer.EXEWindows无法访问指定设备、路径或文件。你可能没有适当的权限访问访问该项目。”包括文件夹、文件、此电脑、回收站等,双击都会弹出这样的窗口,右键打开又是正常的。这是系统更新导致,如果你也遇到这样的情况,下面小编教大家如何解决。一,打开注册表编辑器Win+R,输入regedit,或右键开始菜单运行输入regedit;二,定位注册表“计算机\HKEY_CLASSES_ROOT\PackagedCom\ClassInd

Windows永久暂停更新,Windows关闭自动更新 Windows永久暂停更新,Windows关闭自动更新 Jun 18, 2024 pm 07:04 PM

Windows更新可能导致以下一些问题:1.兼容性问题:某些应用程序、驱动程序或硬件设备可能与新的Windows更新不兼容,导致它们无法正常工作或崩溃。2.性能问题:有时,Windows更新可能会导致系统变得更慢或出现性能下降的情况。这可能是由于新的功能或改进需要更多资源来运行。3.系统稳定性问题:某些用户报告称,在安装Windows更新后,系统可能会出现意外的崩溃或蓝屏错误。4.数据丢失:在罕见的情况下,Windows更新可能会导致数据丢失或文件损坏。这是为什么在进行任何重要的更新之前,备份您

抖音怎么更新最新版本 抖音怎么更新最新版本 Mar 27, 2024 am 11:06 AM

1、打开抖音app,点击右下角的【我】,点击右上角的【三条杠】图标。2、选择【设置】,点击进入设置界面,找到并点击【通用设置】。3、在通用设置界面下拉,找到并点击【检查更新】。4、如果用户当前使用的版本不是最新版本,就会出现新版本的更新提示,点击【升级】。5、等待安装包下载完毕,系统会自动安装,点击【继续安装】即可。6、如果当前已经是最新版本,则会出现【没有可用的更新版本】的提

微星显卡驱动怎么更新?微星显卡驱动下载安装步骤 微星显卡驱动怎么更新?微星显卡驱动下载安装步骤 Mar 13, 2024 pm 08:49 PM

  微星显卡是市面上主流的显卡品牌,我们知道显卡都需要安装驱动才能发挥性能,并保证兼容性。那么微星显卡驱动要怎么更新到最新版本呢?一般微星显卡驱动可以官网下载驱动安装,下面就来了解一下吧。  显卡驱动更新方法:  1.首先我们进入“微星官网”。  2.进入后点击右上角“搜索”按钮并输入自己的显卡型号。  3.然后找到对应的显卡点开详情页。  4.随后进入上方“技术支持”选项。  5.最后在“驱动&下载”

Outlook在更新收件箱时卡住了; Outlook在更新收件箱时卡住了; Mar 25, 2024 am 09:46 AM

当Outlook在更新收件箱时发生问题,可能会影响工作效率。本文将介绍一些简单的故障排除步骤,帮助您解决问题并让Outlook恢复正常。为什么Outlook总是卡在收件箱更新上?Outlook在更新收件箱时可能会出现卡顿的情况,常见原因包括网络问题、邮箱容量过大,以及防病毒软件或防火墙的影响。外部插件或数据文件损坏也可能导致这种情况发生。接下来,我们将详细探讨这些可能的原因,并提供解决方案。修复Outlook卡住更新收件箱如果Outlook无法更新你的收件箱,请参考下面列出的解决方案:重启前景禁

See all articles