首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Chrome88和Desktop Chrome92中的SharedArrayBuffer更新

基础概念

SharedArrayBuffer 是 JavaScript 中的一个对象,用于表示一个通用的、固定长度的原始二进制数据缓冲区,可以在多个 Workers 和主线程之间共享。这使得多线程编程更加高效,因为它允许线程间共享内存,而不是通过消息传递来共享数据。

更新内容

在 Android Chrome 88 和 Desktop Chrome 92 中,SharedArrayBuffer 进行了一些更新和改进,主要包括:

  1. 安全性增强:引入了 Cross-Origin Isolation(跨源隔离)机制,以防止跨站脚本攻击(XSS)和其他安全威胁。
  2. 性能优化:对 SharedArrayBuffer 的分配和释放进行了优化,提高了性能。
  3. API 改进:增加了一些新的 API 和方法,使得使用 SharedArrayBuffer 更加方便。

优势

  1. 高效的线程间通信:通过共享内存,避免了频繁的消息传递,提高了通信效率。
  2. 减少数据拷贝:直接在内存中操作数据,减少了不必要的数据拷贝。
  3. 更好的性能:特别是在处理大量数据和高并发场景下,性能提升显著。

类型

SharedArrayBuffer 主要有以下几种类型:

  1. Int8Array:8 位有符号整数数组。
  2. Uint8Array:8 位无符号整数数组。
  3. Int16Array:16 位有符号整数数组。
  4. Uint16Array:16 位无符号整数数组。
  5. Int32Array:32 位有符号整数数组。
  6. Uint32Array:32 位无符号整数数组。
  7. Float32Array:32 位浮点数数组。
  8. Float64Array:64 位浮点数数组。

应用场景

  1. Web Workers:在 Web Workers 中使用 SharedArrayBuffer 可以实现高效的多线程处理。
  2. 实时数据处理:在需要实时处理大量数据的场景中,如音视频处理、游戏引擎等。
  3. 高性能计算:在需要进行复杂计算的场景中,如科学计算、数据分析等。

遇到的问题及解决方法

问题:跨源隔离机制导致 SharedArrayBuffer 无法使用

原因:为了防止跨站脚本攻击(XSS),Chrome 引入了跨源隔离机制,要求 SharedArrayBuffer 必须在跨源隔离的环境中使用。

解决方法

  1. 启用跨源隔离:确保服务器配置了正确的 Cross-Origin-Embedder-Policy(COEP)和 Cross-Origin-Opener-Policy(COOP)头。
  2. 检查安全策略:确保没有其他安全策略阻止了 SharedArrayBuffer 的使用。
代码语言:txt
复制
// 示例代码:启用跨源隔离
if (typeof SharedArrayBuffer === 'undefined') {
  const coepHeader = response.headers.get('Cross-Origin-Embedder-Policy');
  if (coepHeader && coepHeader.includes('require-corp')) {
    // 跨源隔离已启用
  } else {
    // 跨源隔离未启用,无法使用 SharedArrayBuffer
  }
}

参考链接

通过以上内容,您可以了解到 SharedArrayBuffer 的基础概念、更新内容、优势、类型、应用场景以及常见问题的解决方法。希望这些信息对您有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 11 中的存储机制更新

在 Android 11 中,我们会通过下述的几点来继续优化分区存储 (Scoped Storage) 的开发者体验。...因此在 Android 11 里,依赖原始文件路径的 API 和库可以再次使用了。...在 Android 10 中,应用在对每一个文件请求编辑或删除时都必须得到用户的确认。而在 Android 11 中,应用可以一次请求修改或者删除多个媒体文件。...因此,我们对其进行了更新,限制了它对某些路径的可见性。 在 Android 11 中,将不再允许用户授权访问 Downloads 的根目录、每个可用 SD 卡的根目录以及其它应用的目录。.../video/av771… 或点击这里查看 Android 开发者文档:《Android 11 中的存储更新》 我们非常重视您的反馈,您可以通过 issues tracker 向我们反馈 issue 或新特性需求

3.1K11

Android Q 中的安全性更新

作者: Rene Mayrhofer 和 Xiaowen Xin, Android 安全与隐私团队 每次发布 Android 的新版本,我们的首要任务之一就是提高平台的安全防护。...在 Android Q 中,我们将这些策略实践至多个关键安全领域的研发工作中,例如: 媒体、蓝牙以及系统内核。...我们在《Android 平台安全增强项详览》一文中提供了详实的介绍,其中的部分更新重点包括: 供软件编码器使用的受限沙箱; 增加排错程序 (sanitizer) 在生产环境中的使用: 当某组件处理不受信任的内容时...该 API 自推出以来便深受欢迎,我们在许许多多应用上都看到了它的身影。随着 Android Q 的发布,我们更新了 BiometricPrompt 底层框架,增强了对面部识别和指纹识别的支持。...此外,我们还对该 API 进行了扩展,增加了支持用例的数量,如隐式和显式验证。 在显式流程中,用户必须通过明确的操作,如触摸指纹传感器,才能完成后续的身份验证工作。

