`
zxwxiao
  • 浏览: 19217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用ExtJs开发MIS系统(2):Js的动态加载

 
阅读更多

对于一个复杂的系统来说,客户端的JS可能会有上百个,如果全部加载到用户的浏览器中,一方面会导致多余的网络传输,另一方面浏览器解析大量的Js会导致性能下降,这两点都会显著的影响用户可察觉性能。所以对于Js的加载,是动态进行的,这个动态进行表现为两种方式:

  1. 能不加载的Js就绝不加载。
  2. 需要加载的Js在直到确实用到的时候才加载。

1,能不加载的Js就绝不加载

拿登陆的流程为例:

image

尝试登陆包含两种情况,一种是用户刷新页面时,尝试根据当前的令牌自动登陆,另一种是用户在上一次登录时保存了用户名和密码,这两种情况无论哪一种登陆成功了,都不需要用户再次登陆了,从而也就不需要加载FormLogin这个Js了。

2,需要加载的Js在直到确实用到的时候才加载

对于功能模块来说,仅当当前用户具有该模块的权限时,才会生成显示相关的菜单项。而今当该模块的某一个菜单项目第一次被点击时,该模块的相关Js才会被加载:

image

3,基于ExtJs Ajax的Js加载

ExtJs中的Ajax调用是异步的,而动态加载Js通常意味着在该Js加载完成后调用一个函数,且该函数可能是要加载的Js中的一个函数,所以上图对应的代码应该这样写:

 

Srims.Action.actions = {
    'project-vertical-list': function(){
        Srims.Action._callProjectAction('Srims.projects.listVerticalProject();');
    },
    'project-horizontal-list': function(){
        Srims.Action._callProjectAction('Srims.projects.listHorizontalProject();');
    }
};

Srims.Action._callProjectAction = function(fn){
    if (Srims.projects) {
        eval(fn);
    }
    else {
        Srims.loadProjectModule(fn);
    }    
}
Srims.loadProjectModule = function(callbackFunctionString){

    Ext.namespace('Srims.projects');
    
    var js = ["/srims/projects/projectLevel.js"];
    js[js.length] = "/srims/projects/projectState.js";
    js[js.length] = "/srims/projects/project.js";
    js[js.length] = "/srims/projects/projectStore.js";
    js[js.length] = "/srims/projects/projectGridPanel.js";
    js[js.length] = "/srims/projects/projectAction.js";
    
    Srims.loadJs(js, function(){
        eval(callbackFunctionString)
    });
    
}

当要执行的函数为要加载的Js中包含的函数时,函数名称当参数传递,加载完毕后,调用eval执行该函数。

真正执行加载操作的是Srims.loadJs这个函数,它接受两个参数:第一个参数是要加载的Js——可以是一个Js,也可以是一个Js数组;第二个参数是加载完毕后的回调函数。当要加载的是一个Js时,加载很简单:发起Ajax请求,对取得的结果用eval执行,然后eval回调函数;当要加载的是一系列Js时(就像上面代码中那样),情况会复杂一点,需要递归的调用loadJs,直到所有Js加载完毕,然后eval回调函数。以下是代码:

   1:  Srims.JsToLoad = undefined;
   2:  Srims.JsLoadCallBack = undefined;
   3:  Srims.loadJs = function(js, callback){
   4:      Srims.JsToLoad = js;
   5:      Srims.JsLoadCallBack = callback;
   6:      Srims._loadJs();
   7:  }
   8:  Srims._loadJs = function(){
   9:      var js = Srims.JsToLoad;
  10:      var callback = Srims.JsLoadCallBack;
  11:      
  12:      if (Ext.type(Srims.JsToLoad) != 'string') {
  13:          if (Srims.JsToLoad.length == 1) {
  14:              js = Srims.JsToLoad[0];
  15:              callback = Srims.JsLoadCallBack;
  16:          }
  17:          else {
  18:              js = Srims.JsToLoad.shift();
  19:              callback = Srims._loadJs;
  20:          }
  21:      }
  22:      
  23:      Ext.Ajax.request({
  24:          url: '/javascript' + js,
  25:          success: Srims._onLoadJs,
  26:          method: 'GET',
  27:          scope: callback
  28:      });
  29:  }
  30:  Srims._onLoadJs = function(response){
  31:      eval(response.responseText);
  32:      this();
  33:  }

 

请注意第19行,回调函数为本身,导致了递归。

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    Extjs 动态加载树

    标题“Extjs 动态加载树”涉及到的是一个前端开发技术话题,主要集中在使用Extjs框架构建能够动态加载数据的树形结构。Extjs是一个基于JavaScript的组件化UI库,常用于开发富客户端应用。动态加载树(Dynamic ...

    Extjs动态加载菜单

    动态加载菜单是ExtJS中的一个关键特性,它允许在用户交互过程中动态地创建、修改和加载菜单项,提供了更灵活的用户界面设计。在“Extjs动态加载菜单”这个主题中,我们将深入探讨这一功能的实现方式以及相关技术。 ...

    extjs中Ext.Panel和TreePanel 组件动态加载本地页面数据

    标签“源码”和“工具”暗示了这篇博客可能还讨论了EXTJS的源代码以及如何使用EXTJS作为开发工具来实现动态加载功能。EXTJS的源码可以提供深入的理解,帮助开发者调试和优化代码。EXTJS提供的各种工具,如`sencha ...

    Extjs3动态加载js源码

    动态加载JS(Dynamic JavaScript Loading)是现代Web开发中的一个重要技术,它可以提高页面的加载速度,减少初始加载的数据量,并在需要时按需加载资源,从而优化用户体验。 在ExtJS 3中,虽然没有像ExtJS 4那样...

    合同管理系统 extjs开发的 让大家一起学习

    本系统采用EXTJS进行前端开发,EXTJS是一款强大的JavaScript组件库,以其丰富的UI组件和数据绑定机制,为开发高质量的Web应用提供了便利。 EXTJS的核心特性包括: 1. **组件化设计**:EXTJS以组件为中心,提供了...

    ExtJS构造动态异步加载

    在IT领域,特别是Web开发中,ExtJS是一个广泛使用的JavaScript框架,它提供了丰富的用户界面组件和强大的数据管理功能。本文将深入探讨如何使用ExtJS构建动态异步加载的树形结构,结合AJAX技术实现JSON数据的高效...

    extjs4.x tabpanel 动态加载panel和html例子

    2. **定义动态加载的函数** 创建一个函数,用于根据需求加载指定的面板或HTML内容。这个函数可以接收一个参数,如面板ID或配置对象。 ```javascript function loadTab(config) { var panel = Ext.create('Ext....

    Extjs4.0+MVC模式+存动态加载

    ExtJS 4.0 是一个强大的JavaScript框架,用于构建富客户端Web应用程序。它引入了全新的MVC(Model-View-Controller)设计模式,这使得应用的结构更加清晰,代码更易于管理和维护。在这个主题中,我们将深入探讨如何...

    javascript函数动态加载javascript文件

    动态加载JavaScript文件的基本原理是利用`&lt;script&gt;`标签的异步加载特性或者使用`XMLHttpRequest`或`fetch` API来创建HTTP请求获取JS文件。下面我们将深入探讨这两种方法: 1. **使用`&lt;script&gt;`标签**: 在HTML中,...

    extjs实现动态树加载菜单

    动态树加载菜单是 ExtJS 中一种常见且实用的功能,它允许用户在需要时按需加载树节点,从而提高应用性能,减少初次加载时的数据量。 动态树加载,也称为懒加载或按需加载,是指在用户滚动、展开节点或执行其他操作...

    动态加载extjs tree

    ExtJS Tree是Ext JS库中的一个组件,用于创建和展示层次结构的数据,通常表现为树形结构。这个组件在Web应用程序中广泛使用,特别是在需要管理有层级关系的数据时,如文件系统、组织架构或者导航菜单等。动态加载是...

    Extjs 4.2.x MVC 动态加载 controller demo

    demo描述: 1. 页面主框架是左是一个tree,...2. 左边的树是加载主页面的时候动态生成 3. 点击左边的树的节点动态加载controller生成一个table 注:需要自己导入Extjs 4.2.x 的文件,该demo是用Extjs 4.2.1 写的

    Extjs4.2 动态加载项目(权限模块)

    在“Extjs4.2 动态加载项目(权限模块)”中,动态加载主要体现在两个方面:一是对代码的懒加载,二是针对权限控制的动态加载。 1. **代码懒加载**:在大型应用中,所有类一次性加载可能会导致页面加载速度变慢。通过...

    基于ExtJS开发的酒店管理系统C#源码

    【基于ExtJS开发的酒店管理系统C#源码】 在当今的信息化时代,酒店管理系统的开发已经成为提高酒店运营效率的关键工具。本系统采用先进的Web技术,特别是JavaScript库ExtJS,结合后端C#语言,构建了一个功能完备、...

    基于ExtJS开发的酒店管理系统源码

    ExtJS是一种基于JavaScript的前端开发框架,由Sencha公司开发,用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。这个“基于ExtJS开发的酒店管理系统源码”提供了一个完整的解决方案,帮助开发者...

    ExtJS4中文教程2 开发笔记 chm

    ExtJS 4中动态加载的路径设置 Extjs4 API文档阅读(一)——类系统(Class System) Extjs4 API文档阅读(三)——布局和容器 Extjs4 API文档阅读(二)——MVC构架(上) Extjs4 API文档阅读(二)——MVC构架(下) Extjs4...

    ExtJs 开发指南书籍 实例 可视化工具

    这些ExtJs的实例可能涵盖了从基础组件的使用到复杂应用的构建,例如数据网格的动态加载、表单验证、图表绘制等。通过实践这些实例,开发者能够将理论知识转化为实际操作,加深对ExtJs的理解。 3. **可视化工具**:...

    ExtJs中引用的三个js

    2. **核心组件文件**:在开发过程中,我们可能需要引用特定的组件库,如`ext-grid.js`(表格组件)、`ext-form.js`(表单组件)、`ext-tree.js`(树形组件)等。这些文件提供了构建用户界面所需的组件,例如数据网格...

    extjs 3.4 开发前准备

    【EXTJS 3.4 开发前准备】 EXTJS 是一款强大的JavaScript库,主要用于构建桌面级的Web应用程序,提供丰富的用户界面组件和交互效果。3.4版本是EXTJS的一个重要里程碑,它提供了稳定的基础和丰富的组件库。本文将...

    EXTJS开发总结.pdf

    6. 对大量JavaScript脚本进行压缩,如使用JS Builder工具,提升页面加载速度。 EXTJS的调试通常需要参考Debug版本的加载顺序,例如从`ext.jsb`文件分析。在部署时,确保正确引用Release版本的脚本文件,以实现性能...

Global site tag (gtag.js) - Google Analytics