云顶集团400800044

当前位置:云顶集团400800044 > 云顶集团400800044 > 【云顶娱乐平台注册】2017前端品质优化清单,为

【云顶娱乐平台注册】2017前端品质优化清单,为

来源:http://www.ofertasanjuan.com 作者:云顶集团400800044 时间:2019-11-02 22:50

2017前端质量优化事项清单

2017/04/10 · 基础技能【云顶娱乐平台注册】2017前端品质优化清单,为Web设计员希图的12个HTML5在线工具。 · 性能

原来的文章出处: Xsu Edwan   

您从头选取渐进运营了么?是否已经应用过React和Angular中tree-shakingcode-splitting七个工具?有未有用过Brotli、Zofli和HPACK那三种减弱技艺,也许OCSP合同(在线证书情况合同)?知道还是不知道道能源提示,顾客端提示和CSS containment意气风发类的本领?精通IPv6,HTTP/2和Service Worker那几个公约呢?

纪念那么些年,我们往往在形成了成品以后才会去思量质量。平日把与品质相关的作业拖到项指标终极来做,所做的也但是是对服务器上的config文件举行一些微调、串联、优化以致一些专门小的调解。而现行反革命,技艺早就有了震天动地的变动。

一个项目标属性是特别重要的,除了要在技巧层面上注意,更要在档案的次序的宏图之初就初始怀想,那样本领够使品质的各类潜伏供给周全的咬合到花色中,随着项目同步带动。质量最棒具备可量化、可监测甚至可转移的特性。互联网进一步复杂,对网络的监察也变得更加的难,因为监测的进度会惨被包罗设备、浏览器、左券、互连网项目以至别的本事(CDN,ISP,缓存,代理服务器,防火墙,负载均衡器和服务器对品质的影响都相当的大)的不小影响。

下文是后生可畏份前年的前端质量优化清单,演说了作为前端开荒人士,为了保险上报速度以致浏览器宽容性大家须要思虑的难题。

(你也得以下载checklist PDF或者check in Apple Pages。优化万岁!)

拉长Web页面品质的本事

2016/01/30 · HTML5, JavaScript · 1 评论 · 性能

原稿出处: w3cplus - 南北(@ping4god)   

现在动辄几兆大小的页面加载量,让品质优化成了不可幸免的火热话题。WEB 应用越流畅,客户体验就能够越好,进而带来更加多的访谈量。那也正是,大家理应检查一下这么些过度美化的 CSS3 动画和两种操作的 DOM 成分是或不是都思量到了在品质方面包车型地铁震慑。在说品质优化早前,大家有须要理清浏览器视觉绘制方面包车型地铁五个术语:

  • Repaint(重绘):假如有些操作影响了 DOM 元素的可知性,但又从不影响布局,那么就能够生出浏览器的重绘,例如 opacitybackground-color,visibilityoutline 属性。由于浏览器必得检查 DOM 中全数节点的可以预知性——有些图层只怕会停放重绘元素的图层上面,所以重绘是三个可怜勤奋的逻辑。
  • Reflow(回流):回流是一个更具破坏性的操作,它会让浏览注重新计算有所因素的坐标地方和尺寸大小。往往由于贰个要素的变动,进而引起其子成分、父成分以致隔壁成分的更换。

随意顾客依旧选取自个儿是或不是正在执行某些逻辑,那二种操作都会卡住浏览器进程。极端景况下,四个CSS 效果会回落 JavaScript 的举行进程。下边是触发回流事件的两种情境:

  • 增加、删除和退换可知的 DOM 成分
  • 累计、删除和校正部分 CSS 样式,举个例子校订成分的宽度,会影响其相邻成分的布局地点
  • CSS3 动画和衔接效果
  • 使用 offsetWidthoffsetHeight。这种地步很奇怪,读取贰个要素的 offsetWidthoffsetHeight 属性会触发回流
  • 顾客作为,例如鼠标悬停、输入文本、调度窗口大小、订正字体样式等等

浏览器的平底实现各有不一致,所以渲染页面包车型客车付出也各有高低。幸好我们有风流倜傥部分平日法则能够张开品质优化。

前者质量与充足申报

2018/08/22 · 基本功本事 · 性能

原稿出处: counterxing   

十个简化HTML5编码的在线工具

2011/08/18 · HTML5 · 1 评论 · HTML5

