ac2017-joeyguo-2.0.key

Similar documents
Intruduction to the NGINX stream subsystem and OpenResty's support

(Microsoft Word - 11\244T\246\342\277\337\260l\302\334.doc)

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

Hippy-VueConf

标题

标题

[Table_MainInfo]

python_free

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

API网关在大数据开放中的应用-童剑-v0.3.key

國立中山大學學位論文典藏.PDF

天仁期末個人報告1.PDF

入 大 立立 手 口 面 耳 鼻 耳 鼻 子 耳 鼻 生 生 耳 鼻 耳 鼻 耳 鼻 小 手 入 大 一 支 手 入 支 立立 手 入 支 手 入 石 口 口 支 手 支 手 手 支 入 入 入 人 人 人 人 人 田 手 入 耳 鼻 手 入 小 一 支 人 見見 赤 十 耳 鼻 金金 口 手 支

网易云上的第一跨境电商技术架构-最终版0713.key

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

<4D F736F F D A67EABD7A4BAB3A1B1B1A8EEA8EEABD7A6DBA6E6B5FBA6F4AD70B5652E646F63>

统计工作情况汇报

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

目 录 第 一 章 地 方 陪 同 导 游 人 员 服 务 程 序...1 第 一 节 地 方 陪 同 导 游 人 员 的 概 念 与 职 责...1 第 二 节 服 务 准 备...2 一 熟 悉 接 待 计 划...2 二 落 实 接 待 事 宜...5 三 物 质 和 知 识 的 准 备...

走 吧, 到 三 峡 去 : 那 里 是 我 们 先 人 用 生 命 之 血 打 造 的 家 园 走 吧, 到 三 峡 去 : 那 里 的 浪 涛 承 载 过 千 百 万 只 我 们 先 人 驶 向 今 天 的 航 船 走 吧, 到 三 峡 去 : 那 里 的 每 一 座 青 山 都 刻 满 了 我

6寸PDF生成工具

Microsoft Word - 送報伕2.doc

Microsoft Word - N011 斷翅天使

中 国 科 学 院 国 家 科 学 图 书 馆

申论写作套路万能模板

申 请 律 师 执 业 许 可 初 审 服 务 指 南 目 录 一 办 理 要 素 ( 一 ) 事 项 名 称 和 编 码 4 ( 二 ) 实 施 机 构 4 ( 三 ) 申 请 主 体 4 ( 四 ) 受 理 地 点 4 ( 五 ) 办 理 依 据 4 ( 六 ) 办 理 条 件 5 ( 七 )

