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

按需加载js文件(转载)

阅读更多

何谓安需装载?

脚本程序一般都是下载后执行 ,当脚本库非常庞大时,一次性下载起来非常费时,传统的解决方式是,按功能模块把脚本写在不同的文件中,页面上手动加入script标签装载指定内容,但 是这有一些缺点,类库的使用者需要知道没个脚本之间的关系,顺序要求等等,而不可能要求每个类库使用者都对其非常熟悉,出错的可能性很大。于是很多框架开 始支持导入指令,想使用什么一个导入函数就完了,不必一堆堆的script文件,不用小心翼翼的关注着他们的依赖关系。

安需装载可分如下三种模式:

  • 即时同步按需装载阻塞,JSI、JSVM、dojo)
    最简单的按需装载实现,通过XMLHttpRequest同步装载脚本文件实现。问题是,浏览器使用这种方式同步获取资源时将导致浏览器阻塞:停止响应用户事件、停止页面重画操作。所以,虽然编程最为简单,但是用户体验最差。 
  • 异步装载无阻塞,JSI2.0+)。
    异步导入,不必多做解释,用户体验好,但是因为其异步特征,处理起来比较麻烦。
  • 延迟同步按需装载无阻塞,JSI2.0+)
    JSI通过动态预装载功能实现的一种同步获取资源的方法,虽然也是同步,但没有阻塞,可以算时兼顾易用性和用户体验的机决方按。缺点时
    有一定延迟,当前脚本标签中不可用。 

使用方法(JSI示例)

以一个代码语法着色程序为例:
类库位置:example/codedecorator/code.js
页面位置:example/xxx.html
  • 即时同步按需装载
    js 代码
    1. $import("example.codedecorator.Code");
    2. var code1 = new Code();
    3. code1.id = "libCode";
    4. code1.decorate(); 

  • 异步装载
    js 代码
    1. $import("example.codedecorator.Code",function(Code){
    2. var code1 = new Code();
    3. code1.id = "libCode";
    4. code1.decorate(); 
    5. })

  • 延迟同步按需装载无阻塞,JSI2.0+)
    xml 代码
    1. <script>"../scripts/boot.js"><\/script>
    2. <script>
    3. $import("example.codedecorator.Code",true);
    4. <\/script>
    5. <script>
    6. var code1 = new Code();
    7. code1.id = "libCode";
    8. code1.decorate();
    9. <\/script>

示例说明:

下载后最好能放到一个能受到网速限制的服务器上,只有这样才能看到阻塞的问题。

第一次发布仅再ff上测试通过。

第二次发布修正ie上的错误。

第三次发布修正opera上的错误。

在线测试 

http://jsintegration.sourceforge.net/example/code.html

http://www.xidea.org/project/jsi/example/code.html

参考:

JSI 导入函数: function $import(path, callbackOrLazyLoad, target )

JSI2 预览版下载:http://groups.google.com/group/jsier/files

分享到:
评论