HTML5 鲜明是会彻底退换我们创造网址和Web应用程序。在这里篇作品中,姬恩-Baptiste Jung搜聚收拾了十一个拾壹分强盛的工具,能够简化和增长HTML5编码。

0. HTML5 Reset

HTML5 Reset是帮扶您节省最初新品类时间的生机勃勃组文件(HTML、CSS等)。好信息,HTML 5 空白WordPress宗旨模板也无偿了。

云顶娱乐平台注册 1

1. Initializr

Initializr会为您生成三个绝望的可定制的模板,基于Boilerplate。

2. HTML5 Demos

想明白firefox扶持HTML5 canvas吗? 只怕是Safari能够运作HTML5聊天客商端嘛?HTML5demos 帮您飞速精通如何属性能够用在一定的浏览器上。

3. HTML5 Tracker

想要保留与HTML5接二连三?那要用用这些追踪器吧。

4. HTML5 visual cheat sheet

亟待急迅找到二个标签或品质吗?只要看看在此个可怜酷的小抄,就马到功成了!全体Web开垦人士的移花接木小工具。

5. Switch To HTML5

Switch To HTML5 是个模板生成器,借使您想起来二个新类型,访谈网址,获取无偿的HTML5网址模板吧。

6. Cross browser HTML5 forms

表单是网址的机要组成都部队分,HTML5归纳日历,色板,滑动部件,客户端验证等很好的特性。可是二个难题不容忽略,不是具有的浏览器都协助这几个特征。Crossbrowser HTML5 forms 就派上了用途,化解跨浏览器宽容难点。

7. HTML5 Test

你的浏览器是或不是计划好HTML5的变革呢? HTML5 Test将让您了然。该网址将提供关于你接纳的浏览器是还是不是持有摄像、音频、Canvas等力量的告诉。

8. HTML5 Canvas cheat sheet

Canvas成分是HTML5中二个百般主要并风趣的大器晚成部分,因为它同意你在显示屏上绘制。倘使你必要此外关于canvas成分的帮扶,就用HTML5 Canvas cheat sheet吧。

9. Lime JS

LimeJS是HTML5的游乐框架,扶植触摸屏和桌面浏览器。极屌,必得大器晚成试。

赞 收藏 1 评论

云顶娱乐平台注册 2

为Web设计员未雨准备有备无患的拾三个HTML5在线工具

2011/10/27 · HTML5 · 1 评论 · HTML5

注:克罗地亚语原作 webdesignledger

HTML5 日渐销路好,不管是作为开垦者照旧设计师来说,本文专为 Web 设计员介绍 10 个在线的 HTML5 工具。

Online Sprite Box Tool

  照片压缩在后天不胜流行,它拉动许Dolly益,可收缩带宽占用和进步加载速度。该工具使用 jQuery /CSS3 和 HTML5 开拓,通过豆蔻年华对一情势来调度你的肖像。

Online Font Testing Tool

  二个荣耀的字体是任何网页设计的一个可怜首要的后生可畏部分,它是后生可畏种职责,每多个设计员,要挑最棒的的书体。在线字体育项目检查测试试工具是四个耸人听新闻说的字体书签,让你登时在七个新的书体查看的其余网页,以至尚未改善任何 HTML 或 CSS。您能够拖动到最上端的工具栏 font.ttf 文件,然后他们将要急速查看列表中呈现。相当多无需付费网址存在在此,你所要做的是简轻便单地输入到Google的“字体”。

Online Velocity Sketch Tool

云顶娱乐平台注册 3

  那是二个在线应用 HTML5 Canvas 手艺的绘图工具

Online Pattern Generator Tool

云顶娱乐平台注册 4

  Online Pattern Generator Tool 是多少个太帅的工具,可让网页设计员创设页面背景以至底部背景,提供一大波的参数用来调动背景。

Online XRay Tool

云顶娱乐平台注册 5

  该工具得以让您直观的来得页面各样要素的详细情形。

Online Automatoon (animation) Tool

云顶娱乐平台注册 6

  那是二个纯 HTML5 工具,不要求 Flash 意味着你的办事可支撑 一加/平板电脑和 Android 设备。  
  Online HTML5 Audio Maker Tool

云顶娱乐平台注册 7

  HTML5 能够让我们应用 audio 标签,Online HTML5 奥迪(Audi)o Maker Tool 是一个很棒的工具用来更便捷的生成 audio 标签。

Online SVG to HTML5 Canvas Tool

