第二章 运行时的页面构建过程

1、客户端 Web 应用的生命周期

客户端 Web 应用的生命周期从用户指定某个网站地址(或单击某个链接)开始

其由两个步骤组成:页面构建和事件处理

  页面构建 —— 创建用户界面

  事件处理 —— 进入循环(序号5)从而等待事件(序号6)的发生,发生后调用事件处理器

2、页面构建阶段

页面构建阶段从浏览器接收页面代码开始

其执行分为两个步骤:

  (1)、解析 HTML 代码并构建文档对象模型(DOM)

  (2)、执行 Javascript 代码

步骤 1 会在浏览器处理 HTML 节点的过程中执行

步骤 2 会在 HTML 解析到一种特殊节点 —— 脚本节点时执行

页面构建阶段中这两个步骤会交替执行多次

3、在页面构建阶段执行 JavaScript 代码

当浏览器在页面构建阶段遇到了脚本节点,它会停止 HTML 到 DOM 的构建,转而开始执行 JavaScript 代码

这个例子中,JavaScript 通过创建一个新元素并将其插入 DOM 节点修改了当前的 DOM 结构

一般来说,JavaScript 代码能够在任何程度上修改 DOM 结构:它能创建新的节点或移除现有 DOM 节点

但它依然不能做某些事情,例如选择和修改还没有被创建的节点

这就是为什么要把 script 元素放在页面底部的原因。如此一来,我们就不必担心是否某个 HTML 元素已经加载为 DOM

关于下划线

  浏览器接收的 HTML 代码用作创建 DOM 的蓝图,我们使用 Javascript 代码来动态地修改 DOM 以便给 Web 应用带来动态行为。

4、事件处理

客户端 Web 应用是一种 GUI 应用,也就是说这种应用会对不同类型的事件作响应,如鼠标移动,单击和键盘按压等。

因此,在页面构建阶段执行的 JavaScript 代码,除了会影响全局应用状态和修改 DOM 外,还会注册事件监听器(或处理器)。这类监听器会在事件发生时,由浏览器调用执行。

有了这些事件处理器,我们的应用也就有了交互能力。

5、处理事件

在事件处理阶段中,事件循环会检查队列,其发现队列的前面有一个鼠标移动事件,然后执行了相应的事件处理器序号2。

当鼠标移动事件处理器处理完毕后,轮到了等待在队列中的单击事件。

当鼠标移动事件处理器函数的最后一行代码执行完毕后,JavaScript引擎退出事件处理器函数,鼠标移动事件完整地处理了序号3,事件循环再次检查队列

这一次,在队列的最前面,事件循环发现了鼠标单击事件并处理了该事件,一旦单击处理器执行完成,队列中不再有新的事件,事件循环就会继续循环,等待处理新到来的事件。这个循环会一直执行到用户关闭了 Web 应用。

图片来自:JavaScript忍者秘籍(第2版)

原文地址:https://www.cnblogs.com/drink/p/9034185.html

时间: 2024-10-05 09:43:37

第二章 运行时的页面构建过程的相关文章

Delphi知识点与技术概述【第二章 运行时库(RTL)】

内容提要: *RTL概述 运行时库简称RTL,是一个非常庞大的函数集合. RTL的单元 SysUtils与SySConst单元 Sysconst单元定义了一些由其他RTL单元显示消息的常量字符串,这些字符串用resourcestring关键字来声明,并保存在程序资源中.它一些特性我们经常使用,如:IntToStr或Format,windows版本信息等. 时间日期操作,不会引起异常. TryStrToDate 将字符串转换为日期 TryEncodeDate 对日期进行编码 TryEncodeTi

第24章 运行时序列化

什么是序列化和反序列化 序列化(serialization)是将一个对象或者对象图(对象在特定的时间点的一个视图)转换成一个字节流的过程.反序列化(deserialization)是将一个字节流转换回对象图的过程. 应用场景: 应用程序的状态(对象图)可以保存到磁盘文件或数据库中,并在应用程序下次运行时恢复. 一组对象可以轻松复制到Windows 窗体的剪贴板中,再粘贴回同一个或者另一个应用程序. 将对象按值从一个应用程序域中发送到另一个程序域 24.1 序列化/反序列化快速入门 http://

android apk 防止反编译技术第二篇-运行时修改字节码

上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止apk反编译的技术-运行时修改字节码.这种方法是在工作中在实现app wrapping时,看到国外的一篇关于android 安全的介绍实现的并且独创.下面我们来介绍一下这种方法. 我们知道apk生成后所有的java生成的class文件都被dx命令整合成了一个classes.dex文件,当apk运行时d

android apk 防止反编译技术第二篇-运行时修改Dalvik指令

上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止apk反编译的技术-运行时修改字节码.这种方法是在工作中在实现app wrapping时,看到国外的一篇关于android 安全的介绍实现的并且独创.下面我们来介绍一下这种方法. 我们知道apk生成后所有的java生成的class文件都被dx命令整合成了一个classes.dex文件,当apk运行时d

第二章 使用CSS控制页面

本章主要介绍:如何使用CSS控制页面,以及其控制页面的各种方法,包括行内样式.内嵌式.链接式和导入式等,最后讨论各种方式的优先级问题 1.行内样式 行内样式是所有样式方法中最为直接的一种,直接对HTML的标记使用Style属性,然后将CSS代码直接写在其中. <html> <head> <title> 页面标题</title> </head> <body> <p style="color:#ff0000;font-si

ART运行时垃圾收集(GC)过程分析

ART运行时与Dalvik虚拟机一样,都使用了Mark-Sweep算法进行垃圾回收,因此它们的垃圾回收流程在总体上是一致的.但是ART运行时对堆的划分更加细致,因而在此基础上实现了更多样的回收策略.不同的策略有不同的回收力度,力度越大的回收策略,每次回收的内存就越多,并且它们都有各自的使用情景.这样就可以使得每次执行GC时,可以最大限度地减少应用程序停顿.本文就详细分析ART运行时的垃圾收集过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! ART运行

linux下实现在程序运行时的函数替换(热补丁)【转】

转自:http://www.cnblogs.com/leo0000/p/5632642.html 声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的.也正因为这些错误,加深了我的学习深度. 最近因为在学习一些调试的技术,但是很少有提到如何在函数运行时实现函数替换的. 为什么会想到这一点?因为在学习调试时,难免会看到一些内核方面的调试技术,内核中的调试

谈谈Android 6.0运行时权限理解

前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6.0出来,使得用户权限授权变得合理.这可能也是参考IOS系统的,只有在用户需要使用权限的时候,才去授权请求,这样做的目的是提高用户体验,当然,用户感觉好了,受苦的是我们开发人员,原来的规则不适用了,现在我们去适应新的规则,毕竟是靠谷歌这颗大树吃饭的嘛. 原来权限模型 在Android 6.0版本之前,

Android6.0运行时权限(基于RxPermission开源库)

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 在6.0以前的系统,都是权限一刀切的处理方式,只要用户安装,Manifest申请的权限都会被赋予,并且安装后权限也撤销不了. Android 6.0 采用新的权限模型,只有在需要权限的时候,才告知用户是否授权:是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权限申请. 判断是否是需要运行时权限的标记就是targetSDKVersion. 当targetSDKVersi