实现页面异步加载

应用场景

平时我们用的最多的网页加载方式就是同步加载模式,也称阻塞模式,这种模式虽然安全,但是对于设计比较繁琐的网页采用同步加载会使网页的加载时间大大加长,所以也就出现了下面用到的异步加载模式。

使用

异步加载可以使用 XHR Injection、 XHR Eval、 Script In Iframe、 Script defer属性、 document.write(script tag)等,我当前采用的的是Script DOM Element方法,也就是动态向页面创建script标签异步加载JS脚本。

代码

  • 效果实现

  • 代码
var init = {
    menu: $(".menu li"),
    content: $(".content li"),
    js0: true,
    initSwitch: function() {
        var _self = this;
        this.menu.on('click', function() {
            var _index = $(this).index();
            if(!_self['js' + _index]) {
                console.log('script is loading...')
                _self.asyncScript("js/module" + (_index + 1) + ".js", function() {
                    console.log('script is loaded.')
                    _self['js' + _index] = true
                });
            }
            console.log('switch:'+_index)
            _self.menu.removeClass('mu-act').eq(_index).addClass('mu-act');
            _self.content.removeClass('cont-act').eq(_index).addClass('cont-act');
        })
    },
    asyncScript: function(urls, callback) {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.async = true;
        script.src = urls;
        if(script.readyState) { //IE
            script.onreadystatechange = function() {
                if(script.readyState == "loaded" || script.readyState == "complete") {
                    script.onreadystatechange = null;
                    if(callback) callback()
                }
            };
        } else { //Others
            script.onload = function() {
                if(callback) callback()
            }
        }
        document.getElementsByTagName("body")[0].appendChild(script);
    }
}
init.initSwitch()

原理实现

主要原理就是首次加载只加载所需脚本文件,首次切换其他页面时,动态加载所需脚本,并标识已加载防止重复加载,异步回调方法可以在脚本加载完成时执行相关操作。

GitHub 源文件

https://github.com/lizhixuan1/JavaScript/tree/Async-Load



需要的朋友可以参考,如有不足,欢迎交流评论

原文地址:https://www.cnblogs.com/lizhixuan/p/9503391.html

时间: 2024-10-29 06:03:57

实现页面异步加载的相关文章

SpringMVC+Jquery -页面异步加载数据

背景: 做项目时涉及到页面,当我打算在controller中传一个list到页面,然后通过<c:foreach>循环遍历出来时,同事说:你这样每次都要刷新,这都是几百年前使用的技术了.你用post实现异步加载数据.然后就...... ResultUtil.java 工具类: package com.sgcc.uds.fs.config.web.util; import java.util.HashMap; import java.util.Map; import net.sf.json.JSO

ajax页面异步加载的使用

使用ajax非常简单,通常有两种方法:(一般见第一种使用情况最多,也比较方便) 1.JQuery下的ajax调用 function() { .ajax({ type:"POST",   //不同元素使用逗号隔开 url:http://www.baidu.com/Home/Index data:{userName:"Danny",password:"123"}, success:function(){ ...请求成功 } error:functio

javascript脚本异步加载的几种方式

一般而言,javascript脚本一般是建议放在body标签的底部,因为使用script标签加载js时,会停止加载后面的内容而停下来解析脚本并对页面进行渲染,使用src属性加载外部脚本也会造成这样的情况,这样的话,如果在head或者body的前面放入过多的script标签,并且内容很多的时候,会造成页面在解析完所有script标签的内容前有短暂的时间整个页面空白,给用户的体验会很差.但是如果所有的脚本都放在底部,又会造成dom加载完毕后有一段时间页面虽然能看到,但是和用户的交互却很差,因此需要让

关于页头页尾的异步加载

在网站中许多页面的页头页尾,都是一样的.采用异步加载,减少代码复用率: 采用PHP+html+jQuery 方法: 1.在名为header.php的页面中:写入页头部分的html <?php header('Content-Type:text/html;charset=UTF-8;'); ?> <div id="top"> <p>页头部分html代码</p> </div> 2.在页面中index.html中:指定要引入页头的位

页面优化——js异步加载

同步加载 在介绍js异步加载之前,我们先来看看什么是js同步加载.我们平时最常使用的就是这种同步加载形式: <script src="http://XXX.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像).渲染.代码执行.一般的script标签(不带async等属性)加载时会阻塞浏览器,也就是说,浏览器在下载或执行该js代码块时,后面的标签不会被解析,例如在he

artdialog 异步加载页面 生成验证码

artdialog  异步加载一个页面 需求:例如现在好多网站的登录或注册 都是点击弹出一个层出来 然后在上面登录.注册 这个登录可能在网站的每个页面都会有,但是我们又不能在每个页面都这一段html加载出来不显示,到需要用的时候,在给shou出来,这样做于情于理都说!不!!过!!!去!!!!!! 恰好以前接触过artdialog  不多说上代码,(注意思维,代码是死的方法是活,解决需求不一定非要这个方法 ) 1.页面html代码 1 <head runat="server">

淘宝购物车页面 智能搜索框Ajax异步加载数据

如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区非常的活跃,许多朋友都在不同地方分享了很多优秀的插件.我在相关的网站上找过想实现类似功能的插件,但是没有找到.于是乎,自己动手丰衣足食.自己来搭建智能搜索框下拉列表.当然,如果有类似功能并且常维护Bug的插件,望留言交流. 源码地址: 淘宝购物车页面--PC端和移动端项目实战 首先需要先给大家打一根

【Android】纯代码创建页面布局(含异步加载图片)

开发环境:macOS 10.12 + Android Studio 2.2,MinSDK Android 5.1 先看看总体效果 本示例是基于Fragment进行的,直接上代码: [界面结构] 在 Fragment 中,采用 ScrollView + LinearLayout 实现. 1 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http:/

使用Ajax异步加载页面时,怎样调试该页面的Js

前言-本人不是干前端的,所以有的名词不专业 在前端中,有时候会遇到这样的框架,http://172.17.11.151:8060/frontend/backend.html#1.html (通过解析URL,把1.html异步加载到指定位置),不知道这样的框架叫什么名字. 那我们就会遇到一个问题,调试1.html的时候怎么办,通过浏览器掉出控制台找不到1.Html页面,无法加断点啊. 解决办法 在1.html 你所要调试位置加上一句代码  debugger;  就可以了,就是这么爽 可以调试了,可