web 应用实战第2课:静态网站的全生命周期实践 | 学习笔记

简介: 简介:快速学习 web 应用实战第2课:静态网站的全生命周期实践

开发者学堂课程【云开发 Web 应用训练营:web 应用实战第2课:静态网站的全生命周期实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/911/detail/14414


web 应用实战第2课:静态网站的全生命周期实践

目录:

一.开发简单的静态应用页面

二.head 内的配置

三.静态网站

四.静态网站自动部署到云存储

五.提醒

六. Active 阶段

七.Passive 阶段

八.Hidden 阶段

九.Terminated 阶段

十.Frozen 阶段

十二.Discarded 阶段

十三.常见场景

十四.事件


一.开发简单的静态应用页面

if(path--'/'){

modulePath . codePath + '/index.html';fileExt . 'html';

if( !fs. existsSync(modulePath)){

modulePath . codePath + . /index. htm' ;if(!fs. existsSync(modulePath) ){

modulePath . codePath + " /default html' ;if( !fs. existsSync (modulePath) )4.

modulePath . codePath + '/defáult. htm';

}

}

}

var fileResponse ={

isBase64Encoded: true,

statusCode: 200,

headers: {

"Content-type": NIME[fileExt)

},

body: Buffer. from(data) . toString("tase64")

}

callback(null, fileResponse);return;

空应用最简单的应用方案

部署日常环境

进入应用列表创建应用

开发最简单的静态网站

所有的请求都是 serverless.js(函数)来处理

点击新建文件 index.htm 文件

插件提供部署功能和测试功能

调制的相关日志可以在控制台输出

当请求的路径是根路径,会默认寻找根目录的 index.html 的文件。

在空应用中创建 index.html

只需要将代码拖拽到到文件模块。即可上传,覆盖之前的文件

测试域名只能在当前浏览器使用

部署日常环境,直接点击部署

二级域名绑定到开发者域名,在应用配置中绑定域名

应用列表点击环境开关。点击关闭验证下线,停止服务,成功下线即可删除应用


二.head 内的配置

1、title 网页标题

2、标签页 icon 图标

图标的文件名要求以 favicon.ico 命名,文件需要与 index.html 文件同级存储

使用方法:

<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"

3、CSS 分级引入

css 文件设置需要根据功能进行分层管理:目的是为了提取出多个页面公共的部分,提供多个 HTML 同时引用。

公共的部分也可以划分范围:有的是所有网站能用的,有的是某几个网站公共的部分

CSS 常见的分层组织:清除默认样式的 CSS 、网站的公共样式 CSS 、每个页面独有的 CSS

注意书写顺序,引入多层 css 时,需要按照后面的层叠前面的 css 进行设置,使用页面独有的样式层叠公共的样式

4、清除默认样式

使用范围:所有的网站都能用

命名的习惯:reset.css

引入时作为第一层引入

注意:reset.css 文件写完后不允许再次更改

5、公共样式

使用范围:单独的一个网站所有的页面、几个页面

制作方法:找到公共部分,划分成不同的模块分别进行 .css 文件的书写

命名习惯:common.css 或者模块名 .css

公共文件中的类名一般不要在其他的 css 文件中再用

引入顺序:一般在 reset.css 的后面,单独样式文件的前面

6、页面独有样式

使用范围:单独的一个 HTML 页面

命名习惯:一般与 HTML 的文件名保持一致,如果拆分的更细致可以使用多个单词的拼写,例如 index_banner.css

引入顺序:所有公共样式的后面

注意:使用单独样式文件去层叠前面公共样式时,需要注意选择器权重


三.静态网站

目前,静态网站有 2 种:

无内容的单页应用(SPA):React/VUE 等框架开发的应用;

有内容的 HTML:手写或「程序生成 HTML」;

警告:React/VUE SPA 不带内容,难以被搜索引擎收录,不适合作为公司官网、博客。如果有 SEO 需求,推荐使用 MkDocs、Hexo、VUE Nuxt、React Next。


四.静态网站自动部署到云存储

通过「持续集成」生成 HTML,自动部署到「云存储」,变成静态网站。

1、在「腾讯云 对象存储 COS」中创建一个「公有读私有写」的「存储桶」,并在设置中开启「静态网站」,获得分配的二级域名「访问链接」。

为下线不可删除应用

可以在测试环节先上线,测试稳定后,愈发测试,最后正式上线。

image.png

2、把项目代码推送到「CODING 代码仓库」,在「CODING 持续集成」中创建一个构建计划,选择「构建并上传到腾讯云 COS」模板,填入「腾讯云 COS 访问密钥」等信息,根据自己的代码框架修改编译命令。

创建后会自动触发构建,等待构建成功,访问分配的链接即可看到网站。

下次推送代码即可自动部署。

3、如果你的域名已备案,则可在「腾讯云 对象存储」的设置中绑定「自定义加速域名」,会提示开通「内容分发网络 CDN」,小型网站推荐选择「按使用流量计费」(每月赠送 10GB,一般用不完),将会获得一个 CNAME。