云顶娱乐平台注册 8

  大相当多矢量图制作软件 (Illustrator, Inkscape 等) 可导出 SVG 文件 (Scalable Vector Graphics). 该工具得以让您将 SVG 文件转成 HTML5 Canvas ,十分酷吧?

Chrome Ajax Animator Tool

云顶娱乐平台注册 9

  Chrome Ajax Animator Tool 是四个依据 HTML5 的 web 动画套件,可在线和离线使用,但只帮忙 Chrome 浏览器。

 

赞 1 收藏 1 评论

云顶娱乐平台注册 10

正文

微优化是涵养质量最佳的法子,不过又无法有太过刚毅的优化指标,因为过度鲜明的指标会影响在类型中做的每多个调节。以下是一些例外的模型,请依照自身舒服的相继阅读。

动用最棒施行所提议的布局技艺

虽说早正是 二零一五 了,但自个儿要么要说毫无使用行内联样式和 table 布局。

HTML 文书档案下载完毕后,行内样式会触发三回额外的回流事件。剖析器在解析 table 布局时索要计算大批量的单元格的尺码,所以是件非常重的操作。由于单元格往往是依据表头宽度鲜明的,所以选取 table-layout: fixed 能够解决部分特性消耗。

运用 Flexbox 布局也存在质量损失,因为在页面加载成功后,flex item 可能会时有发生地方和尺寸的转移。

概述

对今后台开荒以来,记录日志是黄金年代种极其普及的付出习贯,平时大家会使用try...catch代码块来积极抓获错误、对于每一回接口调用,也会记录下每趟接口调用的时辰花费,以便大家监察和控制服务器接口质量,进行难题排查。

刚进商铺时,在扩充Node.js的接口开荒时,作者不太习于旧贯每趟排查难点都要经过跳板机登上服务器看日志,后来日益习贯了这种方法。

举个例证:

JavaScript

