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

官网建站平台网站做服务端

官网建站平台,网站做服务端,国家认可的赚钱游戏无广告,wordpress批量删除字段前言 当我们的项目中假设出现了下面几种场景#xff1a; 点击按钮后#xff0c;页面无响应页面跳转后显示白屏页面卡顿...... 这些情况都是非常影响用户体验的#xff0c;对于用户来说#xff0c;是难以接受的#xff0c;用户可能就此流失掉了。 因此前端非常有必要针对…前言 当我们的项目中假设出现了下面几种场景 点击按钮后页面无响应页面跳转后显示白屏页面卡顿...... 这些情况都是非常影响用户体验的对于用户来说是难以接受的用户可能就此流失掉了。 因此前端非常有必要针对异常做一下处理 一、什么是异常 异常Exception。在程序中因为语法的疏忽或其他原因而导致程序中途崩溃的情况称之为异常。 二、异常的类型 从根本上来说异常就是一个数据类型它有一个Error类而其他异常则是它的子类。 在JS运行时可能会发生的错误有很多类型每一种错误都有对应的错误类型而当错误发生的时候就会抛出响应的错误对象。 以下是ECMA-262 白皮书 13 版中描述了 8 种异常类型 Error异常基类其他错误都继承自该类型SyntaxError语法异常ReferenceError引用异常尝试引用一个未被定义的变量时将会抛出此异常RangeError范围异常数组越界InternalError内部异常TypeError: 类型异常用来表示值的类型非预期类型时发生的错误EvalError: Eval方法异常URIError: URI 相关方法产生的异常 三、异常的捕获 1、try-catch ECMA-262 第 3 版中引入了 try-catch 语句作为 JavaScript 中处理异常的一种标准方式基本的语法如下所示。这和 Java 中的 try-catch 语句是全完相同的。 try {// 可能会导致错误的代码 } catch (error) {// 在错误发生时怎么处理 } 如果 try 块中的任何代码发生了错误就会立即退出代码执行过程然后执行 catch 块。此时 catch 块会接收到一个包含错误信息的对象这个对象中包含的信息因浏览器而异但共同的是有一个保存着错误信息的 message 属性。 finally 子句在 try-catch 语句中是可选的但是 finally 子句一经使用其代码无论如何都会执行。换句话说try 语句块中代码全部正常执行finally 子句会执行如果因为出错执行了 catch 语句finally 子句照样会执行。只要代码中包含 finally 子句则无论 try 或 catch 语句中包含什么代码——甚至是 return 语句都不会阻止 finally 子句执行。来看下面函数的执行结果 function testFinally {try {return 出去玩;} catch (error) {return 看电视;} finally {return 做作业;}return 睡觉; } 表面上调用这个函数会返回 出去玩因为返回 出去玩 的语句位于 try 语句块中而执行此语句又不会出错。实际上返回 做作业因为最后还有 finally 子句结果就会导致 try 块里的 return 语句被忽略也就是说调用的结果只能返回 做作业。如果把 finally 语句拿掉这个函数将返回 出去玩。因此在使用 finally 子句之前一定要非常清楚你想让代码怎么样。思考一下如果 catch 块和 finally 块都抛出异常catch 块的异常是否能抛出 但令人遗憾的是try-catch 无法处理异步代码和一些其他场景。接下来让我具体分析几种异常场景及其处理方案。 2、window.onerror 当 JS 运行时错误发生时window 会触发一个 ErrorEvent 接口的 error 事件并执行window.onerror()。 /*** param {String}  message    错误信息* param {String}  source     出错文件* param {Number}  lineno     行号* param {Number}  colno      列号* param {Object}  error      Error对象对象*/ window.onerror function (message, source, lineno, colno, error) {console.log(捕获到异常, { message, source, lineno, colno, error }) } 同步错误可以捕获到但是请注意 window.error 无法捕获静态资源异常和 JS 代码错误。 3、静态资源加载异常 方法一onerror 来捕获 script function errorHandler(error) {console.log(捕获到静态资源加载异常, error) } /script script srchttp://cdn.xxx.com/js/test.js onerrorerrorHandler(this)/script link relstylesheet hrefhttp://cdn.xxx.com/styles/test.css onerrorerrorHandler(this) / 这样可以拿到静态资源的错误但缺点很明显代码的侵入性太强了每一个静态资源标签都要加上 onerror 方法。 方法二addEventListener(error) !DOCTYPE html html langzhheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleerror/titlescriptwindow.addEventListener(error, (error)  {console.log(捕获到异常, error);}, true)/script /headbodyimg srchttps://itemcdn.zcycdn.com/15af41ec-e6cb-4478-8fad-1a47402f0f25.png /body/html 由于网络请求异常不会事件冒泡因此必须在捕获阶段将其捕捉到才行但是这种方式虽然可以捕捉到网络请求的异常但是无法判断 HTTP 的状态是 404 还是其他比如 500 等等所以还需要配合服务端日志才进行排查分析才可以。 4、Promise 异常 Promise 中的异常不能被 try-catch 和 window.onerror 捕获这时候我们就需要监听 unhandledrejection 来帮我们捕获这部分错误。 window.addEventListener(unhandledrejection, function (e) {e.preventDefault()console.log(捕获到 promise 错误了)console.log(错误的原因是, e.reason)console.log(Promise 对象是, e.promise)return true })Promise.reject(promise error) new Promise((resolve, reject) {reject(promise error) }) new Promise((resolve) {resolve() }).then(() {throw promise error }) 5、请求异常 以最常用的 HTTP 请求库 axios 为例模拟接口响应 401 的情况 // 请求 axios.get(/api/test/401) Uncaught (in promise) Error: Request failed with status code 401 at createError (axios.js:1207) at settle (axios.js:1177) at XMLHttpRequest.handleLoad (axios.js:1037) 可以看出来 axios 的异常可以当做 Promise 异常来处理 // 请求 axios.get(http://localhost:3000/api/uitest/sentry/401) .then((data) console.log(接口请求成功, data)) .catch((e) console.log(接口请求出错, e)) # 结果 接口请求出错 Error: Request failed with status code 401 at createError (createError.js:17) at settle (settle.js:18) at XMLHttpRequest.handleLoad (xhr.js:62) 一般接口 401 就代表用户未登录就需要跳转到登录页让用户进行重新登录但如果每个请求方法都需要写一遍跳转登录页的逻辑就很麻烦了这时候就会考虑使用 axios 的拦截器来做统一梳理同理能统一处理的异常也可以在放在拦截器里处理。 // Add a response interceptor axios.interceptors.response.use(function (response) {// Any status codes that falls outside the range of 2xx cause this function to trigger// Do something with response error},function (error) {if (error.response.status 401) {goLogin() // 跳转登录页} else if (error.response.status 502) {alert(error.response.data.message || 系统升级中请稍后重试)}return Promise.reject(error.response)} ) 6、React 异常 React 处理异常的方式不同。虽然 try-catch 适用于许多非普通 JavaScript 应用程序但它只适用于命令式代码。因为 React 组件是声明性的所以 try-catch 不是一个可靠的选项。为了弥补这一点React 实现了所谓的错误边界。错误边界是 React 组件它“捕获子组件树中的任何地方的 JavaScript 错误”同时还记录错误并显示回退用户界面。 class ErrorBoundary extends React.Component {constructor(props) {super(props)this.state { hasError: false }}componentDidCatch(error, info) {// 展示出错的UIthis.setState({ hasError: true }) // 将错误信息上报到日志服务器logErrorToMyService(error, info)}render() {if (this.state.hasError) {// 可以展示自定义的错误样式return h1Something went wrong./h1}return this.props.children} } 但是需要注意的是 error boundaries 并不会捕捉下面这些错误 事件处理器异步代码服务端的渲染代码在 error boundaries 区域内的错误 我们可以这样使用 ErrorBoundary ErrorBoundaryMyWidget / /ErrorBoundary 7、Vue 异常 全局异常捕获 Vue.config.errorHandler Vue.config.errorHandler (err, vm, info) {console.error(通过vue errorHandler捕获的错误)console.error(err)console.error(vm)console.error(info) } 组件内异常捕获 组件内使用errorCaptured 8、总结 异常处理时需分清是致命错误还是非致命错误。 可疑区域增加 try-catch全局监控 JS 异常 window.onerror全局监控静态资源异常 window.addEventListener捕获没有 catch 的 Promise 异常用 unhandledrejectionVue errorHandler 和 React componentDidCatchAxios 请求统一异常处理用拦截器 interceptors使用日志监控服务收集用户错误信息 四、异常上报 异常捕获之后接下来就是数据上报的工作了。 目前主要由以下3种上报信息方式 方案 优点 缺点 img请求 兼容性 部分浏览器丢点延迟页面卸载 get请求长度限制 Fetch/XHR 兼容性 Fetch丢点同步 XHR不丢点但延迟页面卸载 Navigator.sendBeacon() 不丢点不会延迟页面卸载 兼容性 丢点在浏览器点击跳转时跳转前的点击上报请求都会进行一个三次握手如果此时网络较慢、服务器运行缓慢或者上报请求还在处理阶段这时如果页面被卸载了浏览器都会自动对当前的请求进行abort。这样这个http的请求就没有建立导致上报没有真正发出。 下面的例子展示了一个理论上的统计代码——在卸载事件处理器中尝试通过一个同步的 XMLHttpRequest 向服务器发送数据。这导致了页面卸载被延迟。 window.addEventListener(unload, logData, false) function logData() {var client new XMLHttpRequest()client.open(POST, /log, false) // 第三个参数表明是同步的 xhrclient.setRequestHeader(Content-Type, text/plain;charsetUTF-8)client.send(analyticsData) } 这就是 sendBeacon() 方法存在的意义。使用 sendBeacon() 方法会使用户代理在有机会时异步地向服务器发送数据同时不会延迟页面的卸载或影响下一导航的载入性能。这就解决了提交分析数据时的所有的问题数据可靠传输异步并且不会影响下一页面的加载。此外代码实际上还要比其他技术简单许多 下面的例子展示了一个理论上的统计代码模式——通过使用 sendBeacon() 方法向服务器发送数据。 window.addEventListener(unload, logData, false);function logData() {navigator.sendBeacon(/log, analyticsData); } 所以这里的推荐是优先检查浏览器是否支持Navigator.sendBeacon()不支持的话再使用其他上报方式。 参考资料 ecma-262: https://www.ecma-international.org/publications-and-standards/standards/ecma-262/ ES6th 白皮书: https://262.ecma-international.org/6.0 https://juejin.cn/post/6932620551827488775 https://juejin.cn/post/6936562262480158728
文章转载自:
http://www.morning.gjcdr.cn.gov.cn.gjcdr.cn
http://www.morning.njftk.cn.gov.cn.njftk.cn
http://www.morning.qbkw.cn.gov.cn.qbkw.cn
http://www.morning.xqjh.cn.gov.cn.xqjh.cn
http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn
http://www.morning.rbnp.cn.gov.cn.rbnp.cn
http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn
http://www.morning.xylxm.cn.gov.cn.xylxm.cn
http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn
http://www.morning.sgjw.cn.gov.cn.sgjw.cn
http://www.morning.wmgjq.cn.gov.cn.wmgjq.cn
http://www.morning.rrdch.cn.gov.cn.rrdch.cn
http://www.morning.sbkb.cn.gov.cn.sbkb.cn
http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn
http://www.morning.rwbx.cn.gov.cn.rwbx.cn
http://www.morning.brwei.com.gov.cn.brwei.com
http://www.morning.jynzb.cn.gov.cn.jynzb.cn
http://www.morning.yjprj.cn.gov.cn.yjprj.cn
http://www.morning.ymjrg.cn.gov.cn.ymjrg.cn
http://www.morning.dbphz.cn.gov.cn.dbphz.cn
http://www.morning.frxsl.cn.gov.cn.frxsl.cn
http://www.morning.qncqd.cn.gov.cn.qncqd.cn
http://www.morning.rkfh.cn.gov.cn.rkfh.cn
http://www.morning.jxgyg.cn.gov.cn.jxgyg.cn
http://www.morning.rjfr.cn.gov.cn.rjfr.cn
http://www.morning.qkdbz.cn.gov.cn.qkdbz.cn
http://www.morning.kgxyd.cn.gov.cn.kgxyd.cn
http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn
http://www.morning.wgcng.cn.gov.cn.wgcng.cn
http://www.morning.bpmfg.cn.gov.cn.bpmfg.cn
http://www.morning.yrdkl.cn.gov.cn.yrdkl.cn
http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn
http://www.morning.wdxr.cn.gov.cn.wdxr.cn
http://www.morning.sgbss.cn.gov.cn.sgbss.cn
http://www.morning.rytps.cn.gov.cn.rytps.cn
http://www.morning.npmx.cn.gov.cn.npmx.cn
http://www.morning.hbfqm.cn.gov.cn.hbfqm.cn
http://www.morning.swzpx.cn.gov.cn.swzpx.cn
http://www.morning.rqwwm.cn.gov.cn.rqwwm.cn
http://www.morning.brscd.cn.gov.cn.brscd.cn
http://www.morning.cxtbh.cn.gov.cn.cxtbh.cn
http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn
http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn
http://www.morning.myrmm.cn.gov.cn.myrmm.cn
http://www.morning.cflxx.cn.gov.cn.cflxx.cn
http://www.morning.csxlm.cn.gov.cn.csxlm.cn
http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn
http://www.morning.nkddq.cn.gov.cn.nkddq.cn
http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn
http://www.morning.scrnt.cn.gov.cn.scrnt.cn
http://www.morning.lwbhw.cn.gov.cn.lwbhw.cn
http://www.morning.hxmqb.cn.gov.cn.hxmqb.cn
http://www.morning.fldsb.cn.gov.cn.fldsb.cn
http://www.morning.whnps.cn.gov.cn.whnps.cn
http://www.morning.pwbps.cn.gov.cn.pwbps.cn
http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn
http://www.morning.dhdzz.cn.gov.cn.dhdzz.cn
http://www.morning.nstml.cn.gov.cn.nstml.cn
http://www.morning.wfkbk.cn.gov.cn.wfkbk.cn
http://www.morning.zffps.cn.gov.cn.zffps.cn
http://www.morning.qgghr.cn.gov.cn.qgghr.cn
http://www.morning.zhoer.com.gov.cn.zhoer.com
http://www.morning.kwyq.cn.gov.cn.kwyq.cn
http://www.morning.kgtyj.cn.gov.cn.kgtyj.cn
http://www.morning.mxnrl.cn.gov.cn.mxnrl.cn
http://www.morning.crhd.cn.gov.cn.crhd.cn
http://www.morning.rtzd.cn.gov.cn.rtzd.cn
http://www.morning.hqgxz.cn.gov.cn.hqgxz.cn
http://www.morning.rkck.cn.gov.cn.rkck.cn
http://www.morning.kwksj.cn.gov.cn.kwksj.cn
http://www.morning.ngkgy.cn.gov.cn.ngkgy.cn
http://www.morning.tlpgp.cn.gov.cn.tlpgp.cn
http://www.morning.wglhz.cn.gov.cn.wglhz.cn
http://www.morning.zgdnz.cn.gov.cn.zgdnz.cn
http://www.morning.thwcg.cn.gov.cn.thwcg.cn
http://www.morning.qgmbx.cn.gov.cn.qgmbx.cn
http://www.morning.djbhz.cn.gov.cn.djbhz.cn
http://www.morning.wgzgr.cn.gov.cn.wgzgr.cn
http://www.morning.nhrkl.cn.gov.cn.nhrkl.cn
http://www.morning.hqpyt.cn.gov.cn.hqpyt.cn
http://www.tj-hxxt.cn/news/255560.html