image.png

4、在「DNS 解析」中设置 www 和 根域名,确保两者皆可访问,并且二选一进行跳转避免影响 SEO,推荐 2 种方案:

此域名无邮箱:根域名指向 CDN,www 跳转到根域名,本文采用此方案,把 www.devops.host 跳转到了 devops.host

此域名有邮箱:www 指向 CDN,根域名跳转到 www

image.png

5、在「内容分发网络 CDN」——「域名管理」——某个域名——「高级设置」——「HTTPS 配置」中,申请免费的 HTTPS 证书,并开启「HTTPS 回源」、「强制跳转 HTTPS」和「HTTP 2.0」。

image.png

6、开通「腾讯云 云函数 SCF」,按照文档「使用 SCF 自动刷新被 CDN 缓存的 COS 资源」上传代码。

image.png


五.提醒:

如果网站面向中国境内用户,需要进行域名备案,然后才能绑定到境内的云存储/CDN 。本文以腾讯云为例,其他云计算厂商的流程也类似。

如果网站面向中国境外用户,可直接使用境外云存储/CDN 搭建静态网站。

Jenkinsfile

pipeline {

agent any

stages {

stage('检出') {

steps {

checkout([$class: 'GitSCM',

branches: [[name: env.GIT_BUILD_REF]],

userRemoteConfigs: [[

url: env.GIT_REPO_URL,

credentialsId: env.CREDENTIALS_ID

]]])

}

}

stage('安装依赖') {

steps {

sh 'npm i -g lint-md-cli'

sh 'pip install mkdocs'

}

}

stage('检查书写规范') {

steps {

sh 'lint-md docs/'

}

}

stage('编译') {

steps {

sh 'mkdocs build'

}

}

stage('上传到 COS Bucket') {

steps {

sh "coscmd config -a ${env.COS_SECRET_ID} -s ${env.COS_SECRET_KEY}" +

" -b ${env.COS_BUCKET_NAME} -r ${env.COS_BUCKET_REGION}"

sh 'coscmd upload -r ./site/ /'

echo "预览 https://${env.COS_BUCKET_NAME}.cos-website.${env.COS_BUCKET_REGION}.myqcloud.com/"

}

}

}

}


六. Active 阶段

在 Active 阶段,网页处于可见状态,且拥有输入焦点。


七.Passive 阶段

在 Passive 阶段,网页可见,但没有输入焦点,无法接受输入,UI 更新(比如动画)仍然在执行;该阶段只可能发生在桌面同时有多个窗口的情况。


八.Hidden 阶段

在 Hidden 阶段,用户的桌面被其他窗口占据,网页不可见,但尚未冻结;UI 更新不再执行。


九.Terminated 阶段

在 Terminated 阶段,由于用户主动关闭窗口,或者在同一个窗口前往其他页面,导致当前页面开始被浏览器卸载并从内存中清除;注意,这个阶段总是在 Hidden 阶段之后发生,也就是说,用户主动离开当前页面,总是先进入 Hidden 阶段,再进入 Terminated 阶段。

这个阶段会导致网页卸载,任何新任务都不会在这个阶段启动,并且如果运行时间太长,正在进行的任务可能会被终止。


十.Frozen 阶段

如果网页处于 Hidden 阶段的时间过久,用户又不关闭网页,浏览器就有可能冻结网页,使其进入 Frozen 阶段;不过,也有可能,处于可见状态的页面长时间没有操作,也会进入 Frozen 阶段。

这个阶段的特征是,网页不会再被分配 CPU 计算资源:

定时器、回调函数、网络请求、DOM 操作都不会执行,不过正在运行的任务会执行完。

浏览器可能会允许 Frozen 阶段的页面,周期性复苏一小段时间,短暂变回 Hidden 状态,允许一小部分任务执行。


十一.Discarded 阶段

如果网页长时间处于 Frozen 阶段,用户又不唤醒页面,那么就会进入 Discarded 阶段,即浏览器自动卸载网页,清除该网页的内存占用;不过,Passive 阶段的网页如果长时间没有互动,也可能直接进入 Discarded 阶段。

这一般是在用户没有介入的情况下,由系统强制执行,任何类型的新任务或 JavaScript 代码,都不能在此阶段执行,因为这时通常处在资源限制的状况下。

网页被浏览器自动 Discarded 以后,它的 Tab 窗口还是在的。如果用户重新访问这个 Tab 页,浏览器将会重新向服务器发出请求,再一次重新加载网页,回到 Active 阶段。


十二.常见场景

以下是几个常见场景的网页生命周期变化:

(1)用户打开网页后,又切换到其他 App,但只过了一会又回到网页。

-> 网页由 Active 变成 Hidden,又变回 Active。

(2)用户打开网页后,又切换到其他 App,并且长时候使用后者,导致系统自动丢弃网页。

