1.2浏览器及其运行机制是什么?

本文深入探讨了浏览器的工作机制,从输入URL开始,详细阐述了DNS解析、TCP连接、HTTP请求的过程,以及HTML解析、CSSOM构建、渲染树生成、布局与绘制的渲染流程。还提到了JavaScript执行对渲染的影响以及浏览器的基本组成。通过理解这些步骤,有助于开发者优化网页性能。

晓看天色暮看云,行也思君,坐也思君。

                                                              -------来自女朋友的糖

前言

其实想要深入了解浏览器的运行机制,必须知其原理,否则只是死记硬背。有的小伙伴要说了,原理难道不是背的?可以说有一部分是的,无论是多高深的东西,都是由简单的东西一点一点堆砌起来的,我们要死记硬背的是那些简单的定义,由浅入深了解其原理。而要想理解而不是死记硬背其原理,我们还需要从早期的浏览器研究,因为越早期的就越不完善,看浏览器是怎么一步步优化,理解其优化的原因及其目的,我们也就理解了现在的浏览器机制。

我们先学习一些知识点,为接下来理解浏览器机制做好铺垫。

本来是都要写在本章节里的,但是发现,要陈列的知识点有点多。分章节吧,然后给链接。

流程

 

整体流程
流程中的tcp,http,ip的职责

我们根据图再详细的叙述下吧。(中间tcp都做了什么,简单参考职责图)

  • 当我们在浏览器中输入一个url,告诉浏览器我们要访问某个域名,比如:http://www.baidu.com。

由于确定具体服务器是需要靠ip地址,因此浏览器会将域名转化为IP地址。具体怎么转化呢?

  • 迭代查找每一级dns缓存,如果存在,直接建立tcp连接,发起http请求。详细步骤:

1.查找本地dns缓存,不存在则将域名发送给根域名服务器(查资料说是13台,这个不重要。只需要知道它是最最上层的,相当于户口本的户主)

2.根域名服务器将其匹配的顶级服务器地址(例如com对应的)发送给本地服务器(你的电脑),本地服务器将域名发送给该地址,查找缓存。

3.若没找到,则重复1.2步骤查找二级三级四级域名(域名等级,瞎写个:www.aaa.bbb.com,则www是四级,aaa三级,bbb二级,com顶级。如果是www.aaa.com,则www是三级,aaa是二级,com是顶级)

  • 与获得的IP地址建立TCP连接,进行三次握手
  • 向该IP地址发起http请求
  • 该服务器收到请求后,将处理结果返回给请求方(请求结果404啊,200啊等)
  • 获得该服务器的代码,下载HTML文档,同时设置缓存,断开TCP连接,四次挥手。
  • 渲染页面

到这里整体流程叙述完了?不,还没有。下载HTML文档,渲染页面的具体还没说呢。先上一段简单的代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>渲染流程</title>
    <style>
        body{
            font-size: 12px;
        }
        p{
            font-size: 16px;
        }
    </style>
  </head>
  <body>
    <div>
        <p>渲染p标签</p>
        <span>渲染span标签</span>
    </div>
  </body>
</html>
  • 第一步,下载HTML文档,生成HTML的DOM Tree

  • (具体如何生成DOM Tree,以后会补个连接)。比如代码中的:

  • 第二步,解析CSS,构建CSSOM(CSS Object Model)

 可以看到图中,body字体设置为12px,其子元素会自动级联设置为同样字体大小。这里涉及到了一个通用规则,当你为一个元素计算其最后一个样式时,则该元素的子项应用其全部样式。因此在设置完body的样式后,div、p、span的字体大小都是12px,只有当计算到p元素样式的时候,才会覆盖为16px。应用此方法迭代向下级联,知道计算完最后一个元素为止。

对了,一般的浏览器都有其默认样式,我们写的元素都会覆盖其样式,有的时候没写,而不同浏览器显示的不一样,不仅是对他们的支持不一样,还有可能时默认样式不一样

  • 第三步,合并DOM Tree和CSSOM生成Render Tree(渲染树),渲染树只包含页面的所需节点。

  • 第四步,Layout(布局)。根据Render Tree中的信息,计算出每一个元素的大小和位置,将其放在页面中

  • 第五步,Paint(绘制),就绘制到屏幕上

渲染的这五步并不是一次性顺序执行完就完了,当DOM和CSS被更改时,会重新执行渲染。那具体阻塞的规则是什么?

  • 执行JavaScript脚本会暂停解析DOM,但会预下载相关资源
  • 执行CSS会阻塞DOM渲染
  • 浏览器遇到script标签,会执行页面渲染(无defer和async),若css资源未加载完成,则等待其完成