( 地 ( ) 组 织 机 构 代 码 企 业 详 细 名 称 哈 密 地 伊 吾 新 疆 广 汇 新 能 源 有 限 公 司 玛 纳 斯 玛 纳 斯 祥 云 化 纤 有 限 公 司 玛 纳 斯 玛 纳 斯 澳 洋 科 技 有 限 责

图 文 聚 焦 国 培 计 划 (2013) 甘 肃 省 农 村 小 学 音 乐 骨 干 教 师 短 期 集 中 培 训 9 月 4 日 开 班 了, 学 员 老 师 们 从 甘 肃 省 各 个 县 市 州 汇 聚 湖 南 一 师, 开 始 了 为 期 14 天 的 培 训 学 习 : 鲜 明 的

申請機構基本資料

申請機構基本資料

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

环 境, 我 在 巩 固 在 校 期 间 所 学 习 的 理 论 知 识 的 同 时, 不 断 的 充 实 己, 利 用 业 余 时 间 主 动 学 习 专 业 知 识, 技 能, 把 理 论 联 系 到 工 作 实 践 中 作 为 一 名 工 作 生 活 中 的 党 员, 我 始 终 注 意 与

附件1

~2~

,,

untitled


安 徽 蓝 皮 书 社 会 济 的 快 速 发 展 ; 文 化 惠 民 工 程 的 实 施, 推 动 了 文 化 产 业 持 续 繁 荣 ; 对 民 生 工 程 的 重 视, 保 障 了 安 徽 社 会 的 和 谐 稳 定 与 此 同 时, 安 徽 仍 然 存 在 经 济 总 量 不 大 城 乡 居

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

AS北京2017-《美团点评用户行为分析系统的构建与优化》-孙业锐.key

朱君标-Need for Speed:菜鸟技术全栈化之路-finally.key

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

5A-ESP8266__SDK__SSL_User_Manual__CN.pages

Bilibili海量监测平台的演进之路

构建高效的私有云平台V3

5B_sasaki.pdf

区块链和 HyperLedger Fabric 系列列公开课 每周四晚 8 点档 1. 区块链商 用之道 2. HyperLedger 项 目与社区概览 3. HyperLedger Fabric 架构解读 4. ChainCode 实战 5. HyperLedger Fabric 中的共享账本 6

开发者报告中文版改表头-zc

学技术练英语.key

Tangram For GMTC 2017.key

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

PPT.key

TVS厂商接入流程API文档


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

前瞻性声明 该陈述载有 1995 年年美国私 人证券诉讼改 革法案所界定的 前瞻性陈述 及适 用加拿 大证券法所界定的 前瞻性资料料 本 文所 用的该等前瞻性陈述及资料料包括但不不限于有关中国 黄 金金国际资源的预期未来业绩的陈述, 包括贵 金金属及基本 金金属产量量 储量量及资源量量 扩 大矿区及

ESP-TOUCH_User_Guide__CN.pages

HiEX交易所白皮书3.0

spacex-giac

2014北京四中初二上期中数学(含解析)

中国区块链50城之成都

8

lecture11

目录

电商 高可 用架构解决 方案实践 随着众多企业客户对于业务延续性需求的增加, 传统业务中的停机维护窗 口越来越 小, 甚 至在很多互联 网类型的应 用中要求 7 24 小时不间断服务, 导致系统对业务 IT 的运维能 力力 持续服务能 力力 高可 用能 力力以及灾难恢复能 力力都有着新的需求 如何通

Microsoft Word 國立政治大學NMUN代表團活動企劃書.docx

201806fuchsia.key

2017全球云计算开源峰会-张鑫.key

Chap06


持续集成下的开发分支模型.key

河南省全 民健身操舞推 广委员会 豫健字 号关于举办 2017 年年全国全 民健身操舞教练员 裁判员培训班 ( 郑州站 ) 通知各有关单位 : 为了了贯彻落实 全 民健身条例例, 进 一步推动全 民健身运动的有序发展, 培养全国全 民健身操舞项 目的 骨 干师资和裁判员, 配合国家

IJCAI_2018

HTML5安全问题

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

4B-ESP8266__AT Command Examples__CN.pages

Sqoop使用简介

网络空间的货币竞争与合作

MobileCoin Whitepaper CN_FINAL.pages

海通证券金融云思考与实践(数据技术嘉年华)的副本.key

Chap07

习题课

5-1 nav css 5-2

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

( 含 要 ) 1-2 用 或 雇 用, 抑 或 有 無 俸 給 文 職 或 武 職, 政 官 或 事 官 均 屬 之, 其 不 以 具 備 人 資 格 為 限, 因 此 屬 於 最 廣 義 之 念 四 廣 義 念 之 依 服 24 條 之 規 定 : 本 於 受 有 俸 給 之 文 武 職, 及


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

you have a dream, you got to protect it

ext-web-auth-wlc.pdf

BT&BLE_Coexistence_Demo__CN.pages

bp

商家后台操作手册

1

k8s_dns_v1

1.6-8

原创性与微创新

LV1

Transcription:

大型 Web 项 目可 用性提升 零脚本错误的实战 郭林林烁 2017.10

郭林林烁 (joeyguo) @ 腾讯 AlloyTeam

1 社区的相关提问

错误信息分析与优化 如何发现代码出了了问题? 开发测试与脚本错误 Web 安全与脚本错误 基础的监控体系组成

1 如何发现线上代码出了了问题?

1 不不可能有问题! 我的代码不不可能有问题!

2 不不可能不不可能不不可能

3 测试 / 用户反馈 有问题 有问题 有问题 有问题 有问题 有问题 这 里里有问题 有问题 有问题

4 遇 见问题 这 页 面怎么打不不开啊? 我是 老老板 前端? 后台? 能否复现? 前端 后台 测试

xx 手机, 能够复现了了 原来是前端兼容问题, 难怪浏览器器是正常的 老老板, 问题修复了了 我是 老老板 修复速度太慢了了!

及时发现 方便便解决总结沉淀 打造线上监控系统, 及时发现问题, 解决问题

2 监控系统 监控 上报 信息收集

1 偷听 ( 监控 ) 系统基本组成 偷听监控 报警上报 现场还原数据呈现 警局信息收集

2 监控系统基本组成 1 代码监控 2 数据上报 3 数据收集系统

3 监控 方式 监控的 方式主要有两种 try-catch 预料料之内的错误 window.onerror 预料料之外的错误 并 非 非此即彼, 可结合使 用 try-catch 异步错误 无法捕获

4 上报 方式 通过 Ajax 发送数据 动态创建 img 标签的形式

5 信息收集监控系统 提供上报接 口 存储上报数据 数据分析展示

3 错误信息分析与优化

1 错误信息分析 Script error.

2 产 生 Script error. 的原因 浏览器器安全策略略, 跨域报错信息 无权限获得 http://trac.webkit.org/browser/trunk/source/webcore/dom/scriptexecutioncontext.cpp

3 优化 Script error. 同源处理理 Inline 内联代码 外链同域名 外链灰度同域 ( 20% )

4 优化 Script error. 利利 用跨源资源共享机制 (CORS) script 标签添加 crossorigin 属性 响应头增加 Access-Control-Allow-Origin 响应头中需带上 Vary:Origin http://a.com http://a.com http://a.com/index.html <script src= //qq.com/main.js" crossorigin></script>

5 Vary:Origin 的作 用 Vary 为缓存服务器器提供缓存规则及缓存筛选的依据 Vary:Origin 表示在缓存筛选时, 将结合请求的 Origin 进 行行区分 www.qq.com/main.js http://a.com http://a.com www.qq.com/main.js http://b.com http://a.com

进 行行脚本错误分析

6 错误信息分析 代码压缩后, 定错出错代码困难

让脚本错误 一 目了了然

1 让脚本错误 一 目了了然 不不压缩代码 代码 大 小变 大很多 源代码泄露露

2 让脚本错误 一 目了了然 半压缩 分号换空格 / 保留留空格换 行行 通过特征值快速找到报错代码 代码 大 小相对压缩则仍有所变 大

3 让脚本错误 一 目了了然 使 用 SourceMap 快速定位 SourceMap 维护源 文件盒处理理后 文件的映射关系 使 用 VLQ 编码来存储映射 源 文件 生成 文件 SourceMap 文件

4 让脚本错误 一 目了了然 利利 用 SourceMap 结合 生成 文件的 行行列列定位到源 文件位置 SourceMap 文件 源 文件路路径 处理理 源 文件 行行列列数 生成 文件 行行列列数 原变量量名!function(n){function r(e){if(t[e])return t[e].exports;var o=t[e]={i:e,l:! 1,exports:{}};return n[e].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=n,r.c=t,r.i=function(n){return n},r.d=function(n,t,e){r.o(n,t) Object.defineProperty(n,t,{configurable:!1,enumerable:! 0,get:e})},r.n=function(n){var t=n&&n. esmodule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,r) {return Object.prototype.hasOwnProperty.call(n,r)},r.p="",r(r.s=0)} ([function(n,r){function t(){noerror}t()}]); sourcemap + 行行列列数 function init() { noerror; // } 需要 支持 sourcemap 生成 不不会增加线上代码 大 小

5 基于 SourceMap 脚本报错监控系统 方案 SourceMap 统 一存储 脚本错误处理理平台 SouceMap 文件 3 处理理 错误信息展示平台 错误信息 源代码 1 2 错误上报 外 网环境 发布 文件

6 基于 SourceMap 脚本报错监 方案示例例 https://github.com/joeyguo/noerror

7 开源 方案 sentry 错误列列表 错误量量告警 项 目的团队管理理 指定修复负责 人 进展与记录 邮件通知 https://github.com/getsentry/sentry

8 发现代码不不存在的错误信息 这报错信息在代码中不不存在! 页 面被注 入了了别的代码?

4 Web 安全与脚本错误

1 监控 上报 监控 上报 非 白名单中的前端资源 监听 document 的 onload 事件, 对加载的 src 内容进 行行上报 只上报 非 白名单的资源 偷听监控

2 数据分析, 场景还原

CSP 内容安全策略略 白名单 可信任的内容来源 非 白名单 无法正常执 行行

1 CSP (Content Security Policy) CSP 使 用 方式 HTML Meta 标签 <meta http-equiv="content-security-policy" content="script-src 'self'"> HTTP Header ( 响应头带上 CSP 的指令 )

2 CSP 配置 两种策略略 上报 Content-Security-Policy-Report-Only 不不拦截 只上报 拦截 Content-Security-Policy 1 进 行行拦截 阻 止执 行行 多类参数

3 脚本错误量量越来越少 线上的脚本错误量量变少了了! 开发测试, 从 源头 减少错误

5 开发测试与脚本错误

1 测试客户端内嵌 页 面脚本报错 报错了了! 网络问题? 缓存导致? CGI 没返回? 发现不不及时定位困难

js-error-dialog 脚本错误弹窗组件 https://github.com/joeyguo/js-error-dialog

1 测试客户端内嵌 页 面脚本报错 报错 自动唤起 ( 及时 可视化 )?!

2 js-error-dialog 拷 贝错误信息 ( 易易传播 ) 弹出错误提示 点击拷 贝, 发送给我

3 js-error-dialog 错误信息还原 ( 可视化 ) 打开错误 页 面, 增加 jed 参数, 自动唤起输 入框 粘贴错误信息, 查看 生成报告

js-error-dialog 原理理分析

1 js-error-dialog 基础组成 现场分析 偷听监控 当场抓错误信息展示

2 js-error-dialog 信息 详细的错误信息 - 基础报错信息与 自定义信息 报错信息 U/A 客户端版本 - 查看压缩代码格式化的位置 精确地看到具体报错代码

3 js-error-dialog 实现核 心 将压缩代码格式化并找到对应位置!function(n){function r(e){if(t[e])return t[e].exports;var o=t[e]={i:e,l:! 1,exports:{}};return n[e].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=n,r.c=t,r.i=function(n){return n},r.d=function(n,t,e){r.o(n,t) Object.defineProperty(n,t,{configurable:!1,enumerable:! 0,get:e})},r.n=function(n){var t=n&&n. esmodule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,r) {return Object.prototype.hasOwnProperty.call(n,r)},r.p="",r(r.s=0)} ([function(n,r){function t(){noerror}t()}]);!function(n) { //... //... }([ function(n, r) { function t() { noerror; } t(); } ]);

4 将压缩代码格式化并找到对应位置 原理理分析 prettyjs 1 压缩 文件 ( 源 ) 格式化 文件 ( 生成 ) 资源体积过 大? SourceMap 文件 2 格式化 文件路路径 3 压缩 文件 行行列列数 处理理 文件 行行列列数 代码 高亮展示 原变量量名 https://github.com/joeyguo/prettyjs

5 js-error-dialog 执 行行流程 js-error-dialog 监控 入 口 代码格式化 sourcemap 代码 高亮 错误展示 动态拉取 prettyjs 报错更更容易易发现, 线上错误更更加少了了!

拓拓展 基于 prettyjs 脚本报错监控系统 方案

1 基于 prettyjs 脚本报错监控系统 方案 不不增加线上代码 大 小 脚本错误处理理平台 不不需要 支持 sourcemap 生成 通过特征值快速找到报错代码 错误信息 prettyjs 3 错误信息展示平台 2 错误上报 源代码 1 发布 文件 外 网环境

6 回顾

1 回顾 如何发现代码出了了问题? 监控体系基础组成 错误信息分析与优化 针对 Web 安全的脚本错误优化 针对开发测试的脚本错误优化

2 相关内容 脚本错误量量极致优化 - 监控上报与 Script error https://github.com/joeyguo/blog/issues/13 脚本错误量量极致优化 - 让脚本错误 一 目了了然 https://github.com/joeyguo/blog/issues/14 XSS 终结者 -CSP 理理论与实践 https://github.com/joeyguo/blog/issues/5 noerror https://github.com/joeyguo/noerror js-beautify-sourcemap https://github.com/joeyguo/js-beautify-sourcemap js-error-dialog https://github.com/joeyguo/js-error-dialog prettyjs https://github.com/joeyguo/prettyjs

THANK YOU