当前位置: 首页 > news >正文

品牌网站建设四川做社交网站需要什么资质

品牌网站建设四川,做社交网站需要什么资质,专业的培训行业网站开发,可视化拖拽建站系统1、简 介 在传统JS引擎上#xff0c;对象的并发通信开销的优化方式只有一种#xff0c;就是把实现下沉到Native侧#xff0c;通过Transferable对象的转移或共享方式降低并发通信开销。而开发者仍然还有大量对象并发通信的诉求#xff0c;这个问题在业界的JS引擎实现上并没… 1、简 介 在传统JS引擎上对象的并发通信开销的优化方式只有一种就是把实现下沉到Native侧通过Transferable对象的转移或共享方式降低并发通信开销。而开发者仍然还有大量对象并发通信的诉求这个问题在业界的JS引擎实现上并没有得到解决。 ArkTS提供了Sendable对象类型在并发通信时支持通过引用传递来解决上述问题。 Sendable对象为可共享的其跨线程前后指向同一个JS对象如果其包含了JS或者Native内容均可以直接共享如果底层是Native实现的则需要考虑线程安全性。通信过程如下图所示 与其它ArkTS对象不一样的是符合Sendable协议的数据对象在运行时必须是类型固定的对象。 当多个并发实例尝试同时更新Sendable数据时会发生数据竞争。因此ArkTS提供了异步锁的机制来避免不同并发实例间的数据竞争。同时还可以通过对象冻结接口冻结对象将其变为只读对象就可以不用考虑数据的竞争问题。 Sendable对象提供了并发实例间高效的通信效率即引用传递的能力一般适用于开发者自定义大对象需要线程间通信的场景例如子线程读取数据库的数据返回主线程。 2、Sendable对象类型基础概念 2.1、Sendable协议 Sendable协议定义了ArkTS的可共享对象体系及其规格约束。符合Sendable协议的数据以下简称Sendable对象可以在ArkTS并发实例间传递。 默认情况下Sendable数据在ArkTS并发实例间包括主线程、TaskPool、Worker线程传递的行为是引用传递。同时ArkTS也支持Sendable数据在ArkTS并发实例间拷贝传递。 2.2、ISendable接口 在ArkTS语言基础库arkts.lang中引入了interface ISendable没有任何必须的方法或属性。ISendable是所有Sendable类型除了null和undefined的父类型。ISendable主要用在开发者自定义Sendable数据结构的场景中。类装饰器Sendable装饰器是implement ISendable的语法糖。 2.3、Sendable装饰器 用于声明并校验Sendable类以及Sendable函数。有以下需要注意的使用限制 Sendable class只能继承Sendable class普通Class不可以继承Sendable class。 装饰的对象内的属性类型限制 1. 支持string、number、boolean、bigint、null、undefined、Sendable class、collections.Array、collections.Map、collections.Set、ArkTSUtils.locks.AsyncLock。 2. 禁止使用闭包变量。 3. 不支持通过#定义私有属性需用private。 4. 不支持计算属性。 成员属性必须显式初始化。成员属性不能跟感叹号。 允许使用local变量、入参和通过import引入的变量。禁止使用闭包变量定义在顶层的Sendable class和Sendable function除外。 不支持增加属性、不支持删除属性、允许修改属性修改前后属性的类型必须一致、不支持修改方法。 Sendable类使用示例如下 Sendableclass SendableTestClass { desc: string sendable: this is SendableTestClass ; num: number 5; printName() { console.info(sendable: SendableTestClass desc is: this.desc); } get getNum(): number { return this.num; }} Sendable函数使用示例如下 Sendabletype SendableFuncType () void;Sendableclass TopLevelSendableClass { num: number 1; PrintNum() { console.info(Top level sendable class); }}Sendablefunction TopLevelSendableFunction() { console.info(Top level sendable function);}Sendablefunction SendableTestFunction() { const topClass new TopLevelSendableClass(); // 顶层sendable class topClass.PrintNum(); TopLevelSendableFunction(); // 顶层sendable function console.info(Sendable test function);}Sendableclass SendableTestClass { constructor(func: SendableFuncType) { this.callback func; } callback: SendableFuncType; // 顶层sendable function CallSendableFunc() { SendableTestFunction(); // 顶层sendable function }}let sendableClass new SendableTestClass(SendableTestFunction);sendableClass.callback();sendableClass.CallSendableFunc(); 2.4、Sendable支持的数据类型 所有的ArkTS基本数据类型boolean, number, string, bigint, null, undefined。 ArkTS语言标准库中定义的容器类型数据须显式引入arkts.collections。 ArkTS语言标准库中定义的异步锁对象须显式引入arkts.utils。 继承了ISendable的interface。 标注了Sendable装饰器的class。 标注了Sendable装饰器的function。 接入Sendable的系统对象。 共享用户首选项 可共享的色彩管理 基于Sendable对象的图片处理 资源管理 SendableContext对象管理 元素均为Sendable类型的union type数据。 JS内置对象在并发实例间的传递遵循结构化克隆算法跨线程行为是拷贝传递。因此JS内置对象的实例不是Sendable类型。 对象字面量、数组字面量在并发实例间的传递遵循结构化克隆算法跨线程行为是拷贝传递。因此对象字面量和数组字面量不是Sendable类型。 2.5、Sendable的实现原理 为了实现Sendable数据在不同并发实例间的引用传递Sendable共享对象会分配在共享堆中以实现跨并发实例的内存共享。 共享堆SharedHeap是进程级别的堆空间与虚拟机本地堆LocalHeap不同的是LocalHeap只能被单个并发实例访问而SharedHeap可以被所有线程访问。一个Sendable共享对象的跨线程行为是引用传递。因此Sendable可能被多个并发实例引用判断Sendable共享对象是否存活取决于所有并发实例的对象是否存在对此Sendable共享对象的引用。 SharedHeap与LocalHeap关系图 各个并发实例间的LocalHeap是隔离的SharedHeap是进程级别的堆可以被所有的并发实例引用。但是SharedHeap不能引用LocalHeap中的对象。 3、Sendable使用场景 Sendable对象可以在不同并发实例间通过引用传递。通过引用传递方式传输对象相比序列化方式更加高效同时不会丢失class上携带的成员方法。因此Sendable主要可以解决两个场景的问题 跨并发实例传输大数据例如可能达到100KB以上的数据。 跨并发实例传递带方法的class实例对象。 3.1、跨并发实例传输大数据场景 由于跨并发实例序列化的开销随着数据量线性增长因此当传输数据量较大时100KB数据大约1ms传输耗时跨并发实例的拷贝开销大影响应用性能。引用传递方式传输对象可提升性能。示例如下 // Index.etsimport { taskpool } from kit.ArkTS;import { testTypeA, testTypeB, Test } from ./sendable;import { BusinessError, emitter } from kit.BasicServicesKit; // 在并发函数中模拟数据处理Concurrentasync function taskFunc(obj: Test) { console.info(test task res1 is: obj.data1.name res2 is: obj.data2.name);}async function test() { // 使用taskpool传递数据 let a: testTypeA new testTypeA(testTypeA); let b: testTypeB new testTypeB(testTypeB); let obj: Test new Test(a, b); let task: taskpool.Task new taskpool.Task(taskFunc, obj); await taskpool.execute(task);} Concurrentfunction SensorListener() { // 监听逻辑 // ...}EntryComponentstruct Index { build() { Column() { Text(Listener task) .id(HelloWorld) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() { let sensorTask new taskpool.LongTask(SensorListener); emitter.on({ eventId: 0 }, (data) { // Do something here console.info(Receive ACCELEROMETER data: {${data.data?.x}, ${data.data?.y}, ${data.data?.z}); }); taskpool.execute(sensorTask).then(() { console.info(Add listener of ACCELEROMETER success); }).catch((e: BusinessError) { // Process error }) }) Text(Data processing task) .id(HelloWorld) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() { test(); }) } .height(100%) .width(100%) }}​// sendable.ets// 将数据量较大的数据在Sendable class中组装Sendableexport class testTypeA { name: string A; constructor(name: string) { this.name name; }}Sendableexport class testTypeB { name: string B; constructor(name: string) { this.name name; }}Sendableexport class Test { data1: testTypeA; data2: testTypeB; constructor(arg1: testTypeA, arg2: testTypeB) { this.data1 arg1; this.data2 arg2; }} 3.2、跨并发实例传递带方法的class实例对象 由于序列化传输实例对象时会丢失方法在必须调用实例方法的场景中需使用引用传递方式进行开发。在数据处理过程中有需要解析的数据可使用ASON工具进行数据解析。示例如下 // Index.etsimport { taskpool, ArkTSUtils } from kit.ArkTS;import { SendableTestClass, ISendable } from ./sendable; // 在并发函数中模拟数据处理Concurrentasync function taskFunc(sendableObj: SendableTestClass) { console.info(SendableTestClass: name is: sendableObj.printName() , age is: sendableObj.printAge() , sex is: sendableObj.printSex()); sendableObj.setAge(28); console.info(SendableTestClass: age is: sendableObj.printAge()); // 解析sendableObj.arr数据生成JSON字符串 let str ArkTSUtils.ASON.stringify(sendableObj.arr); console.info(SendableTestClass: str is: str); // 解析该数据并生成ISendable数据 let jsonStr {name: Alexa, age: 23, sex: female}; let obj ArkTSUtils.ASON.parse(jsonStr) as ISendable; console.info(SendableTestClass: type is: typeof obj); console.info(SendableTestClass: name is: (obj as object)?.[name]); // 输出: Alexa console.info(SendableTestClass: age is: (obj as object)?.[age]); // 输出: 23 console.info(SendableTestClass: sex is: (obj as object)?.[sex]); // 输出: female}async function test() { // 使用taskpool传递数据 let obj: SendableTestClass new SendableTestClass(); let task: taskpool.Task new taskpool.Task(taskFunc, obj); await taskpool.execute(task);} EntryComponentstruct Index { State message: string Hello World; build() { RelativeContainer() { Text(this.message) .id(HelloWorld) .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: __container__, align: VerticalAlign.Center }, middle: { anchor: __container__, align: HorizontalAlign.Center } }) .onClick(() { test(); }) } .height(100%) .width(100%) }}​​​​​// sendable.ets// 定义模拟类Test模仿开发过程中需传递带方法的classimport { lang, collections } from kit.ArkTSexport type ISendable lang.ISendable;Sendableexport class SendableTestClass { name: string John; age: number 20; sex: string man; arr: collections.Arraynumber new collections.Arraynumber(1, 2, 3); constructor() { } setAge(age: number) : void { this.age age; } printName(): string { return this.name; } printAge(): number { return this.age; } printSex(): string { return this.sex; }}
http://www.w-s-a.com/news/818307/

