Ext.Loader使用(js延迟加载)

首先感谢公司里傅哥对于Ext的Loader类的关注,没有他提起,我还一直不知道原来EXT3.3以后有了这么一个有趣的小东西。傅哥对新技术的敏感性要远强于我,向他学习,天天向上。

因为我对js了解不深,所以对一些问题的关注点或许太浅薄,请擅长js的大大见谅。

 

1. 这篇博文要记录什么:Extjs中的新类,Ext.Loader . 作用是可以在需要的时候即时加载js,而不是在页面head里一股脑儿把所有js都加载。

 

2. 环境条件:Extjs 3.3新增加的js,经我测试可以平稳转移到其他低版本的EXT上。

 

3. Loader试用代码:

 

Ext.Loader.load(["<c:url value='/dwr/interface/testaManager.js'/>"],function(){
    。。。一堆加载完js要做的事情
});

 

Loader类很小,算上注释也只有96行代码,但它却实现了一个很实用的功能——在程序需要某个js的时候才对这个Js进行手工加载,因此在触发某些事件前不需要用到的js,我们就不必把它们写在页面的<head>里了。

刚听到这个功能的时候,我心中一震,这不是传说中的延迟加载么?细看了一下API,才发现不是想像中的“用到才自动加载”。而是基于一种手工编码的,在确定需要使用到某个js的时候,手动加载js的功能。

 

Ext.Loader.load方法就是延迟加载js的方法。它有四个参数:

 

  • fileList:将要被加载的一系列js的路径。切记,必须传入集合类型,否则fileList.length会解析错误。(必填)
  • callback: fileList中所有的Js都被加载完成后触发的回调函数(一般都要写的,否则底下的代码就异步跑过去了)
  • scope: callback的范围(选填)
  • preserveOrder:是否强制js的严格加载顺序。默认是false.(选填)

 

 

4. Loader如何运作:

Loader的作用简单明了,让我感兴趣的是它如何实现在需要的时候才加载js而不是在head里。

Loader.load方法的核心代码如下:

 

buildScriptTag: function(filename, callback) {
        var script  = document.createElement('script');
        script.type = "text/javascript";
        script.src  = filename;
        
        //IE has a different way of handling &lt;script&gt; loads, so we need to check for it here
        if (script.readyState) {
            script.onreadystatechange = function() {
                if (script.readyState == "loaded" || script.readyState == "complete") {
                    script.onreadystatechange = null;
                    callback();
                }
            };
        } else {
            script.onload = callback;
        }    
        
        return script;
    }
 

 

从这段代码中可以了解到2个东西:

 

  • 页面后期才引入的js文件,可以通过document.createElement('script')创建出来,

 

然后设置属性,最后由

document.getElementsByTagName("head")[0].appendChild(创建出来的script);加入页面中

 

  • 在创建script的过程中,为script注册了加载成功的监听事件,这里IE浏览器js加载事件为script.onreadystatechange,其他浏览器为script.onload. 注册加载成功监听事件的目的有2个:一个是当要加载的文件多于一个时,用回调触发下一个js的加载。另一个目的是在回调中检查,当加载到最后一个js的时候,调用最外层传入的callback,标识着所有js已经加载完成。

 

 

5. preserveOrder顺序加载的实现:

Loader是通过回调函数中的分支判断来控制是否顺序加载的。如果顺序加载,那么在buildScriptTag的回调函数中才触发下一个js的加载,如果不用顺序加载,则此回调函数中只监控是否全部加载完成。

 

6. 通过documentFragment提升页面效率与减少DOM操作:

无论是否按顺序加载js,大体上script对象的生成流程是一致的,但有一个细节值得注意:

顺序加载的生成流程是: 创建script元素——>设置script——>追加script到head中   => 处理下一个script

无顺序加载js的流程是: 创建script元素——>设置script——>追加script到fragment中 => 处理下一个script ——>...——>追加fragment到head中

 

也就是说,顺序执行的时候,每创建一个script元素,就appendChild到head中一次。 而无顺序情况下,每个创建出来的script元素都会先appendChild到fragment中,最后一次性把fragment appendChild到head中。

 