我的理解哈,这里的阻塞解析,就是阻塞其继续读取文档;阻塞渲染就是阻塞其构建DOM Tree、CSSOM、Render Tree。

最后上一个浏览器的基本组成,应该也不用多说了,浏览器是并行执行的,并行加载资源。


好了,剩余的详细补充(具体的tcp、http,如何构建的DOM Tree、CSSOM,如何合并,如何布局?如何重绘,每一个我们看似简单的步骤,可能都有很多的人或团队付出大量心血)

我们下次再见 ,欢迎指正。求教育啊,各位小伙伴!!!!

爬虫(Web Crawler 或 Web Spider)是一种自动化的程序,用于从互联网上抓取数据。它通过访问网页、解析内容并提取所需信息来实现数据采集的目的。在 Python 中,有许多强大的库可以帮助开发者快速构建和运行爬虫程序。 --- ### 1. **什么是爬虫** #### 1.1 **定义** 爬虫是一种按照一定规则自动抓取互联网上的信息的程序或脚本。它可以模拟用户行为,访问网页并提取结构化数据(如文本、图片、链接等)。 #### 1.2 **工作原理** 爬虫的工作流程通常包括以下几个步骤: 1. **发送请求**: 使用 HTTP 请求访问目标网站。 2. **接收响应**: 获取目标网站返回的数据(通常是 HTML 页面)。 3. **解析数据**: 提取页面中的有用信息。 4. **存储数据**: 将提取的信息保存到文件、数据库或其他形式中。 5. **遵循规则**: 遵守网站的 `robots.txt` 文件和相关法律规范。 --- ### 2. **Python 爬虫相关库** #### 2.1 **常用库及其功能** 1. **`requests`**: 用于发送 HTTP 请求。 - 功能: 发起 GET、POST 等请求,获取网页内容。 - 示例代码: ```python import requests response = requests.get("https://www.example.com") print(response.text) # 输出网页内容 ``` 2. **`BeautifulSoup` (来自 `bs4` 库)**: 用于解析和提取 HTML/XML 数据。 - 功能: 提供简单的 API 来导航、搜索和修改解析树。 - 示例代码: ```python from bs4 import BeautifulSoup html = "<html><body><h1>Hello, World!</h1></body></html>" soup = BeautifulSoup(html, "html.parser") print(soup.h1.text) # 输出: Hello, World! ``` 3. **`scrapy`**: 一个功能强大的爬虫框架。 - 功能: 提供完整的爬虫解决方案,支持异步请求、数据管道和分布式爬取。 - 示例代码: ```python import scrapy class ExampleSpider(scrapy.Spider): name = "example" start_urls = ["https://www.example.com"] def parse(self, response): self.log(f"Visited {response.url}") yield {"title": response.css("h1::text").get()} ``` 4. **`selenium`**: 用于自动化浏览器操作。 - 功能: 模拟用户行为(如点击按钮、填写表单等),适合动态网页爬取。 - 示例代码: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.example.com") print(driver.title) # 输出网页标题 driver.quit() ``` 5. **`pandas` 和 `csv`**: 用于数据存储和分析。 - 功能: 将爬取的数据保存为 CSV 文件或进行数据分析。 - 示例代码: ```python import pandas as pd data = {"Name": ["Alice", "Bob"], "Age": [25, 30]} df = pd.DataFrame(data) df.to_csv("output.csv", index=False) ``` --- ### 3. **爬虫的应用场景** - **数据采集**: 从电商网站、新闻网站等抓取数据用于分析。 - **搜索引擎**: 谷歌、百度等搜索引擎依赖爬虫抓取网页内容。 - **市场研究**: 分析竞争对手的产品价格、评论等信息。 - **学术研究**: 收集公开数据用于科学研究。 --- ### 4. **问题产生的原因** - **反爬机制**: 许多网站会设置反爬措施(如验证码、IP 限制等),导致爬虫无法正常工作。 - **动态内容**: 现代网页大多使用 JavaScript 渲染内容,普通爬虫可能无法抓取这些动态生成的数据。 - **法律风险**: 如果不遵守网站的 `robots.txt` 文件或相关法律法规,可能会引发法律纠纷。 --- ### 5. **相关注意事项** - **遵守规则**: 在爬取数据时,务必遵守目标网站的 `robots.txt` 文件和相关法律法规。 - **礼貌爬取**: 控制爬取频率,避免对目标网站造成过大负担。 - **处理异常**: 在爬虫中加入异常处理机制,确保程序的稳定性。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值