首页 > 其他分享 >面试-运行环境-网页渲染

面试-运行环境-网页渲染

时间:2024-09-13 16:53:19浏览次数:10  
标签:网页 渲染 样式 面试 浏览器 加载 CSS 页面

  • 网页加载过程
    网页是如何加载并渲染出来的

从输入url到渲染出页面的整个过程(经典题来了)

  1. 资源有哪些形式

  2. 加载的大致过程

    请求啥就是返回啥,图片、音频都有可能。请求的是页面则返回HTML代码。

  3. 渲染过程-①

    Render Tree:渲染树,每个节点挂了很多CSS属性,这样就能渲染

渲染过程-②

之前提到过,JS的线程和渲染过程是共用一个线程的。遇到<sript>停止渲染是因为有可能script里面的JS内容改变了原先渲染的结构。

思考:为何建议把css放在head中?

我们从页面渲染顺序、网页加载速度和用户体验三个方面来考虑。
假如不放在head里面,

浏览器加载页面时,会从上到下解析 HTML 文档,在解析到 标签时,会去加载相应的 CSS 文件。如果将 CSS 文件放在 <head> 中,浏览器会在开始渲染页面之前先下载并应用 CSS 样式,从而确保页面在首次显示时已经应用了所有样式。
如果把 <link> 标签放在页面底部,浏览器可能会先加载和渲染 HTML 内容,再去加载 CSS 文件,这会导致页面内容在无样式的情况下先被展示,然后突然跳转到带样式的状态,给用户带来不好的“闪烁效应”或“页面重绘”的体验。

CSS 文件是阻塞渲染的资源。当浏览器遇到 引用的 CSS 文件时,会暂停页面的渲染,直到 CSS 文件加载完毕并应用。把 放在 <head> 中,浏览器会尽早加载和应用 CSS 样式,确保页面能够在样式生效后显示。
如果把 放在页面底部,浏览器可能会先呈现没有样式的内容,用户看到的页面在样式加载完成前是无格式的。影响用户体验,也可能导致页面出现闪烁现象。

大多数浏览器都遵循“先样式后内容”的原则,这样可以避免页面在渲染时发生布局变化(内容重排),这对性能和用户体验都有好处。


上面的示例展示了为什么遇到了script标签要停下来,先去加载执行JS代码,因为上面的JS代码恰好改变了container。
思考:为何建议把JS放在body最后?

· (阻塞页面渲染)JavaScript 文件的加载和执行是 阻塞 的。也就是说,当浏览器解析 HTML 文件时,遇到 <script> 标签时,浏览器会停止解析 HTML,先去加载并执行这个 JavaScript 文件,然后才会继续解析页面剩余的内容。这就可能导致页面的其他部分(特别是内容和样式)在 JavaScript 文件加载和执行完成之前无法显示出来。
·(让页面内容优先显示)
确保在 JavaScript 加载和执行之前,页面的内容已经全部加载并显示给用户。这样即使 JavaScript 还没有加载完,用户也能先看到页面的内容,用户体验不会受到太大影响。
· 提升页面加载速度and用户体验


中间有img,不会阻塞DOM渲染过程。

window.onload 和DOMContentLoaded

window.onload 只有当页面的所有资源都加载完毕(包括图片、CSS 文件、JavaScript 文件等)之后才会触发。

DOMContentLoaded 事件在 HTML 文档 被完全加载和解析完成之后触发,而不需要等待其他资源(如样式表、图片等)加载完成。因此,它的触发时机要比 window.onload 更早。

  • 性能优化(卡顿、更快)
  • 安全(攻击) (见下篇)

标签:网页,渲染,样式,面试,浏览器,加载,CSS,页面
From: https://www.cnblogs.com/gardenOfCicy/p/18412487

相关文章

  • Java面试随手记3
    一、面试题总结31、mysql中char和varchar的区别?特性charvarchar存储方式定长,长度不足时填充空格可变长,按实际长度存储存储效率固定空间,浪费内存根据实际长度动态分配性能较高,适合固定长度数据稍低,适合不定长度数据适用场景固定长度的字符串不定长度的字符串空格处理自动去......
  • 面试-JS Web API - 存储
    cookieHTML5存储(localStorage和sessionStorage)cookiecookie本身用于浏览器和server通讯的,被借用到本地存储来。可以用document.cookie来修改。同一个变量会覆盖,不同变量会追加。localStorage和sessionStorage//保存数据到localStoragelocalStorage.getItem('a......
  • 面试004
    1、自动化测试框架具体如何实现介绍整体技术名词:框架使用到了pytest、allure、jsonpath等技术实现框架搭建框架底层执行逻辑:根据执行选项读取测试用例信息Pytest插件用于读取测试用例信息并根据需要动态生成测试用例。最终按照编写的测试用例流程模板,执行用例具体执行......
  • 第一章 网页制作的基础知识
    1.1认识网页和网站1.1.1网页、网站网页和网站(Web站点)的区别:网页是一页两页,网站是可跳转,多网页,网页和网站不是总分关系,网页只是网站的基本信息单位,超链接将站点中的一个或多个网页连接成为一个便于浏览的有机整体。eg.网站除了网页还有其他东西,如:服务器、域名...常用术语......
  • 面试-JS Web API-Linux命令
    关键Linux命令虽然前端开发者不需要掌握Linux的所有命令,但以下基本的命令对日常工作是非常有用的:文件和目录管理ls:列出当前目录下的文件和文件夹。lsls-l#显示详细信息ls-a#显示隐藏文件cd:切换目录。cd/path/to/directorycd..#返回上一级目录pwd:显......
  • 面试官:线程池遇到未处理的异常会崩溃吗?
    首先,这个问题考察的是你对线程池execute方法和submit方法的理解,在Java线程池的使用中,我们可以通过execute方法或submit方法给线程池添加任务,但如果线程池中的程序在执行时,遇到了未处理的异常会怎么呢?接下来我们一起来看。1.execute方法execute方法用于提交一个不需要......
  • Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sq
    前言我在上一篇文章中《Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用(text2sql)》利用langchain中create_sql_agent创建一个数据库代理智能体,但是实测中发现,使用create_sql_agent在对话中,响应速度太慢了,数据的表越多,对话响应就越慢,这次本篇文章l......
  • 面试- JS Web API - ES6模块化
    ES6模块化的基础概念ES6模块化的核心在于两个关键字:export和import。export:用于将模块中的变量、函数、类等导出,供其他模块使用。import:用于从其他模块中导入需要的功能。2.模块的导出(export)ES6提供了两种导出方式:命名导出(NamedExports)和默认导出(DefaultExport)。......
  • 面试-JS Web API-开发环境
    git调试工具抓包webpackbabellinux常用命令(测试机)git最常用的代码版本管理工具大型项目需要多人协作开发,必须熟用嗷~git服务端常见的有github、coding.net等gitinit这个命令用来初始化一个Git仓库。一般在新项目开始的时候执行。gitclone从远程仓库复......
  • CTF/5/利用python自动请求网页
    最后编辑时间:2024-09-1309:23:09星期五利用python自动请求网页(面向CTF)前置知识:PythonHTMLBurp(或者任何一个你趁手的抓包软件)VSCode(或者任何一个你熟悉的编辑器)浏览器开发者模式(F12)POST请求和GET请求shell/cmd使用搭建web服务器基础为什么我们需要利用python来进......