zoukankan      html  css  js  c++  java
  • ~随笔B022~浏览器加载页面时,对用户提示loading...

      在系统研发过程中,为提供更好的用户体验,在网络不佳或者,后端逻辑需要花费较长时间处理时,各PC/APP会给用户提示loading...

      

      一.实现逻辑。

      loading.show()当前HTML页面加载完毕loading.hide()——>用户点击操作按钮loading.show()——>后端逻辑处理,封装页面数据——>指定下一个HTML页面

      1.我们平时在浏览百度等网页时会发现,有时会有空白页的显示。打开检查,就知道,这是这并不是什么都没有,其中包含html页面的header部分。

      此时,是后端逻辑已处理完毕且浏览器去服务器端加载相应的css渲染或js,尚未解析body部分。

      2.代码部分。

      将写好的loading.html页面引入到各个需要提示加载中页面的<head>首行,或更前部分,如下

      原理:当浏览器加载当某html页面时,会首先解析其<head>部分,如果我们把页面<#include "common/loading.html">到当前html中,则浏览器会将其预加载到<body>部分,即可给用户显示加载中的样式。——>当页面加载完毕后,将加载提示隐藏

    <!DOCTYPE html>
    <html>
        <head>
            <link rel="stylesheet" type="text/css" href="/css/style.css"/>
            <#include "common/loading.html">
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <title>访视</title>
            <script src="/js/flexible.js"></script>
            <link rel="stylesheet" type="text/css" href=" /css/commons.css"/>
            <link rel="stylesheet" type="text/css" href=" /css/interview.css"/>
            <link rel="stylesheet" type="text/css" href="${req.contextPath}/js/layui/css/layui.css"/>
            <link rel="stylesheet" type="text/css" href="${req.contextPath}/plugin/pagination/pagination.css" /> 
            <script src="/js/jquery-1.11.3.js" type="text/javascript" charset="utf-8"></script>
            <script src="/js/layui/layui.all.js" type="text/javascript" charset="utf-8"></script>
            <script type="text/javascript" src="${req.contextPath}/plugin/nicevalidator/jquery.validator.min.js?local=zh-CN"></script>
            <script type="text/javascript" src="${req.contextPath}/plugin/pagination/jquery.pagination.js"></script>
            <script src="/js/index.js" type="text/javascript" charset="utf-8"></script>
            <script src="/js/interview.js" type="text/javascript" charset="utf-8"></script>
    二.相关资料
    JavaScript的单线程:
    JS语言的一大特点就是单线程,也就是说,同一个时间只能做一件事情。之所以是单线程,是因为与它的用途有关,作为浏览器脚本语言,JS的主要用途是与用户互动以及操作DOM。这决定了它只能是单线程,否则会带来复杂的同步问题。为了利用多核CPU的计算功能,HTML5提出了web worker标准,允许JS脚本创建多个线程,但是子线程完全受主线程控制,且不能操作DOM,所以这个新标准并没有改变JS单线程的本质。

    加载过程中遇到外部css文件,浏览器另外发出一个请求,来获取css文件。
    遇到图片资源,浏览器也会另外发出一个请求,来获取图片资源。这是异步请求,并不会影响html文档进行加载,但是当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。

    原因:JS有可能会修改DOM,最为经典的document.write,这意味着,在JS执行完成前,后续所有资源的下载可能是没有必要的,这是js阻塞后续资源下载的根本原因。
    办法:可以将外部引用的js文件放在</body>前。

    虽然css文件的加载不影响js文件的加载,但是却影响js文件的执行,即使js文件内只有一行代码,也会造成阻塞。

    原因:可能会有 var width = $('#id').width(),这意味着,js代码执行前,浏览器必须保证css文件已下载和解析完成。这也是css阻塞后续js的根本原因。
    办法:当js文件不需要依赖css文件时,可以将js文件放在头部css的前面。

  • 相关阅读:
    作业2 身份认证(正心13)
    ubuntu16内核升级过程遇到的问题
    「」
    「loj
    「一个经典问题的另一个推导方法」
    「loj
    「XXI Opencup GP of Tokyo」 Count Min Ratio
    「codeforces
    「codeforces
    「Dominator Tree」
  • 原文地址:https://www.cnblogs.com/gaojl/p/9272359.html
Copyright © 2011-2022 走看看