75850
  • chrome升了chrome88后,selenium修改window.navigator.webdriver

    写在前面 Google于2021年1月19日在稳定版中发布了Chrome88(大更新) 针对Windows 10的改进的深色主题以及较少侵入性权限提示 不再支持FTP URL、Flash、Mac...WebXR:AR照明估算: 对于Android上的AR和VR内容,照明估算可帮助使模型感觉更自然,并使其更“适合”用户的环境。...更多更新信息可以自己搜搜看 今天主要想写的是,因为更新到chrome88导致了一直使用的selenium爬虫数据自动化采集代码失效了,这已经是第二次因为浏览器更新导致我代码失效了,本着记录自己工作的原则...,一直对这方面进行着持续更新,所以也导致了很多小伙伴过来问我这个问题,不了解的可以点击下面链接直达前文,专为解决【chrome88导致无法修改window.navigator.webdriver】的朋友们直接看本篇就可以了...问题查找 版本信息 造成代码无法使用的主要原因与之前一样: window.navigator.webdriver值为true 经过几天的排查主要原因是 chrome88集成了V8 JavaScript

    1.6K30

    Android各种各样的Drawable-更新中

    只有在程序中需要动态的修改drawable的属性时,才需要使用具体的drawable类型提供的方法。 事实上xml中配置的节点和Drawable的实现类是一一对应的。...> JavaCode的方式 代码中必须要明确指出透明度(Alpha)代表的数据,即,要加上0x,而且不能把透明度漏掉,否则就是透明的了。...使用“点九”图片处理技术,可以将图片横向和纵向同时进行拉伸,以实现在多分辨率下的完美显示效果。...点九图片在拉伸时仍能保留图像的渐变质感和圆角的精细度。...左边和上边的黑线形成的矩形区域是图片的拉伸区域,下边和右边形成的矩形区域是内容所在的区域。黑线可以是连续的也可以是不连续的,不过为了达到最好的显示效果,最好使用连续的黑线。 ?

    1K30

    Android中的进程和线程

    但是,您可以安排应用中的其他组件在单独的进程中运行,并为任何进程创建额外的线程。 本文档介绍进程和线程在 Android 应用中的工作方式。...为使总体系统资源在进程缓存和底层内核缓存之间保持平衡,系统往往会终止这些进程。 根据进程中当前活动组件的重要程度,Android 会将进程评定为它可能达到的最高级别。...此外,它也是应用与 Android UI 工具包组件(来自 android.widget 和 android.view 软件包的组件)进行交互的线程。因此,主线程有时也称为 UI 线程。...它会先阻塞工作线程中的操作,然后在 UI 线程中发布结果,而无需您亲自处理线程和/或处理程序。...要更新 UI,必须实现 onPostExecute() 以传递 doInBackground() 返回的结果并在 UI 线程中运行,这样,您即可安全更新 UI。

    1.2K30

    Android 与 Chrome OS 中针对大屏幕设备的更新

    Google 团队正在将更多研发精力投入到 Android 框架、Jetpack 和 Chrome 操作系统中。...请继续阅读,查看 Android 系统和 Chrome OS 对大屏幕设备的支持的更新! 如果您更喜欢通过视频了解此内容,请 点击此处 查看。...,并行改进功能和 API,这些更新将在 2022 年初落地,使 Android 12 能够更好地运行在这些大屏幕设备上。...系统界面 △ 系统界面 — 现代化的外观和质感 Android 12L 还带来了多项系统界面相关的用户界面更新。...12L 功能的更新振奋人心,我们也期待着在今后的 Android 版本中加入更丰富的功能以及对大屏幕设备更多的支持,我们将继续努力让 Android 成为更好的操作系统,为用户和开发者提供更优质的服务。

    2.4K40

    Android中drawableStart和drawableLeft的区别

    今天在看代码的时候无意间发现textview的一种新用法。就是可以在textview的周围添加图片。主要有上下左右还有就是开始处和结束处添加图片。...下面来具体讲一些textview中的添加图片的各种属性和方法。   android:drawableBottom:在text的下方输出一个drawable,可以是图片,样式,颜色等。  ...就是drawableStart和drawableLeft   android:drawableRight和android:drawableEnd的区别。...我们读一段文字,都是从左到右,于是对于我们来说start和left是一个概念。但是还有些文化,像阿拉伯等是从右到左的,这两者就截然相反了。...用start、end代替left、right这是Android新提供的RTL Layout Support所推荐的做法。

    54060

    python 和 java的区别( 不断更新中 )

    为了避免创建大整数浪费的内存空间和时间,将创建过的大整数加入大整数池。...下次使用大整数时直接使用大整数池里的对象,而不是创建新的对象 。终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以。...这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。...类似 python中的字典 key 不能是可变的,可变的会报错,而java中没有此限制,虽然说可能不应该以可变对象为 key python 的序列( list )、字典( dict )、集合( set...python 中的 模块( module ) 其实就是python源文件,package + module 构成了 Python 中的依赖,与 java 类似

    37910

    android中webview的加载速度影响其他的控件更新问题

    在android中当界面比较复杂的时候 我们一般采用webview来解决问题,避免写很多复杂的布局 这个也叫作混合布局吧,但是一个问题就是webview利用的是系统的浏览器,导致的问题主要是网络速度 当网速快的时候还好...,不是特别明显  当网络慢的时候就麻烦了 其他的控件都加载完了,webview还没有加载完,阿西吧啊 怎么办呢,所以在布局的时候要注意了,尽量先显示webview的内容,安排的合理些,否则就放弃这种布局...然后把其他的控件更新放在webview完成事件里面: @SuppressLint("SetJavaScriptEnabled") private void initWebView() { //...=0){ //页面下载完毕,不代表页面渲染完毕,如果要加入进度条,请在这里设置 new GetWzCommentTask().execute();//加载的评论信息 }...,如果有进度条 当完成的时候就把进度条消失,这里先只做提示处理 super.onProgressChanged(view, newProgress); } }); }

    98420

    js和object的常见操作,持续更新中...

    PS: ⚠️不是返回值,是提醒注意事项,除⚠️符号之外的均为返回值 将string类型的数组,进行格式化为object类型的数组 let str = "[{'env': '测试', 'problem'...: '允许', 'protocol': 'TCP', 'source_port': '修改的数据源数据', 'purpose': '修改的数据', 'source_ip': '修改的数据源数据', 'dest_port...': '修改的数据源数据', 'partner': '修改的数据源数据', 'dest_ip': '修改的数据源数据', 'id': 0}]" console.info(eval(str)) //返回值...: '修改的数据源数据', dest_ip: '修改的数据源数据', id: 0 } ] 获取对象的key和value let obj = { env...'mary' }, { name: 'tony' }, { name: 'karry' }, { name: 'jerry' } ] 更改对象值为数组元素,将key和值重新进行赋值

    1.5K20

    Android 和 Google Play 的最新更新 | Google IO 精彩回顾

    在今年的 Google I/O 上,Android 和 Google Play 都发布了诸多重磅更新,这里欢迎大家和 Android 团队的 Fred 一起回顾其中不容错过的重点更新: 点击这里 查看...Android 和 Google Play 在 I/O 的最新更新视频。...我们正在将软件和硬件的生态系统统一在同一种设计语言下,名叫 Material You。 Android 12 中的 应用 widget 经过设计改版,更加实用、美观,也更容易被用户发现。...其他更新还包括新的过度滚动拉伸效果、提升系统性能,以及更多的隐私和安全更新。请前往《Android 12 Beta 版发布》一文了解详细信息。...在可折叠设备、平板设备以及大屏设备方面,我们更新了 Jetpack 和 Material Design 库中的许多 UI 组件,以方便大家进行各种屏幕尺寸的适配。

    1.1K60

    android的timertask,Android 中 Timer 和 TimerTask的使用「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 Android中Timer是一个普通的类,其中有几个重要的方法;而TimerTask则是一个抽象类,其中含有一个抽象方法run()。...使用Timer类中的schedule()方法可以完成对TimerTask的调度,该方法具有三个参数,其函数声明如下: public void schedule(TimerTask task, long...这里为了验证Timer和TimerTask的用法,举了一个案例进行验证,其源代码如下所示: package com.glemontree.timetaskdemo; import java.util.Timer...; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; import android.view.Menu...; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity

    85610

    Android 中的 Dalvik Heap 和 Native Heap

    进程内存空间和 RAM 之间的关系 进程的内存空间只是虚拟内存(或者叫作逻辑内存),而程序的运行需要的是实实在在的内存,即物理内存(RAM)。...Android中的进程 [1492053478618_9079_1492053479664.png] native进程:采用C/C++实现,不包含dalvik实例的linux进程,/system/bin...dalvik 虚拟机实例的宿主进程是fork()调用创建的 linux 进程,所以每一个 android 上的 java 进程实际上就是一个 linux 进程,只是进程中多了一个 dalvik 虚拟机实例...因此,java 进程的内存分配比 native 进程复杂。Android 系统中的应用程序基本都是 java 进程,如桌面、电话、联系人、状态栏等等。...,heap空间完全由程序员控制,我们使用的malloc、C++ new 和 java new所申请的空间都是heap空间, C/C++ 申请的内存空间在 native heap 中,而 java 申请的内存空间则在

    11.3K00

    开发和测试中遇到的其他问题(持续更新)

    1.postman进行参数传值的时候不要在value中加引号了 第一次用posman分析了好久就是没搞懂咋sql直接执行没问题.传值就报错了,奇了怪哉~ 2.mybatis中foreach便利集合进行拼接时候使用了自定义名字...小结一下啥时候用@param指定参数名称 1.动态sql中时候(包括test if这样的) 2.多个参数 3.取别名 4.映射sql中 使用进行取值(其实和刚刚我们的 默认指定 一样,这里默认用...乱码问题解决 new String(Base64.decodeBase64("要解析的str"), "要转换为的识别码"); new String(Base64.decodeBase64("要解析的str..."), "gb2312"); 6. mysql在order by 和 limit联用情况下造成分页数据重复或者排序不稳定情况 sql 查询结果 我们发现我们sql3取的前六条不是sql2排的前6条,...如果我们limit6,6可能还会出现前6条中的数据,这是为什么呢?

    1.1K30

    Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新)

    ——《微卡智享》 本文长度为3675字,预计阅读12分钟 前言 接上篇《Android BlueToothBLE入门(二)——设备的连接和通讯(附Demo源码地址)》最后提到过蓝牙BLE通讯每次默认发送的数据为...02 分包发送数据和接收处理 申请MTU比较简单,现在是这篇文的重点了,分包的方式其实也有多种,我这边采用的是每个数据包中前4个字节来定义总包数和当前包数,后面的是当前包的数据,如下图所示。...接收的当前包数据先调用前面写的函数获取到总包数,当前包数和当前包的数据,根据总包数定义总包数的数组,如果hashtable里面有直接获取到后更新对应的当前包数据,因为发送时是按顺序发送的,所以在接收的时候判断当前包数...,效果就是文章开头的GIf视频中,源码还是上次的Demo中,已更新至当前版本了。...(二)——设备的连接和通讯(附Demo源码地址) Android BlueToothBLE入门(一)——低功耗蓝牙介绍 Android监听消息(二)——电话及短信监听

    2.7K10

    Android Studio 使用心得 之 ✨ Android Studio的使用过程中出现的问题(更新中)

    目录 Android Studio的使用过程 从安装到试运行第一个小程序 导入别人的Android Studio 项目 运行时会出现的一些问题整理 Android Studio的使用过程 从安装到试运行第一个小程序...新建项目及AS内部工具使用 导入别人的Android Studio 项目 [如何成功运行和导入别人的android studio项目?]...to create userdata partition 解决方案:在一个空间比较大的盘下新建一个android文件夹,把下面这个文件(Pixel_2_API_R.avd)剪切到新建的文件夹下。...---- 问题:Android中R.layout.xxx,有资源文件,调用不到。...方法一: 是类的包名导入错误导致: 可能不小心导入了Android的R类,导致AS找不到了才报错 换成导入自己项目的R类就可以了 import android.R; 正确导入的包名: import

    1.1K70

    源码分析Android中的线程和线程池

    概述 线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时的操作。在操作系统中,线程是操作系统调度的最小单元。...- AsyncTask封装了线程池和Handler,它主要方便开发者在子线程中更新UI。 - HandlerThread是一个具有消息循环的线程,在它的内部可以使用Handler。...AsyncTask的工作原理 AsyncTask是一种轻量级的异步任务类,他可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程上更新UI。...对象,为了能够将执行环境切换到主线程,这就要求sHandler在主线程中创建,由于静态成员会在加载类的时候进行初始化,因此这就变相要求AsyncTask的类必须在主线程中加载,否则统一进程中的AsyncTask...Android中的线程池 线程池的好处: 1. 重用线程池中的线程,避免因为线程的创建和销毁所带类的性能开销 2.

    35520

    Android中的序列化:Parcelable和Serializable

    Parcelable和Serializable的区别 作用 Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的...Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过...性能比较 在内存的使用中,Parcelable的性能方面要强于Serializable; Serializable序列化操作的时候会产生大量的临时变量(原因是使用了反射机制),从而导致GC的频繁调用,因而性能比...在内存上的开销比较小,因此内存直接进行数据传递的时候,Android推荐使用Parcelable; 在读写数据的时候,Parcelable是在内存中直接进行读写,而Serializable是通过IO流的形式将数据写入到硬盘上...* 在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较, * 如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常

    77410
    领券