Engee 文档

生命周期和 Stipple 应用程序的各种事件

1.同步请求 — 服务器端响应

  • 浏览器向 URL 发出请求

  • 请求由相应的`route` 处理,并执行`route` 处理程序

  • 准备初始响应/负载,即合成 HTML 页面并注入所有 JS 脚本/文件

  • 在此,我们创建模型的新实例,附加处理程序,并调用`Stipple.init(ModelType)` (因为`Stipple.init` 的结果实际上是一个 JS 文件,其中包含模型的 JS/Vue.js 版本)

  • 在这一阶段,开发人员可以根据需要添加各种条件逻辑来定制 HTML 响应

  • Stipple.init 生成的模型的 JS/Vue.js 版本是基于 Julia 模型类型的,而不是基于实例的,因为 JS 资产的设计目的是通过 CDN 进行缓存和服务,所以我们不希望对 JS/Vue.js 模型文件进行定制—​它将始终反映 Julia 模型的默认状态,并且对所有用户都是一样的。

  • 完成所有这些步骤后,生成的 HTML 响应将发送到浏览器

2.客户端渲染

  • 浏览器接收 HTML 响应并进行渲染

  • 浏览器加载与初始响应捆绑在一起的所有 JS 文件并执行它们

3.执行 JS — 客户端

  • 当浏览器渲染页面时,HTML 响应中包含的 JS 将被执行

  • 加载 Vue.js,并将在 JS/Vue.js 模型中传递的数据应用到页面上的 HTML 元素(例如,所有绑定,如`@text` 、@bind ;逻辑,如`@iif` 、@recur 等,以及各种元素的所有动态道具)

  • 建立与服务器的连接(如果有 WebSockets,则通过 WebSockets;如果没有 WebSockets,则使用 Ajax 推/拉)。

  • 连接成功建立后,触发`isready` 事件,使 Julia 模型的`isready` 属性切换为 true

4.异步请求 — 服务器端响应

  • 当数据通过异步连接与前端交换时,Julia 模型的各种属性会发生变化,从而触发处理程序—​从自动触发的`isready` 事件开始

  • 开发人员围绕这些变化处理程序实现逻辑,响应事件并与前端交换数据

  • 此时,我们不能再发送 HTML 有效载荷(因为那是 1 的初始 HTML 响应的一部分,而且连接已经关闭)--我们只能更新模型的属性(通过异步连接),这些属性会被推送到前端,导致用户界面更新以反映这些变化。

  • 然而,这并不一定是一种限制,因为我们可以将元素的 HTML 内容绑定为动态内容,然后更新它,甚至可以发送一个要在前端执行的 JS 有效负载(这样我们就可以有效地从 Julia 后台向页面注入并执行 JS 逻辑)。