为什么无顺序执行的时候不和顺序执行一样,直接把创建出来的script元素直接加入到head中呢?原因很简单,首先要了解什么是documentFragment.  documentFragment 是一個無父對象的document對象. 如果没有使用documentFragment,每次执行head的appendChild都会改变页面的表现,同时更新整个页面。而通过documentFrament可以达到只更新一次页面的目的,减小页面的开销。

 

嵌入式Linux与Qt构建汽车智能中控:架构、实战与车规级开发全解析 嵌入式系统作为专用计算机系统,以其高可靠性、实时性和低功耗特性,成为工业控制、汽车电子等领域的核心基石。其工作原理在于通过裁剪的操作系统内核与硬件紧密耦合,实现对特定任务的精准控制。这一技术价值在于为资源受限的嵌入式设备提供了稳定、高效的软件运行环境。在汽车智能化浪潮中,嵌入式系统与图形界面框架的结合,成为开发车载信息娱乐系统(IVI)与人机交互界面(HMI)的关键。**嵌入式Linux**作为开源、可深度定制的操作系统,提供了坚实的底层支持;而**Qt框架**凭借其卓越的跨平台能力和丰富的图形组件库,极大 阅读详情

相关推荐

[Ext JS 4]性能优化

一般的优化技巧 1. 检查你定义的时间监听器 正确的设置事件监听器对性能会有很大的影响。 举例来说, 在定义一个store的时候,设置一个load 的事件去触发从后台读取数据,如果设置single 的值为true的话,则load的事情就只有在第一次取数据的时候会触发了。 listeners: { load: onFirstLoadData, single: true }给一个

oscar999的专栏 3491

在应用中使用Ext Loader

原文:http://www.sencha.com/blog/using-ext-loader-for-your-application/      ExtJS 4.0是一个使用新的依赖系统的类加载系统。这两个强大的新功能允许你创建大量允许浏览器按需下载脚本代码的应用。      今天,我们将通过建立一个小的使用新的类加载系统的应用程序来熟悉一下依赖管理系统。同时,我们将讨论Ext加载系

黄灯桥的专栏 2万+

从零搭建VGGNet

在 forward 方法中实现了前向传播过程,包括卷积、激活、池化和平铺操作,最后通过全连接层得到分类结果。使用 torch.onnx.export 将模型导出为 ONNX 格式的文件 vgg.onnx。导出 ONNX:将模型导出为 ONNX 格式,便于在其他平台或框架中使用。定义 VGG 网络:构建了一个包含多个卷积层、池化层和全连接层的网络。使用 torch.save 将整个模型保存为 vgg.pth 文件。前向传播:对输入数据进行前向传播,得到输出结果。保存模型:将模型保存为 .pth 文件。

开源驱动,创造价值;坦诚清晰,快速失败;让复杂可计算。 521

load_ext是干什么的(autotime,autoreload)

比如我们有一个自己写的utils包,在jupyter的开头import了,后来,我们在jupyter中运行之后发现有utils中的某个函数有bug,然后我们纠正了那个函数,重新在jupyter中运行。我觉得可能是因为我们现在的背景是IPython,而不是Python,这两者有一定的差别。这个时候,按照道理,仍然是会报错的,因为jupyter不会帮你自动刷新utils这个包。作用:这个扩展autotime的作用就是,给出每一个单元格运行所花费的时间。注意,上面那一行不要写注释,否则报错,写注释要换一行。

qq_43391414的博客 3727

OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)

最近整理了一下这两年一直在用的摄像机定标与立体匹配测试程序,将代码进行了重构,界面也做了调整,分享出来方便有需要的朋友使用。当然我的编程能力有限,程序可能还有各种bug,请大家多多包涵。相关问题欢迎留言或email联系讨论,谢谢! ==================================================================================源码

晨宇思远 5万+

如何借助GPT- 6 写好一篇论文:从引言到参考文献完整步骤(附专业提示词)

七哥就结合这篇文章的写作思路,依次拆解引言、方法、结果、讨论、摘要、标题和参考文献分别应该怎么写,同时也聊聊,在每一个环节里,我们可以怎样合理借助 GPT-6,让论文写作变得更清晰、更高效。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。8、不修改、不补写、不猜测任何样本量、阈值、剂量、设备型号、参数或统计方法,所有缺失但影响方法完整性的信息统一标记为【待作者确认】、检查方法中设定的每一个分析项目能否在后续结果章节找到对应位置。

