14-企鹅电竞Weex实践和性能优化-渠宏伟

Similar documents
Hippy-VueConf

05.(最终版)手机淘宝 H5 和 Weex 容器的构建实践-云栖-2016-鬼道.key

付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

可 Web 编程的NativeUI 设计与实现

无类继承.key

Intruduction to the NGINX stream subsystem and OpenResty's support


ii Vue Bootstrap 4 ES 6 Vue Vue Bootstrap 4 ES 6 Vue 2 vue html vue html vue Vue HTML 5 CSS ES 6 HTML 5 CSS Visual Studio Code h

5-1 nav css 5-2

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas

Microsoft Word - 01.DOC

AS北京2017-《知乎 Feed 流构架演进》-姚钢强.key

清华大学2013年毕业生就业质量报告

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

领导,我不想写CSS代码.key

itestin 能 干 什 么? itestin 是 云 测 ( 提 供 给 广 大 移 动 应 用 测 试 者 或 者 开 发 者 免 费 使 用 的 一 款 安 卓 UI 自 动 化 测 试 录 制 工 具 ( 目 前 只 支 持 Android 应 用 程 序 的

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

Microsoft Word - 改版式网页全文.doc

Microsoft Word - 最新正文.doc

06 01 action JavaScript action jquery jquery AJAX CSS jquery CSS jquery HTML CSS jquery.css() getter setter.css('backgroundcolor') jquery CSS b

第 三 条 基 金 管 理 人 基 金 托 管 人 和 基 金 份 额 持 有 人 的 权 利 义 务, 依 照 本 法 在 基 金 合 同 中 约 定 基 金 管 理 人 基 金 托 管 人 依 照 本 法 和 基 金 合 同 的 约 定, 履 行 受 托 职 责 通 过 公 开 募 集 方 式

Microsoft Word - PHP7Ch01.docx

Qcon北京2018-《唯快不破——高效定位线上 Node.js 应用内存泄漏》-黄一君

标题,黑体18号

暴风云视点播解决方案

RUN_PC連載_8_.doc

南京市人才服务中心

标题

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

PowerPoint 演示文稿

Adobe AIR 安全性

基于Electron-vue的桌应用实战2

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

總行總務室

Chapter V.S. PC

1. 2. Flex Adobe 3.

引 言 车 队 管 理 应 用 车 联 网 技 术 的 几 个 必 要 条 件 : 1 是 否 支 持 车 机 插 拔 报 警?( 绝 大 多 数 人 潜 意 识 中 对 被 监 控 和 被 管 理 是 抗 拒 的, 我 们 调 查 了 很 多 现 有 车 队 管 理 系 统, 管 理 者 最 头

中国软件2013校园招聘通知

DU Ad Platform_SDK for Android 接 入 手册 Version: DuWeatherSDK_1.1.6 前提 : DuWeather SDK 需要依赖 DU Ad Platform_SDK HW 或 CW ( 含 ) 以上版本 在接 入 DuW

目 录 概 述 背 景 社 会 背 景 行 业 背 景 需 求 分 析..6 3 优 势 分 析 资 源 优 势 品 牌 优 势 技 术 优 势 用 户 体 验.....

ycq.key

Microsoft Word PHPCh15.docx

Microsoft Word - ch04三校.doc

Python 和 人 工智能基 础课程 ( 第 二课 ) 张威, 雷雷萧萧

! 2000 CSSsprites.com Web FTP app 20% 80% getelementbyid() UI Facebook F8 Web CSSsprites.com Web JavaScript CSS React xi React UI UI 反應 UI 宣告 d

2 SGML, XML Document Traditional WYSIWYG Document Content Presentation Content Presentation Structure Structure? XML/SGML 3 2 SGML SGML Standard Gener

(改)AI时代的移动技术革新-Node全栈-i5ting.key

开发技术大揭秘册子内页_Vol.3_1123_预览版

Tangram For GMTC 2017.key

bootstrap - 2

國家圖書館典藏電子全文

中南大学第二届软件创新大赛

ac2017-joeyguo-2.0.key

概述

untitled

RUN_PC連載_10_.doc

第 一 部 分 广 州 市 人 力 资 源 和 社 会 保 障 局 概 况 一 广 州 市 人 力 资 源 和 社 会 保 障 局 主 要 职 能 ( 一 ) 贯 彻 执 行 国 家 和 省 市 人 力 资 源 和 社 会 保 障 事 业 发 展 的 法 律 法 规 和 方 针 政 策, 拟 订 本

不不可能完成的任务从 用户空间窃取内核数据 Yueqiang Cheng, Zhaofeng Chen, Yulong Zhang, Yu Ding, Tao Wei Baidu Security

公開徵求廠商提供「採購專業人員訓練計畫企劃書」公告

untitled

untitled

状 态, 规 划 车 辆 行 驶 路 径, 可 进 入 网 站 充 电 服 务 栏 目 (2) 查 询 位 置 联 系 方 式 营 业 时 间 等 信 息, 可 进 入 网 站 服 务 指 南 栏 目 建 议 您 出 行 前 通 过 易 充 电 互 动 网 站 提 前 了 解 所 经 高 速 快 充

TVS厂商接入流程API文档

untitled

01

互動網頁技術系列課程 HTML與CSS網站基礎設計 [12pt]

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

GIS数据展示系统用户操作手册

幻灯片 1

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

安友医疗科技(武汉)有限责任公司

ESP-TOUCH_User_Guide__CN.pages

第53期内页.cdr

1406.indd

上图专刊2006-3AAA.doc

衡山靈學創始人 超越時代的靈學明師 許衡山 老師 許衡山老師 出生於西元 1942 年 於 1980 年代啟發先天眼竅 自證其道 了悟真理 許 老師首先發現 人人皆可開發出第三眼能力與靈性能量 並藉由系統化的研究 將種種 生命現象與宇宙真理做深入淺出的剖析 並為生命的最終意義指出一條明路 現代文明昌

슬로시티번역,더빙 등 보고서(중문)_두현.hwp


?



EP.pdf

untitled

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

投影片 1

<4D F736F F D C4EABCC6CBE3BBFAB4F3C8FCCDA8D6AA E646F63>

2

汇集全球21位医生的经验和智慧,总结出最实用的专业建议,这些都是最值得你牢记的健康提醒

1 行 业 发 展 不 平 衡 我 国 房 地 产 中 介 服 务 业 起 步 较 晚, 专 业 分 工 程 度 和 国 外 发 达 国 家 相 比 还 有 很 大 差 距 房 地 产 中 介 服 务 行 业 的 发 展 水 平 与 房 地 产 开 发 行 业 的 市 场 化 水 平 密 切 相 关

財金資訊-83期.indd

HTML5 & CSS3 色彩 背景與漸層屬性 12-1 (color property) CSS 3 color HTML opacity HTML CSS Color Module Level 3 W3C CSS

新美大酒店开放平台SDK(.NET版)使用说明.pages

CHAPTER 1

untitled

<4D F736F F D C2E0BEC7A6D2A4ADB14DB0EAA4E52DB8D5C344A8F72E646F63>

untitled

本 课 程 作 为 非 计 算 机 专 业 本 科 通 识 课 程, 是 一 门 理 论 和 实 践 紧 密 结 合 的 实 用 课 程, 内 容 包 括 计 算 机 基 础 部 分 和 程 序 设 计 部 分 计 算 机 基 础 部 分 涵 盖 计 算 机 软 硬 件 组 成 数 制 表 示 操

变 量 的 主 要 作 用 是 存 取 数 据 提 供 存 放 信 息 的 容 器 对 于 变 量 必 须 明 确 变 量 的 命 名 变 量 的 类 型 变 量 的 声 明 及 其 变 量 的 作 用 域 JavaScript 是 一 种 弱 类 型 语 言, 也 就 是 说, 在 声 明 变 量

Transcription:

企鹅电竞Weex实践和性能优化 渠宏伟

Contents 01 02 03 接 入和收益 努 力力填坑 性能优化

H5 页面存在的问题 加载耗时 长 WebView 启动慢 资源加载慢 交互体验差 长列列表滚动 测滑不不流畅

H5 极速加载方案 VasSonic WebView 和 页 面并 行行加载 资源离线预推 页 面局部刷新 动态缓存 H5 页 面 首屏实现秒开 https://github.com/tencent/vassonic

企鹅电竞Weex实践 前端 页 面原 生渲染 增强前端 页 面体验 一次开发 支持三端 Android ios H5 运 行行 提 高开发效率

企鹅电竞 Weex 实践 300 2000 250 200 1500 150 H5 1000 H5 100 50 Weex 500 Weex 0 内存 (m) FPS( 帧 / 秒 ) 0 加载耗时 (ms) 内存降低 45%, 帧率提 高 15.7%; 打开耗时下降 44.9% 开发效率 比终端提升 40%, 有效释放终端开发 人 力力 页 面更更新不不依赖版本发布, 特性发布效率提升

构建流程改造 实际业务 比较复杂, 时常需要在 webview 中增加 一些特殊逻辑 将特殊逻辑 冗余代码打 入到终端运 行行的 JSBundle 并不不合理理

构建流程改造 分离 入 口再引 用相同的 app.js, 可以让 web 版本和 weex 版本保持相同逻辑, 也可以独 立扩展, 互不不影响

接头暗号 头部的 {"framework": "Vue" 告诉解析器器 用 Vue 的语法解析 JSBundle 如果删除了了这 行行注释, 将会 白屏 // { "framework": "Vue" /******/ (function(modules) {... /******/ ) Uglify 压缩会删除注释, 导致 接头暗号 被删除 压缩必须放在插 入 framework 之前 plugins:[ //uglify 必须在 bannerplugin 前面 new webpack.optimize.uglifyjsplugin({compress: {warnings: false), ] new webpack.bannerplugin({ banner: '// { "framework": "Vue" \n', raw: true )

调用终端接口 在 webview 中使 用插 入 iframe 或者 img 的 方式传 schema 协议与终端通信 现有业务有 大量量的 jsapi, 如果全部改造成 module 工程量量很 大 企鹅电竞扩展了了 一个公共的 jsbridge 的 module 用于转发 jsapi, 底层 jsapi 的解析和逻辑保持不不变

获取 cookie H5 中我们使 用 document.cookie 可以获取浏览器器的 cookie 信息 在 weex 中如何实现? 我们利利 用 weex 提供的扩展 Module 的能 力力, 在终端中扩展 一个获取 cookie 的 方法 / 获取 cookies export async function getcookies() { if (typeof document === 'object' && typeof document.cookie!== 'undefined') { return document.cookie else { return await getnativecookie() // 从终端获取 cookies export function getnativecookie() { let datafetch = weex.requiremodule('datafetch') return new Promise((resolve, reject) => { datafetch.fetch('cookie', function (map) { let result = map.result if (result === 0) { resolve(map.data) else { reject(map.message) ) )

支持 cookie ios 基于 UI webview 共享 cookie ios 天然 支持请求带上 cookie android 需要终端 支持, 也能实现请求 自动带 cookie

获取 useragent 在 weex.config.env 添加 useragent 属性 需要注意的是, 从 weex 实例例中获取的 useragent 是静态的 一旦 weex 实例例创建就固定下来, 终端修改 UA 也不不会跟着变化 export default function () { let useragent = '' if (typeof weex === 'object' && weex.config && weex.config.env) { useragent = weex.config.env.useragent '' else if (typeof window === 'object' && window.navigator) { useragent = window.navigator.useragent '' return useragent

如何实现 1px let env = weex.config.env let devicewidth = env.devicewidth let scale = env.scale // 获取布局宽度 export function getpx(pt) { return pt * 750 / ( devicewidth / scale ) // 获取真实宽度 export function getpt(px) { return px * (devicewidth / scale) / 750

横屏适配 function gethwidth (w) { return devicewidth / w * 750 const meta = weex.requiremodule('meta') // 配置 viewport 的宽度为 meta.setviewport({ width: gethwidth(w) // w 为设计稿宽度 )

:class 语法限制 :class="[showbottomborder? 'ui-border-b' : '']" // 只支持数组语法 :class="showbottomborder? 'ui-border-b' : ''" // 不支持三元运算符 :class="{ 'ui-border-b': showbottomborder " // 不支持对象语法

点击态 项 目 比较常 见的点击态多半是透明度的变化, 如按钮 列列表 链接等, css 的做法是添加伪类 (:active), weex 中也同样 支持, 但是 weex 需要在原样式中添加 opacity:1, 否则点击后回不不到初始状态 ; 此外,:active 使 用时,backgroundimage 在 ios 下会失效 <template> <div class="ui-btn"> <text class="ui-btn-text"> 下载 </text> </div> </template> <style scoped>.ui-btn{ opacity: 1; /* 必须添加 */.ui-btn:active{ opacity:.5; </style>

文本截断 文本从限制 1 行行到不不限制可以 用 lines:0 <template> <text class="info-text" @click="textclick" :style="textstyle"> 城市赛战报, 王者荣耀 城市赛郑州站欢乐落幕城市赛战报, 王者荣耀 城市赛郑州站欢乐落幕城市赛战报, 王者荣耀 城市赛郑州站欢乐落幕城市赛战报, 王者荣耀 城市赛郑州站欢乐落幕 </text> </template> <style scoped>.info-text{ lines:1; text-overflow:ellipsis; </style> <script> export default { data(){ return { textstyle:{ ;, methods:{ textclick(){ this.textstyle = { lines:0 </script>

圆角抖动问题 问题存在于android下 weex sdk 配合在新版本weex sdk解决了了这个问题

终端 crash 问题 Android ios OOM PaintDrawable 在 API 21 下偶现渲染 crash Bitmap 回收后继续使 用导致 crash instance 被销毁后调 用 Toast 的 NPE 问题 WXThread.secure 反射调 用异常 未显示禁 用estimatedRowHeight 导致 tableview 在更更新数据源时偶现 crash 布局时 node->get_child 返回空指针导致 crash text component 渲染和测量量 高度时偶现 crash Android 接 入 Weex crash 率 0.13% -> 1.01%

自动化测试方案 生成的终端 view 中的 id 是 weex sdk 自动 生成的 自动化测试系统 无法识别 借助 无障碍化 arialabel 属性作为原 生 view 自动化测试标签 <div :accessibile= true arialabel= pageend index div 游戏首页 "></div>

数据缓存优化 1 使 用 storage 缓存接 口请求数据 2 优先使 用本地缓存数据, 同步请求更更新缓存数据和 页 面 /** * @desc 缓存辅助函数 */ export function cachehelper(key, fetchhelper, callback) { log(' 开始获取 storage:' + Date.now()) getstorageitem(key).then(result => { // 命中缓存, 优先使用缓存 callback && callback(null, Object.assign({, result, {'$_thisiscache': true), true) // 命中缓存后, 拉取数据更新 fetchdata(key, fetchhelper, callback) ).catch(err => { // 未命中缓存, 拉取数据 fetchdata(key, fetchhelper, callback) ) function fetchdata(key, fetchhelper, callback) { fetchhelper && fetchhelper.then(data => { setstorageitem(key, data) // 设置缓存 return data ).then(data => callback && callback(null, data)).catch(err => callback(err))

数据缓存优化

jsbundle 预缓存优化 1 在现有的 weex 页 面配置 文件的基础上增加 一个字段 preload, 当此字段值为 1 时候, 对 jsbundle 文件进 行行预缓存 2 提供 js api : [ ] game_index:{ is_weex: 1. weex: 'http://cdn.egame.qq.com/game-weex/weex/game-index/app.js?v=518', web: 'http://cdn.egame.qq.com/game-weex/page/game-index.html', preload:1 biz/preload 提供给前端进 行行对下 一个 页 面的预加载 biz/clearproload 用于前端对于既有缓存内容的清空 3 对于缓存内容, 使 用 LRU 的算法进 行行管理理, 控制缓存总 大 小为 20M 4 对于使 用缓存的内容, 终端在 ua 上添加 一个字段 PRELOAD/1 ; 1 表示是预缓存内容, 0 表示不不是

jsbundle 预缓存优化

耗时打点统计 1. 拦截请求开始 请求完成 RenderFinish 计算 网络耗时 ( 请求结束 - 请求开始 ) 终端渲染耗时 (RenderFinish - 请求结束 ) 2. 终端通过 js api 提供前端创建 instnace 时间点 3. 终端 前端两份上报, 相互校验数据

终端接口调用耗时优化 1 Android 升级 weex 0.16 版本 module 接 口调 用耗时 大幅减少 2 减少启动 页 面时并发调 用 module 接 口 版本初次调 用耗时 二次调 用初次回调耗时 二次回调耗时 0.12.0 50-60 30-40 10 10 0.16.0 5-6 2-3 2 2 3 Android 调 用时多次反射获取类名导致 Dom 渲染耗时过 长

Android Bitmap 内存优化 版本 crash 率主要 crash 3.1.0 0.13% 系统 crash, 业务逻辑错误等 3.2.0 1.01% OOM SIGSEGV(SEGV_MAPERR) 使 用 Fresco 管线加载图 片, 加载后不不持有图 片引 用 问题 : a 会将 用户当前不不展示的图 片也加载到内存中, 实际占 用内存变多,OOM 问题严重 b 引 用不不被持有会导致 Bitmap 被回收后仍然被使 用 (3.2-3.4 版本 top crash SIGSEGV (SEGV_MAPERR)) 优化 : 仿照 Fresco 的 DraweeController 管理理 WXImageView 的 bitmap 引 用 显示时加载, 隐藏时解除引 用等待回收 OOM 问题明显缓解,bitmap 被回收的 crash 问题也得到解决

GPU 过度绘制优化 1 尽量量不不要设置背景 色 2 不不要过度嵌套, 结构尽量量扁平化

Weex 实践分享 内部影响力

希望优化的问题 横竖屏切换方案支持 支持 armabi-v7a 的 so 包 组件统一开源 : 例如 jscore 内核 debugger gcanvas 更好的性能细分统计 高效的终端和 Weex 共享动态数据方案 更好的容错 : ios JS call Native 时, 参数传错会造成终端 crash

https://weex.apache.org