相关推荐

    layui-progress+element+jquery+js设计一个动态进度条

    在实际应用中,动态进度条可以用于文件上传、数据加载、计算过程等多种场景。例如,当用户发起一个大文件上传请求时,后台处理文件的同时,前端可以通过JavaScript实时更新进度条,让用户知道任务的进度,提高用户的...

    js提示框-转载+++ js 乱码+++自动提交+滚动图片加载+箭头导航(转载)

    【标题】中的“js提示框-转载+++ js 乱码+++自动提交+滚动图片加载+箭头导航(转载)”揭示了几个重要的JavaScript编程知识点,主要包括以下几个方面: 1. **JavaScript 提示框**: JavaScript 提示框是浏览器内置的...

    javascript中文转拼音(转载)

    通常,`.js`文件是JavaScript源代码文件,`full`版本可能包含了所有功能,而简化的`Engine.js`可能只包含了必要的部分,用于减少页面加载时间或优化性能。这些文件可能包含了字典数据、转换算法和相关的辅助函数,...

    JS高手做的

    标题“JS高手做的”暗示了这是一个使用JavaScript编程语言完成的项目或应用,而描述中的“全部用JS完成,一个JS高手做的,特转载”进一步强调了这个项目完全依赖JavaScript技术,并且是由一位经验丰富的JavaScript...

    js实现的3d效果(很炫+转载)

    JavaScript,简称JS,是一种广泛用于Web开发的轻量级...通过学习以上知识,并结合"3d_js"文件中的示例,开发者可以逐步掌握JavaScript实现3D效果的技术。不断实践和探索,可以创造出更多令人惊叹的3D交互式网页应用。

    Dojo 教程 笔记 (转载)

    总的来说,Dojo是一个强大且灵活的JavaScript库,它通过模块化和包的概念提供了高效的代码组织和按需加载功能。理解和熟练运用这些概念,将有助于你在开发过程中更加得心应手。通过不断学习和实践,你将能够充分利用...

    Ext学习文档--转载整理

    Resources目录则包含了EXT运行所需的图片资源和CSS样式文件,其中ext-all.css是基础样式文件,定义了EXT的默认样式。此外,还有三种主题样式文件(xtheme-aero.css、xtheme-gray.css、xtheme-vista.css),可供...

    解决vue打包后vendor.js文件过大问题

    随着项目规模的扩大,这些依赖包最终会被打包到vendor.js中,导致这个文件体积过大,影响页面的加载速度。文章《解决vue打包后vendor.js文件过大问题》为我们提供了一系列解决方案,旨在减小vendor.js文件的大小,...

    带收藏转载的jquery瀑布流.zip

    瀑布流的核心是通过JavaScript库jQuery来处理元素的布局和动态加载。jQuery是一个轻量级的JavaScript库,简化了HTML文档遍历、事件处理、动画设计和Ajax交互。在这个项目中,jQuery用于控制页面元素的动态显示,当...

    微信防盗链JavaScript

    接着,创建一个IFrame,并将其src属性设置为一个JavaScript表达式,这个表达式会在IFrame加载完成后调整其高度以适应图片的高度。最后,原图片被移除,IFrame替代了原图片的位置,这样图片就能在外部环境中正常显示...

    query-zTree的基本用法(转载)

    通过配置`async`参数,并在`callback`中定义`beforeAsync`和`onAsyncSuccess`等回调函数,实现按需加载。 ### 8. 复选框功能 若需要启用复选框功能,需在`setting`中配置`check`参数,并在`zNodes`中为节点添加`...

    vue在index.html中引入静态文件不生效问题及解决方法

    在Vue.js项目开发中,有时候我们会在`index.html`文件中尝试引入静态资源,如CSS、JavaScript或图片等。然而,遇到"Resource interpreted as Stylesheet but transferred with MIME type text/html"这样的警告,意味...

    农历支持的Js控件

    在实际应用中,你可以通过引入该Js控件的JS文件,然后调用其提供的方法来实现在网页上添加农历日期的功能。例如,你可能需要设置初始日期、监听日期改变事件、自定义日期显示格式等。同时,为了确保版权合规,如果是...

    xml 解析,下边是位哥们的全新奉献,这里我转载了,谢谢这位哥们。。

    - form_xml.js:这是一个JavaScript文件,可能包含了处理XML数据的脚本。JavaScript提供了DOMParser和ActiveXObject(IE特有)等API,用于解析XML。通过这些API,开发者可以动态地读取、修改XML文档,并在网页上显示...

    js css 图片浏览

    - `js`目录可能包含实现图片浏览逻辑的JavaScript文件。 综上所述,这个项目是一个使用JavaScript和CSS构建的图片浏览应用,它可能具有响应式设计,能实现平滑的过渡效果,并且通过高效地利用资源来提高性能。...

    mpvue 页面预加载新增preLoad生命周期的两种方式

    在这个main.js文件中,我们执行了app=new Vue(app),并且这个app会被push到小程序页面堆栈中。小程序的页面跳转会触发相应App实例中的生命周期函数。因此,我们可以在初始化时对App实例进行全局存储,并在页面跳转时...

    vue 引用自定义ttf、otf、在线字体的方法

    6. 进行字体加载测试,确保字体按预期显示。 通过以上步骤,我们可以将自定义字体成功引入到Vue项目中,并应用于不同的页面元素,从而增强网站的视觉效果和品牌形象。 以上所述就是关于Vue引用自定义ttf、otf、...

    小程序UI库 转载

    3. 应用组件:在小程序的WXML文件中,按照库提供的示例代码添加所需的组件,通过设置不同的属性来满足个性化需求。 4. 自定义样式:如果需要进一步定制,可以使用 scoped 样式或自定义类名,覆盖库中的默认样式,以...

Global site tag (gtag.js) - Google Analytics