相关文章:

  • 红色网站建设的比较好的高校用vs2010做购物网站
  • 网站域名备案号查询网页设计实验报告总结模板
  • 什么软件 做短视频网站好大型论坛网站建设
  • 视频网站用什么cms网络运营与维护主要做什么
  • 设计网站主页要多少钱赣州制作网站百度
  • 什么叫高端网站定制网站收录大幅度下降
  • 汝城县网站建设公司aspx网站实例
  • 专业微网站营销diywap手机微网站内容管理系统
  • 盗版做的最好的网站温州logo设计公司
  • 网站建设 中山南充微网站建设
  • 企业网站更新什么内容免费设计软件下载
  • 夏天做哪些网站能致富做网站怎么每天更新内容
  • 个人网站的设计与开发网站建设流程中哪些部分比较重要
  • 招聘网站如何建设中国计算机网络公司排名
  • 工信部网站备案规定厦门在线制作网站
  • 商丘网站公司智联招聘手机app下载
  • 江西专业南昌网站建设中国专业的网站建设
  • 物流企业网站建设方案招标网站有哪些
  • 网站建设服务中企动力建筑工程网络进度计划备注填写范例
  • 电子商务网站开发与建设试卷php网站开发专业
  • 运城网站制作路90江苏省网站备案系统
  • 唐山做企业网站实体门店管理系统
  • 网站优化推广教程深圳网站建设世纪前线
  • 网站建设专家哪家好兰州网络推广执行
  • 广东住房和城乡建设厅网站王芃增加网站收录
  • 北京网站建设手机app电子商务网红营销的劣势
  • 网站 营销型wordpress获取4条文章标题
  • 浦东区建设工程监督网站建立全国统一的突发事件信息系统
  • 做网站需要基础吗重庆市造价信息网
  • 我要建设公司网站大连培训网站建设