您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > Node.js在YunOS中的最佳实践
Node.js在YunOS中的最佳实践叶敬福1摘要• YunOS: 万物互联 • YunOS选择Node.js • Node.js在YunOS中的最佳实践 – 对IO优先的Looper机制的改造和优化 – SAB + Worker机制的实践 – 性能优化的实践 23万物互联4Cloud App应用场景化5CloudAppJSHTML/CSSPageJSAgil-UIPageJS库ServicePagePage1Page2Page3Page4PageLinkPage6Page5Page7PageLinkPageLinkPageLinkPageLinkPageLinkPageLinkPageLinkPages组成的场景Manifest.jsonYunOS选择Node.js6基础技术架构Cloud App FrameworkRendering EngineRun(me & Node.js(VM)YunCore Libs & ServicesYunHALLinux (kernel + drivers)Cloud App7Node.js对YunOS的助力跨端计算无处不在社区开发者生态成熟分发云端一体,即点即用8技术模块化、NaZve互调、事件模型Node.js的不足作为JavaScript虚拟机还不成熟 (缺少完整的libcore) ?9与V8强绑定,解耦或升级很困难 (naZve调用强依赖V8接口) ?CPU密集的计算场景中存在性能问题 (单线程,事件驱动,GC效率低)?Node.js在YunOS中的最佳实践10对IO优先的Looper机制的改造和优化难点: 1. Node.js的消息循环机制完全由IO事件来驱动 2. 终端设备的场景在UI渲染及非IO任务的及时响应的需求Node.js的消息循环:11Pending QueueAcZve QueuetasktaskNode.js Queueuv_async_tYunOS对Looper改造的实践1. 系统任务与Node.js的IO任务融合,两者地位基本平等,系统任务优先级略高2. 系统任务通过异步事件接入Node.js的队列中12SAB+Worker机制的实践YunOS对多任务的需求: 1. 安全沙箱对多进程的限制(不能使用多进程) 2. 实际应用以计算为主(CPU密集),对多任务并行有需求 3. 并行任务在通信上的性能要求Node.js对多任务的支持: 1. 多进程及多进程集群(cluster) 2. Node.js Addon + pthread 3. (JavaScript Webworker + postMessage + onMessage) 13YunOS实现了Worker + SAB: 1. 基于复制进程的方式实现Worker的创建 2. Worker内部支持Node.js的接口 3. SAB(SharedArrayBuffer)基于共享内存的方式实现,实现高效率通信 4. SAB支持转换到TypedArray (如Int32Array等),方便使用 5. SAB实现了Atomics的接口规范,支持互斥访问和同步消息 6. 应用场景:将计算密集型任务从UI线程分离出来,计算完成后通知UI线程MainWorkermem_fdSharedArrayBufferpostMessage()onmessage()14Worker + SAB举例:15性能优化的实践(一)JavaScript to na(ve: 将系统级JS模块合并加载,大幅减少IO次数,提高系统整体效率。Combine JS filesCompress & MinifyCovert to NaZve (so)Compile Zme:Run Zme:Load naZve so (in batch) Compile JS source codeRun JS code16性能优化的实践(二)Code cache: 充分利用V8引擎的能力,预先将JavaScript代码编译好生成cache文件 运行时加载cache文件,跳过编译过程,直接运行预编译的代码,提高运行效率a.jsCompile Zme:V8a.js.cacheRun Zme:requie(‘a.js’);load a.js.cache17ScriptCompiler::Source::GetCachedData()性能优化的实践(三)Lazy Load: require()时不真正加载模块,而是在第一次访问对象的时候才真正加载模块 通过将加载时间分散到运行时刻,减轻启动时的压力,优化启动时间18性能优化的实践(四)其他- Timer coalescing - 模块可卸载 - 模块裁剪 - … 19Thanks!20
本文标题:Node.js在YunOS中的最佳实践
链接地址:https://www.777doc.com/doc-3180986 .html