相关文章:

  • 果园网站建设网络营销是什么基础
  • 文昌湖城乡建设局网站重庆微信网站开发公
  • 拥有服务器后如何做网站长宁区科技网站建设
  • 企业建设网站选择南昌专业网站建设公司哪家好
  • 网站建设一年多少钱wordpress别名
  • 如何做网站的主页腾讯云网站备案
  • 网站页面做专题的步骤做网站准备内容
  • 福建省 园区网互联及网站建设 网络部分题目小程序商城多少钱
  • 罗湖网站建设设计设计公司网站
  • 宜兴营销型网站建设新手如何学编程
  • 领诺科技网站建设建站系统网站建设
  • 建网站的软件有哪些长沙网站推广系统
  • 通信技术公司网站建设虚拟主机与网站建设
  • 网站建设sycmjz西安竞价托管
  • 网站建设费用计入哪个会计科目河南省城市建设网站
  • 郴州市网站建设科技沪佳装修口碑怎么样
  • seo网站打开慢帮别人做网站犯法吗
  • 网站后台生成静态页面一流的句容网站建设
  • 网站建设贰金手指科杰2中小企业网络拓扑图绘制
  • 亚马逊的网站建设分析研究院 网站建设
  • 在北京建设教育协会的网站彩页设计素材
  • 不同用户入口的网站样板网页设计公司如何看待极简风格
  • 杭州网站外包网页游戏开服表最新
  • 网络科技公司网站源码下载什么行业必须做网站
  • 网站建设维护培训会上的讲话wordpress编辑文章图片文字对齐
  • 蚌埠网站建设公司福州市做网站公司
  • 帮公司做网站赚钱吗大型网站 jquery
  • 网站icp备案查询合肥seo推广排名
  • 山东青岛网站建设公司免费自助网站建站
  • 南京便宜网站建设万网 x3 wordpress