/** * 获取列表数据 * @parma req, res */ exports.getList = async function (req, res) { //获取诉求参数 const openId = req.session.userinfo.openId; logger.info(`handler getList, user openId is ${openId}`); try { // 得到列表数据 const startTime = new Date().getTime(); let res = await ListService.getListFromDB(openId); logger.info(`handler getList, ListService.getListFromDB cost time ${new Date().getTime() - startDate}`); // 对数据管理,重回给前端 // ... } catch(error) { logger.error(`handler getList is error, ${JSON.stringify(error)}`); } };

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 获取列表数据
* @parma req, res
*/
exports.getList = async function (req, res) {
    //获取请求参数
    const openId = req.session.userinfo.openId;
    logger.info(`handler getList, user openId is ${openId}`);
 
    try {
        // 拿到列表数据
        const startTime = new Date().getTime();
        let res = await ListService.getListFromDB(openId);
        logger.info(`handler getList, ListService.getListFromDB cost time ${new Date().getTime() - startDate}`);
        // 对数据处理,返回给前端
        // ...
    } catch(error) {
        logger.error(`handler getList is error, ${JSON.stringify(error)}`);
    }
};

以下代码平时会冒出在用Node.js的接口中,在接口中会计算查询DB所耗费时间间、亦也许总计RPC服务调用所耗费时间间,以便监测品质瓶颈,对质量做优化;又可能对特别使用try ... catch积极抓获,以便任何时候对难题开展追思、还原难题的场所,进行bug的修复。

而对于前端来讲呢?能够看之下的气象。

几日前在展开贰个供给开采时,不经常开掘webgl渲染影象退步的景观,恐怕说印象会冷俊不禁深入深入分析战败的图景,大家兴许平素不知情哪张影象会深入解析或渲染退步;又或如那二日支付的其它一个急需,大家会做二个关于webgl渲染时间的优化和形象预加载的必要,如果远远不够品质监察和控制,该怎么着总括所做的渲染优化和形象预加载优化的优化比例,怎样声明自个儿所做的作业具备价值呢?只怕是透过测量检验同学的黑盒测量试验,对优化前后的光阴开展录屏,分析从步入页面到印象渲染达成到底经过了有个别帧图像。那样的多寡,恐怕既不可靠、又比较片面,设想测验同学并非真的的客户,也不能够苏醒真实的顾客他们所处的互连网遭遇。回过头来发掘,大家的花色,尽管在服务端层面做好了日志和质量计算,但在前端对那三个的督查和总体性的总计。对于前端的性质与丰硕申报的主旋律搜求是有至关重大的。

请计划好然后定下目的!

精简 CSS 样式

体制越少,回流越快,此外,尽量不要选择过度复杂的选取器。这一问题更是卓绝在行使相仿Bootstrap 框架的网址上。使用 Unused CSS,uCSS,grunt-uncss 和 gulp-uncss 等工具得以使得去除无用样式。

非常捕获

对在此以前端来讲,大家须求的丰硕捕获无非为以下两种:

  • 接口调用情形;
  • 页面逻辑是否错误,比如,客户走入页面后页面呈现白屏;

对于接口调用景况,在前面一个平常须求报告客户端相关参数,比方:客户OS与浏览器版本、诉求参数(如页面ID);而对此页面逻辑是或不是错误难点,平常除了客户OS与浏览器版本外,要求的是报错的库房音信及具体报错地方。

1. 比你最强的角逐敌手快五分二

依靠一个心情学钻探,你的网址最少在速度上比人家快五分二,本领让顾客认为到您的网址比外人的更加快。这么些速度说的不是百分百页面包车型大巴加载时间,而是伊始加载渲染的时刻,第二次有效渲染时间(比方页面须求加载首要内容的小运),或然彼那时候间(指的是页面也许使用中重要的页面加载成功,并主备好与客户进行交互的时日)。

在Moto G(或中端Samsung装备)和Nexus 4(相比主流的设备)上度量先导渲染时间(用WebPagetest)以致首页有效渲染时间(用Lighthouse),最佳是在四个吐放的实验室中,使用正规的3G,4G和Wi-Fi链接。

云顶娱乐平台注册 11
Lighthouse,三个谷歌开辟的新的属性核查工具

您能够因而你的剖判报告看看你的顾客处于哪个阶段,选拔当中前十分之九的客户体验来做测验。接着访问数据,建二个表格,筛去伍分之一的数量并预设一个对象(如:个性预算)。将来您可以将上述三个值进行自己检查自纠检查实验。要是您意气风发味维持着您的对象并且通过一点一点变动脚本去加快交互时间,那么上述方式正是客观可行的。

云顶娱乐平台注册 12
由Brad Frost创设的特性深入分析

和你的同事分享那份清单。首先要保障组织中的各样人都心中有数那份项目清单。项目中每三个说了算都会潜移暗化属性,若是前端程序员们都在积极的参预项目概念,UX以致视觉设计的主宰,那将会给整个项目带动宏大收益。地图设计的操纵违反了质量理念,所以她在此份清单内的依次有待思虑。

精简 DOM 层级

简练 DOM 层级,指的是减少 DOM 树的级数已经每一分支上 DOM 成分的数目,结果就是层级越少、数量越少,回流越快。别的,若无供给想念旧版本浏览器,应该尽或许剔除无意义的包裹类标签和层级。

丰硕捕获方法

2. 反应时间为100阿秒,帧数是每秒60帧

RAIL品质模型会为您提供二个优良的对象,既尽最大的奋力在顾客最早操作后的100皮秒内提供报告。为了完结这一个指标,页面必要丢弃权限,并将权限在50微秒内交回给主线程。对于像动画片同样的高压点,最佳的不二秘诀就是什么样都不做,因为您长久不只怕到达最小相对值。
同理,动画的每意气风发帧都须要在16飞秒内成功,那样本领有限帮助每秒60帧(风流倜傥秒/60=16.6阿秒),要是能够的话最佳能(CANON)在10纳秒内形成。因为浏览器需求一定的时刻去在显示屏上渲染新的帧,並且你的代码须要在16.6纳秒内达成实行。要留意,上述指标应用于衡量项目标周转质量,而非加载质量。

细粒度操作 DOM 树

操作 DOM 树时的粒度要硬着头皮细化,这有利于减少局地 DOM 变化给全部拉动的影响。

全局捕获

能够通过全局监听十分来捕获,通过window.onerror或者addEventListener,看之下例子:

JavaScript

window.onerror = function(errorMessage, scriptU君越I, lineNo, columnNo, error) { console.log('errorMessage: ' + errorMessage); // 至极音信console.log('scriptULacrosseI: ' + scriptU君越I); // 非凡文件路径console.log('lineNo: ' + lineNo); // 十分行号 console.log('columnNo: ' + columnNo); // 十分列号 console.log('error: ' + error); // 格外客栈音讯// ... // 卓殊上报 }; throw new Error('那是二个错误');

1
2
3
4
5
6
7
8
9
10
window.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error) {
  console.log('errorMessage: ' + errorMessage); // 异常信息
  console.log('scriptURI: ' + scriptURI); // 异常文件路径
  console.log('lineNo: ' + lineNo); // 异常行号
  console.log('columnNo: ' + columnNo); // 异常列号
  console.log('error: ' + error); // 异常堆栈信息
  // ...
  // 异常上报
};
throw new Error('这是一个错误');

云顶娱乐平台注册 13

通过window.onerror事件,能够拿走具体的极度音讯、分外文件的U奥迪Q5L、万分的行号与列号及非常的库房音信,再捕获至极后,统黄金年代申报至大家的日志服务器。

亦或是,通过window.addEventListener方法来进展非常申报,道理同理:

JavaScript

window.addEventListener('error', function() { console.log(error); // ... // 至极上报 }); throw new Error('这是三个八花九裂');

1
2
3
4
5
6
window.addEventListener('error', function() {
  console.log(error);
  // ...
  // 异常上报
});
throw new Error('这是一个错误');

云顶娱乐平台注册 14

3. 第二遍有效渲染时间要低于1.25秒,进程指数要低于1000

固然那个指标落到实处起来特别不便,你的最后目的也应有是让开端渲染时间低于1秒且速度指数小于1000(在网速快的地点)。对于首回有效渲染时间,上限最佳是1250纳秒。对于移动端,3G下活动器械第三遍渲染时间低于3秒都以能够选择的。微微高级中学一年级些也没提到,但千万别高太多。

从文档流中移除复杂的动画效果

应当保险使用动画片的要素脱离了文书档案流,使用 position: absoluteposition: fixed 属性脱离文书档案流的元素会被浏览器创造一个新层来寄放,那一个图层上的改革不会潜濡默化别的图层上的要素。

try… catch

使用try... catch就算能够较好地拓宽丰裕捕获,不至于使得页面由于意气风发处错误挂掉,但try ... catch抓获格局浮现过于痴肥,繁多代码应用try ... catch装进,影响代码可读性。

概念你所要求的景况

巧用隐瞒模式

使用 display: none; 掩没的要素不会触发页面包车型地铁重绘和回流事件,所以能够在这里些因素隐讳时期布置体制,配置完成后再转换为可以知道状态。

科学普及难点

4. 采撷和设置你的开辟条件

毫无过多的爱戴当下最风靡的工具,坚威武不能屈选取适合自身开销条件的工具,举例Grunt、Gulp、Webpack、PostCSS,大概组合起来的工具。只要那一个工具运维的进程够快,何况未有给你的保护带来太大标题,那就够了。

批量翻新成分

单词更新具备 DOM 元素的性质要优于数次翻新。上面这段代码触发了一回页面回流:

var myelement = document.getElementById('myelement'); myelement.width = '100px'; myelement.height = '200px'; myelement.style.margin = '10px';

1
2
3
4
var myelement = document.getElementById('myelement');
myelement.width = '100px';
myelement.height = '200px';
myelement.style.margin = '10px';

经过以下代码能够简单为一回页面回流事件,而且提升了代码的可维护性:

var myelement = document.getElementById('myelement'); myelement.classList.add('newstyles'); .newstyles { width: 100px; height: 200px; margin: 10px; }

1
2
3
4
5
6
7
8
var myelement = document.getElementById('myelement');
myelement.classList.add('newstyles');
 
.newstyles {
    width: 100px;
    height: 200px;
    margin: 10px;
}

同理,我们还足以减少操作 DOM 的效用。若是大家要开创五个之类所示的冬季列表:

云顶娱乐平台注册 15

若是分次增添每多个 item 将会触发数十次页面回流,不难而高速的章程是采纳 DOM fargment 在内部存储器中开创完整的 DOM 节点,然后叁次性增进到 DOM 中:

var i, li, frag = document.createDocumentFragment(), ul = frag.appendChild(document.createElement('ul')); for (i = 1; i <= 3; i++) { li = ul.appendChild(document.createElement('li')); li.textContent = 'item ' + i; } document.body.appendChild(frag);

1
2
3
4
5
6
7
8
9
10
11
var
    i, li,
    frag = document.createDocumentFragment(),
    ul = frag.appendChild(document.createElement('ul'));
 
for (i = 1; i <= 3; i++) {
    li = ul.appendChild(document.createElement('li'));
    li.textContent = 'item ' + i;
}
 
document.body.appendChild(frag);

跨域脚本不可能正确捕获卓殊

平日状态下,大家会把静态能源,如JavaScript剧本放到特地的静态资源服务器,亦只怕CDN,看之下例子:

<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> // 在index.html window.onerror = function(errorMessage, scriptUSportageI, lineNo, columnNo, error) { console.log('errorMessage: ' + errorMessage); // 非常消息console.log('scriptU福特ExplorerI: ' + scriptU福睿斯I); // 非常文件路线console.log('lineNo: ' + lineNo); // 格外行号 console.log('columnNo: ' + columnNo); // 卓殊列号 console.log('error: ' + error); // 非常仓库信息// ... // 卓殊上报 }; </script> <script src="./error.js"></script> </body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
  <script type="text/javascript">
    // 在index.html
    window.onerror = function(errorMessage, scriptURI, lineNo, columnNo, error) {
      console.log('errorMessage: ' + errorMessage); // 异常信息
      console.log('scriptURI: ' + scriptURI); // 异常文件路径
      console.log('lineNo: ' + lineNo); // 异常行号
      console.log('columnNo: ' + columnNo); // 异常列号
      console.log('error: ' + error); // 异常堆栈信息
      // ...
      // 异常上报
    };
 
  </script>
  <script src="./error.js"></script>
</body>
</html>

JavaScript

// error.js throw new Error('那是三个荒诞');

1
2
// error.js
throw new Error('这是一个错误');

云顶娱乐平台注册 16

结果展现,跨域之后window.onerror平素捕获不到科学的十三分消息,而是统风华正茂重返一个Script error

技术方案:对script标签扩展一个crossorigin=”anonymous”,并且服务器增添Access-Control-Allow-Origin

<script src="" crossorigin="anonymous"></script>

1
<script src="http://cdn.xxx.com/index.js" crossorigin="anonymous"></script>

5. 渐进巩固(progressive enhancement)

在构建前端结构的时候,应始终将渐进加强用作你的指导标准。首先设计还要营造主题体验,随后再周全那么些为高质量浏览器设计的高端性子的相干经验,创设弹性体验。尽管你的网页可以在选拔低速互联网、老旧显示屏的比相当的慢的管理器上运维高效,那么在光导纤维高配Computer上它只会运作的更加快。

自律成分变化的熏陶

此处的束缚是指,尽量幸免某些成分的更换引起大面积的变迁。即使大家有三个tab 选项卡的零件,选项卡内部的内容犬牙相制,那就招致了种种选项卡的冲天不唯生龙活虎。那大器晚成企划带来的难点就是历次切换选项卡时,左近的因素都要再一次布局。大家得以经过多个稳固高度来幸免这场地。

sourceMap

常备在生育景况下的代码是透过webpack装进后减弱混淆的代码,所以我们可能会境遇那样的标题,如图所示:

云顶娱乐平台注册 17

作者们开掘装有的报错的代码行数都在首先行了,为啥吗?那是因为在生产意况下,我们的代码被压缩成了一站式:

JavaScript

!function(e){var n={};function r(o){if(n[o])return n[o].exports;var t=n[o]={i:o,l:!1,exports:{}};return e[o].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=e,r.c=n,r.d=function(e,n,o){r.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,n){if(1&n&&(e=r(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var t in e)r.d(o,t,function(n){return e[n]}.bind(null,t));return o},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=0)}([function(e,n){throw window.onerror=function(e,n,r,o,t){console.log("errorMessage: "+e),console.log("scriptURI: "+n),console.log("lineNo: "+r),console.log("columnNo: "+o),console.log("error: "+t);var l={errorMessage:e||null,scriptURI:n||null,lineNo:r||null,columnNo:o||null,stack:t&&t.stack?t.stack:null};if(XMLHttpRequest){var u=new XMLHttpRequest;u.open("post","/middleware/errorMsg",!0),u.setRequestHeader("Content-Type","application/json"),u.send(JSON.stringify(l))}},new Error("那是贰个乖谬")}]);

1
!function(e){var n={};function r(o){if(n[o])return n[o].exports;var t=n[o]={i:o,l:!1,exports:{}};return e[o].call(t.exports,t,t.exports,r),t.l=!0,t.exports}r.m=e,r.c=n,r.d=function(e,n,o){r.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:o})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,n){if(1&n&&(e=r(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var t in e)r.d(o,t,function(n){return e[n]}.bind(null,t));return o},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=0)}([function(e,n){throw window.onerror=function(e,n,r,o,t){console.log("errorMessage: "+e),console.log("scriptURI: "+n),console.log("lineNo: "+r),console.log("columnNo: "+o),console.log("error: "+t);var l={errorMessage:e||null,scriptURI:n||null,lineNo:r||null,columnNo:o||null,stack:t&&t.stack?t.stack:null};if(XMLHttpRequest){var u=new XMLHttpRequest;u.open("post","/middleware/errorMsg",!0),u.setRequestHeader("Content-Type","application/json"),u.send(JSON.stringify(l))}},new Error("这是一个错误")}]);

在自家的支出进度中也遇到过那一个难点,作者在开辟两个职能组件库的时候,使用npm link了自己的组件库,然则由于组件库被npm link后是包装后的生产条件下的代码,全体的报错都稳固到了第大器晚成行。

消亡办法是敞开webpacksource-map,大家选择webpack包裹后的变化的风度翩翩份.map的本子文件就能够让浏览器对错误地方进行追踪了。此处能够参见webpack document。

实际正是webpack.config.js中丰盛大器晚成行devtool: 'source-map',如下所示,为示范的webpack.config.js

JavaScript

var path = require('path'); module.exports = { devtool: 'source-map', mode: 'development', entry: './client/index.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'client') } }

1
2
3
4
5
6
7
8
9
10
var path = require('path');
module.exports = {
    devtool: 'source-map',
    mode: 'development',
    entry: './client/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'client')
    }
}

webpack卷入后变卦对应的source-map,这样浏览器就能够稳固到具体错误的职位:

云顶娱乐平台注册 18

开启source-map的毛病是宽容性,方今只有Chrome浏览器和Firefox浏览器才对source-map支撑。可是大家对那生龙活虎类情况也会有清除办法。能够动用引进npm库来扶助source-map,能够参照mozilla/source-map。这个npm库既可以够运作在顾客端也得以运作在服务端,可是更为推荐的是在服务端使用Node.js对接受到的日记新闻时接纳source-map解析,以制止源代码的败露导致风险,如下代码所示:

JavaScript

const express = require('express'); const fs = require('fs'); const router = express.Router(); const sourceMap = require('source-map'); const path = require('path'); const resolve = file => path.resolve(__dirname, file); // 定义post接口 router.get('/error/', async function(req, res) { // 获取前端传过来的报错对象 let error = JSON.parse(req.query.error); let url = error.scriptU奥德赛I; // 压缩文件路线if (url) { let fileUrl = url.slice(url.indexOf('client/')) + '.map'; // map文件路线 // 拆解深入分析sourceMap let consumer = await new sourceMap.SourceMapConsumer(fs.readFileSync(resolve('../' + fileUrl), 'utf8')); // 重临五个promise对象 // 深入解析原始报错数据 let result = consumer.originalPositionFor({ line: error.lineNo, // 压缩后的行号 column: error.columnNo // 压缩后的列号 }); console.log(result); } }); module.exports = router;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const express = require('express');
const fs = require('fs');
const router = express.Router();
const sourceMap = require('source-map');
const path = require('path');
const resolve = file => path.resolve(__dirname, file);
// 定义post接口
router.get('/error/', async function(req, res) {
    // 获取前端传过来的报错对象
    let error = JSON.parse(req.query.error);
    let url = error.scriptURI; // 压缩文件路径
    if (url) {
        let fileUrl = url.slice(url.indexOf('client/')) + '.map'; // map文件路径
        // 解析sourceMap
        let consumer = await new sourceMap.SourceMapConsumer(fs.readFileSync(resolve('../' + fileUrl), 'utf8')); // 返回一个promise对象
        // 解析原始报错数据
        let result = consumer.originalPositionFor({
            line: error.lineNo, // 压缩后的行号
            column: error.columnNo // 压缩后的列号
        });
        console.log(result);
    }
});
module.exports = router;

正如图所示,大家曾经可以观望,在服务端已经成功解析出了现实错误的行号、列号,大家得以因而日记的秘诀张开记录,达到了前面一个至极监察和控制的指标。

云顶娱乐平台注册 19

本文由云顶集团400800044发布于云顶集团400800044,转载请注明出处:【云顶娱乐平台注册】2017前端品质优化清单,为

关键词: