首页 > 其他分享 >前端url的几种实用情况

前端url的几种实用情况

时间:2023-10-17 09:45:24浏览次数:34  
标签:url 前端 实用 URL createObjectURL 对象 内存 readAsDataURL

一 相对地址转绝对地址
使用场景:某个函数需要在使用的时候传递一个 地址,函数内部会利用这个地址 进行某些操作 (比如生成worker,生成image,数据转化等)
如下:如果直接使用相对位置,会根据url 进行拼接。但当 一些利用利用了router的单页项目,页面的url 并不能获取到 真实的file 地址。所以出现如下情况


其他 几种浏览器中 相对地址转绝对地址的方法

  1. 利用a标签
    function absolute2Relative(src,base){
    const a = document.createElement('a');
    a.href = (base || '') + src;
    return a.href;
    }
  2. 利用URL
    function absolute2Relative(src,base){
    const {protocol,host} = location;
    const url = new URL(src,base|| protocol + host);
    return url.href;
    }

Node 中 的绝对地址与相对地址使用?

利用fetch 请求地址-blob-URL.createObjectURL 的方法解决跨域问题!
注: 在不使用时需调用 URL.revokeObjectURL(~) 进行内存回收

二 关于 URL.createObjectURL 的原理
URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。(
简单地说,URL.createObjectURL就是将内存对象与URL建立链接,产生一个指向对象的url)
// 输入 object 包含类型: File 对象、Blob 对象或者 MediaSource 对象。
// 返回值:一个DOMString包含了一个对象URL,该URL可用于指定源 object的内容。
objectURL = URL.createObjectURL(object);

内存管理
在每次调用 createObjectURL() 方法时,都会创建一个新的 URL 对象,即使你已经用相同的对象作为参数创建过。当不再需要这些 URL 对象时,每个对象必须通过调用 URL.revokeObjectURL() 方法来释放。浏览器在 document 卸载的时候,会自动释放它们,但是为了获得最佳性能和内存使用状况,你应该在安全的时机主动释放掉它们。
三 URL.createObjectURL 和 FileReader.readAsDataURL、CanvasElement.toDataURL 的关系
FileReader.readAsDataURL
readAsDataURL 方法会读取指定的 Blob 或 File 对象。
读取操作完成的时候,readyState 会变成已完成DONE,并触发 loadend 事件,同时 result 属性将包含一个data:URL格式的字符串(base64编码)以表示所读取文件的内容 HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI。
可以使用 type 参数其类型,默认为 PNG 格式。图片的分辨率为96dpi。

CanvasElement.toDataURL
如果画布的高度或宽度是0,那么会返回字符串“data:,”。
如果传入的类型非“image/png”,但是返回的值以“data:image/png”开头,那么该传入的类型是不支持的。
Chrome支持“image/webp”类型。

三者关系
URL.createObjectURL(blob)和FileReader.readAsDataURL(file)很相似
主要区别
通过FileReader.readAsDataURL(file)可以获取一段data:base64的字符串
通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL
执行时机
createObjectURL是同步执行(立即的)
FileReader.readAsDataURL是异步执行(过一段时间)
内存使用
createObjectURL返回一段带hash的url,并且一直存储在内存中,直到document触发了unload事件(例如:document close)或者执行revokeObjectURL来释放。
FileReader.readAsDataURL则返回包含很多字符的base64,并会比blob url消耗更多内存,但是在不用的时候会自动从内存中清除(通过垃圾回收机制)
兼容性方面两个属性都兼容ie10以上的浏览器。
优劣对比
使用createObjectURL可以节省性能并更快速,只不过需要在不使用的情况下手动释放内存
如果不太在意设备性能问题,并想获取图片的base64,则推荐使用FileReader.readAsDataURL

标签:url,前端,实用,URL,createObjectURL,对象,内存,readAsDataURL
From: https://www.cnblogs.com/honkerzh/p/17768945.html

相关文章

  • 前端二进制流
    FileReader----读取file/blob数据FileReader.readAsArrayBuffer()异步方法,读取完成result属性中保存的将是被读取文件的ArrayBuffer数据对象。FileReader.readAsDataURL():一旦完成,result属性中将包含一个data:URL格式的Base64字符串以表示所读取文件的内容......
  • 更换当前url的方法
    location=locationlocation=location.hreflocation=window.locationlocation=self.locationlocation=window.location.hreflocation=self.location.hreflocation=location['href']location=window['location']location=window[......
  • 前端调试时不改代码但又想打印变量信息怎么办?
    我们都知道,Chrome的控制台可以在调试的时候打断点。程序运行到这的时候会停止但有时候我们不希望程序断点执行,我们只是想看一些变量的信息。按照以前的方式,我们只能去修改源码增加打印日志的语句,这样既浪费时间,又需要在调试完成后清理掉我们打印的日志代码。其实,Chrome浏览......
  • 用java.net.URL类等访问HTTP服务器读取网页数据
    大力:“Java网络编程需要通过套接字去进行客户程序与服务器程序的交互,这种底层的通信实现起来比较麻烦,有没有现成的API呢?”卫琴:“JDK为基于HTTP协议的网络通信提供了协议处理框架API,Java客户程序通过它来访问HTTP服务器,会很方便。”本文以HTTP客户程序为例,介绍URL类和URLConnection......
  • 记录--Vue中前端导出word文件
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助很多时候在工作中会碰到完全由前端导出word文件的需求,因此特地记录一下比较常用的几种方式。一、提供一个word模板该方法提供一个word模板文件,数据通过参数替换的方式传入word文件中,灵活性较差,适用于简单的文件导......
  • 前端打怪之旅=>Es6入门(对象简化写法、函数)
    对象的简化写法ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法这样的书写更加简洁letname='浅辄';letchange=function(){console.log('我可以改变世界');}constschool={......
  • 重新开始学前端,面向社区的快速反馈式学习
    重新开始学前端在设计稿还原、数据结构和算法、构建工具、架构、源码这几个方面要学的是在太多了,做个记录分享一下计划在每个方向个社区进行交流和反馈,我更喜欢和社区交流快速反馈的学习方式每个方向都有一个交流的社区那就好1设计高还原高质量的还原设计稿任何时候都是......
  • 26个CSS超实用技巧
    1.文字溢出显示省略号单行文字:一定要设置宽度p{​•width:200px;​•overflow:hidden;text-overflow:ellipsis;white-space:nowrap;​​​}多行文字溢出显示省略号p{display:-webkit-box;-webkit-box-orient:vertical;-webkit-l......
  • 音频处理实用AI工具
    最近在做音频处理相关的工作,主要有以下几个好用的工具。 1.语音转文字——whisper这是一款由OpenAI开发的语音转文字工具,项目地址位于:openai/whisper.这个工具是用来生成字幕的,现在的很多视频编辑软件也有“一键生成字幕”的功能。使用此工具需要提前安装好PyTorch和ffmpeg(......
  • 【京东开源项目】微前端框架MicroApp 1.0正式发布
    介绍MicroApp是由京东前端团队推出的一款微前端框架,它从组件化的思维,基于类WebComponent进行微前端的渲染,旨在降低上手难度、提升工作效率。MicroApp无关技术栈,也不和业务绑定,可以用于任何前端框架。源码地址:https://github.com/micro-zoe/micro-app官网地址:https://micro-......