-> 网页由 Active 变成 Hidden,再变成 Frozen,最后 Discarded。

(3)用户打开网页后,又切换到其他 App,然后从任务管理器里面将浏览器进程清除。

-> 网页由 Active 变成 Hidden,然后 Terminated。

(4)系统丢弃了某个 Tab 里面的页面后,用户重新打开这个 Tab。

-> 网页由 Discarded 变成 Active。


十三.事件

生命周期的各个阶段都有自己的事件,以供开发者指定监听函数,这些事件里面,只有两个是新定义的(freeze 事件和 resume 事件),其它都是现有的。

注意,网页的生命周期事件是在所有帧(frame)触发,不管是底层的帧,还是内嵌的帧;也就是说,内嵌的 <iframe> 网页跟顶层网页一样,都会同时监听到下面的事件:

(1)focus 事件

focus 事件在页面获得输入焦点时触发,比如网页从 Passive 阶段变为 Active 阶段。

(2)blur 事件

blur 事件在页面失去输入焦点时触发,比如网页从 Active 阶段变为 Passive 阶段。

(3)visibilitychange 事件

visibilitychange 事件在网页可见状态发生变化时触发,一般发生在以下几种场景:

用户隐藏页面(切换 Tab、最小化浏览器),页面由 Active 阶段变成 Hidden 阶段

用户重新访问隐藏的页面,页面由 Hidden 阶段变成 Active 阶段

用户关闭页面,页面会先进入 Hidden 阶段,然后进入 Terminated 阶段

可以通过 document.onvisibilitychange 属性指定这个事件的回调函数。

(4)freeze 事件

freeze 事件在网页进入 Frozen 阶段时触发。

可以通过 document.onfreeze 属性指定在进入 Frozen 阶段时调用的回调函数:

function handleFreeze(e) {

// Handle transition to FROZEN } document.addEventListener('freeze', handleFreeze); // 或者

document.onfreeze = function() { … }

这个事件的监听函数,最长只能运行 500 毫秒,并且只能复用已经打开的网络连接,不能发起新的网络请求。

注意,从 Frozen 阶段进入 Discarded 阶段,不会触发任何事件,无法指定回调函数,只能在进入 Frozen 阶段时指定回调函数。

(5)resume 事件

resume 事件在网页离开 Frozen 阶段

变为 Active / Passive / Hidden 阶段时触发。

document.onresume 属性指的是页面离开 Frozen 阶段、进入可用状态时调用的回调函数:

function handleResume(e) { // handle state transition FROZEN -> ACTIVE } document.addEventListener("resume", handleResume);

// 或者

document.onresume = function() { … }

(6)pageshow 事件

pageshow 事件在用户加载网页时触发,这时,有可能是全新的页面加载,也可能是从缓存中获取的页面;如果是从缓存中获取,则该事件对象的 event.persisted 属性为 true,否则为 false。

这个事件的名字有点误导,它跟页面的可见性其实毫无关系,只跟浏览器的 History 记录的变化有关。

(7)pagehide 事件

pagehide 事件在用户离开当前网页、进入另一个网页时触发,它的前提是浏览器的 History 记录必须发生变化,跟网页是否可见无关。

如果浏览器能够将当前页面添加到缓存以供稍后重用,则事件对象的 event.persisted 属性为 true; 如果页面添加到了缓存,则页面进入 Frozen 状态,否则进入 Terminatied 状态。

(8)beforeunload 事件

beforeunload 事件在窗口或文档即将卸载时触发,该事件发生时,文档仍然可见,此时卸载仍可取消;经过这个事件,网页进入 Terminated 状态。

(9)unload 事件

unload 事件在页面正在卸载时触发,经过这个事件,网页进入 Terminated 状态。

相关文章
|
4月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
3月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
3月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
87 1
|
4月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
112 7
|
4月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
6月前
|
存储 消息中间件 缓存
支持百万人超大群聊的Web端IM架构设计与实践
本文将回顾实现一个支持百万人超大群聊的Web端IM架构时遇到的技术挑战和解决思路,内容包括:通信方案选型、消息存储、消息有序性、消息可靠性、未读数统计。希望能带给你启发。
147 0
支持百万人超大群聊的Web端IM架构设计与实践
|
6月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
6月前
|
安全 大数据 数据挖掘
课时9:阿里云Web应用防火墙:全面保障网站的安全与可用性
阿里云Web应用防火墙(WAF)基于阿里巴巴十年攻防经验,提供全面的网站安全防护。它通过Web应用防护、CC攻击防护和业务风控,有效应对各类网络威胁,确保网站的安全与可用性。智能双引擎技术降低误报率,实时数据分析和虚拟补丁更新保障系统安全。WAF已成功护航多个重大活动,为企业提供高效、简便的安全解决方案。
137 0
|
9月前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
167 2
Web应用上云经典架构实践教学

热门文章

最新文章