智能AI让学术科研更容易 113

java extloader,Java ClassLoader 实现原理和加载机制

Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoader的loadClass()方法来加载class的,loadClass使用双亲委派模式。每个ClassLoader对象都是一个java.lang.ClassLoader的实例。每个Class对象都被这些Cla...

weixin_27244795的博客 343

COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(II)

本期博客是《COMSOL介电弹性体数值仿真指南》系列博客中的一期。聚焦于介电弹性体驱动器(DEA)中最为经典的预拉伸圆形DEA驱动器构型,对其在COMSOL平台中的具体建模步骤进行介绍与讨论。

忘了面孔的Batou 354

Ext.loader

Ext.Loader是Ext JS 4+动态加载新依赖的核心。最常用的是通过Ext.require来简写它。 Ext.Loader支持异步和同步加载,并且能通过开发流程来充分利用它们的优势。 我们将讨论每种方法的优点和缺点:

sjwzb的专栏 625

从原理到落地:Mamba-YOLOv8 全面实战指南(源码 + 训练 + 部署一次学会)

在目标检测领域,CNN与Transformer的较量从未停歇。本文提出一种革命性的架构——,将状态空间模型(SSM)首次引入YOLO框架。实验表明,该模型在COCO数据集上达到54.3% mAP@0.5,推理速度达89 FPS(RTX 4090),相比原版YOLOv8提升12.7%精度与23%速度。本文将完整揭示其技术原理与工程实现,助您掌握这一前沿技术。

FJN110的博客 120

推理篇第3节:TensorRT基础——Builder、Engine、ExecutionContext生命周期

TensorRT模型优化与推理流程摘要 TensorRT是NVIDIA的深度学习推理优化器,通过Builder、Engine和ExecutionContext三阶段实现高效推理。Builder负责编译模型,执行图优化和kernel选择;Engine是优化后的推理计划;ExecutionContext管理运行时执行。编译期进行重量级优化(如算子融合、kernel调优),运行时快速执行。TensorRT 10.x引入新API,推荐使用buildSerialized方法。构建流程包括创建Builder、网络定义、

PeterPan的博客 503

Extjs一些关键函数的含义,包括Loader()、onReady()、define()等

目录 Ext.Loader() Ext.onReady() Ext.require() Ext.widget() Ext.define() Ext.Loader() Ext.Loader是ext的动态加载功能,目的就是在页面使用到某个js时再去加载这个js,类似于延迟加载,但是不同的是延迟加载是在需要时自动加载, 而ext的动态加载是在需要时手工加载; Ext.Loader.setConfig()是设置动态加载的属性,包括的属性是Ext.Loader所具有的属性,比如脚本编码字符集:UTF-8

麻花猫耳朵的博客 602

量化 insider 爆料! 散户打板必亏?(打板必看!量化资金如何“隔日砸盘”收割散户)

量化开发 insider 爆料💥 散户追的涨停板📉,可能是机构故意做的陷阱!本文从技术视角拆解“涨停陷阱”,帮你看清市场真实逻辑🧠。

XiaoqiangClub的博客 451

[extjs3.4]延迟、动态加载js文件

var aryJS = [ 'Scripts/Ext.lib.Ajax.getConnectionObject.js', 'Scripts/TabCloseMenu.js', 'Scripts/test.js' ]; Ext.Loader.load(aryJS, function() { alert('js injected!'); }, window, true);

wzp1986的专栏 1346

【2026华为OD新规机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 508

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Node.js模块系统:从原理到最佳实践

模块化是软件开发的核心概念,通过将代码分割为独立功能单元实现高内聚低耦合。Node.js基于CommonJS规范构建了高效的模块系统,支持三种模块类型:内置核心模块、第三方npm模块和本地文件模块。其加载机制采用路径解析和缓存优化,配合require/exports语法实现依赖管理。在工程实践中,模块化能显著提升代码复用率(如Express框架复用率达78%),同时解决命名冲突问题。典型应用场景包括Web服务开发(使用http模块)、工具链构建(结合fs/path模块)和微服务架构。随着ES模块标准普及,N

