插件窝 干货文章 B站主页Banner的Blob URL是如何制作的?

B站主页Banner的Blob URL是如何制作的?

Blob URL 数据 二进制 464    来源:    2025-03-21

B站(哔哩哔哩)主页的Banner图片通常是通过Blob URL来加载的。Blob URL是一种特殊的URL格式,允许浏览器直接引用内存中的二进制数据(Blob对象),而不需要将数据上传到服务器或存储在本地文件系统中。

以下是B站主页Banner的Blob URL制作和使用的简要过程:

1. 获取Banner图片数据

  • B站的后端服务器会生成或存储Banner图片的二进制数据。这些数据可能是通过图像处理工具生成的,也可能是从数据库中读取的。
  • 图片数据通常以二进制格式(如PNG、JPEG等)存储在服务器上。

2. 将图片数据转换为Blob对象

  • 当用户访问B站主页时,前端代码会通过AJAX请求或其他方式从服务器获取Banner图片的二进制数据。
  • 获取到的二进制数据会被转换为JavaScript中的Blob对象。Blob对象表示不可变的、原始数据的类文件对象。

    const blob = new Blob([binaryData], { type: 'image/png' });
    

    其中,binaryData是从服务器获取的二进制数据,type参数指定了数据的MIME类型(如图片的MIME类型为image/png)。

3. 生成Blob URL

  • 使用URL.createObjectURL()方法将Blob对象转换为一个Blob URL。这个URL是一个临时的、唯一的URL,指向内存中的Blob对象。

    const blobUrl = URL.createObjectURL(blob);
    

    blobUrl是一个类似于blob:https://www.bilibili.com/550e8400-e29b-41d4-a716-446655440000的URL。

4. 将Blob URL应用到Banner

  • 生成的Blob URL可以直接作为<img>标签的src属性值,或者作为CSS背景图片的URL。

    <img src="blob:https://www.bilibili.com/550e8400-e29b-41d4-a716-446655440000" alt="Banner">
    

    或者:

    .banner {
       background-image: url('blob:https://www.bilibili.com/550e8400-e29b-41d4-a716-446655440000');
    }
    

5. 释放Blob URL

  • 当Banner图片不再需要时,为了释放内存,可以使用URL.revokeObjectURL()方法撤销Blob URL。

    URL.revokeObjectURL(blobUrl);
    

    撤销后,Blob URL将不再有效,浏览器会释放相关的内存资源。

总结

B站主页Banner的Blob URL是通过以下步骤制作的: 1. 从服务器获取Banner图片的二进制数据。 2. 将二进制数据转换为Blob对象。 3. 使用URL.createObjectURL()生成Blob URL。 4. 将Blob URL应用到Banner的<img>标签或CSS背景中。 5. 在不需要时撤销Blob URL以释放内存。

这种方式可以避免将图片数据存储在服务器上,减少服务器的负载,并且可以动态生成和加载图片内容。