weixin_33937778的博客 402

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ExtJS4学习笔记(十)---带搜索的Grid(SearchGrid)

项目开发中,Grid组件少不了搜索功能,在Extjs4中,搜索组件以插件的形式出现,而且实现也非常简单,搜索组件位于examples/ux/form目录下,JS文件是SearchField.js。 Grid加载搜索功能,要注意的是: 1、开启延迟加载,即Ext.Loader.setConfig({enabled: true}); 2、设置插件的目录:Ext.Loader.setPath(...

dowhathowtodo 241

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Webpack+Express构建多页应用(MPA)实战指南

多页应用(MPA)作为传统Web开发架构,在SEO友好性和首屏性能方面具有独特优势。通过webpack模块化构建工具与express服务端框架的组合,开发者可以实现高效的资源打包和灵活的页面路由管理。webpack的多入口配置和代码分割能力解决了MPA的资源组织问题,而express中间件机制则提供了开发环境热更新和生产环境静态资源服务。这种技术组合特别适合企业官网、电商平台等需要独立页面SEO优化的场景,其中html-webpack-plugin实现多HTML生成,mini-css-extract-plu

weixin_34138056的博客 369

移动端图标重构:SVG方案与性能优化实践

在移动端开发中,图标系统优化是提升应用性能的关键环节。矢量图形(SVG)因其体积小、可缩放和无损渲染的特性,成为现代Web开发的首选方案。通过SVGO等工具进行路径优化,配合symbol sprite技术,可显著减少资源体积。工程实践中,按需加载、预加载关键图标和合理设置缓存策略能有效提升加载性能。在React/Vue等框架中,封装可复用的SVG组件,结合CSS变量实现动态换肤,既能保证视觉一致性,又能满足个性化需求。对于日活百万级的电商应用,系统化的图标重构可使资源体积降低80%以上,首屏加载时间减少近3

weixin_33892359的博客 407

Unbounded字体:区块链资助的开源字体技术实现与Web3设计实践

Unbounded字体代表了字体设计领域的一次革命性突破——作为世界上首个由区块链国库资助、完全开源且免费使用的字体项目,它不仅解决了传统字体授权复杂、成本高昂的痛点,更为Web3生态系统提供了标准化的视觉语言解决方案。本文将深入探讨Unbounded的技术架构、多语言支持机制、变量字体实现原理,以及如何在Polkadot生态和现代Web开发中高效应用这一创新字体系统。 ## 核心理念:去中心化

gitblog_00533的博客 729

Vue 完整版系统知识文档

《Vue全栈开发实战手册》摘要 本手册系统整合Vue2/Vue3全栈知识体系,涵盖基础语法、组件开发、状态管理、工程化等核心内容,适合从入门到精通的完整学习路径。主要特点: 基础核心 详解MVVM架构和响应式原理(Vue2的Object.defineProperty vs Vue3的Proxy) 完整模板语法规则与16种内置指令解析 组件系统核心:通信机制(8种方案)、插槽、动态组件、递归组件 进阶实战 状态管理:Vuex/Pinia完整解决方案 路由开发:动态路由、权限控制、懒加载 工程化:Webpack

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 402

ImportError: DLL load failed while importing _ext: 找不到指定的程序。

ImportError: DLL load failed while importing _ext: 找不到指定的程序。

qq_34425255的博客 3996

MiT-BEVFusion常见问题

在执行下面命令对bevfusion进行编译时:出现如下报错(下图二)。经过测试,可以忽略,也可以尝试使用来解决。​。

weixin_43537097的博客 5549

Load a script file in sencha, supports both asynchronous and synchronous approaches

//http://www.sencha.com/forum/showthread.php?188318-Ext.Loader.loadScriptFile-wrong-URL Ext.Loader.loadScriptFile("/a.js", function() { console.log('hello loadScriptFile callback'); },...

149
上一篇: Ext Button的onClick和handler
下一篇: for和Iterator比较
NNever
博客等级 码龄19年 7粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值