电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

定制化开发问题分析与调试技巧(无海报).pdf

定制化开发问题分析与调试技巧(无海报).pdf_第1页
1/60
定制化开发问题分析与调试技巧(无海报).pdf_第2页
2/60
定制化开发问题分析与调试技巧(无海报).pdf_第3页
3/60
定制化开发问题分析与调试技巧2①提纲苍穹MVC框架,通信02前端调试03开发问题场景01日志应用05案例调试043①提纲苍穹MVC框架,通信02前端调试03开发问题场景01日志应用05案例调试044①各式各样的问题找不到产品的学习平台生产环境有问题日志在哪里拿找不到API接口文档和参考样例怎么知道表单对应的表名单据体导入这个功能能不能做前端点了没有反应就算看了堆栈也看不出来是啥问题设置了前端控件状态没有效果5①提纲苍穹MVC框架,通信02前端调试03开发问题场景01日志应用05案例调试046① 前后端Action分离的MVC框架•前端可以处理部分格式和展现逻辑,后端负责业务和计算类逻辑,尽可能减少后端压力•减少RPC次数和数据量,尽可能提升交互效率PageModelViewFront-endControllerActionPoolActionDispatcherDataModelViewStateActionDispatcherBack-endControllerBusinessService浏览器端Web服务端苍穹MVC框架7①安装目录/mservice-cosmic/conf/actionconfig.xml前后端交互–前端路由 前端路由配置文件Action核心类http请求:/form/batchInvokeAction.do8①FormAction9①FormServiceImpl10①苍穹前后端通信11①苍穹前后端通信指令指令意义负载/参数u更新控件状态/data[k:控件,value(任意字符)状态:状态值]showForm打开新页签/页面/新表单[页面元数据]InvokeControlMethod调用控件方法[key:控件,methodname:方法名,args:自定义]showMessage显示信息提示模态窗[[{msg:消息主题,detail:消息内容}]]setVisible调用可见性方法[keys:控件,visible:是否可见,policy:自定义]setEnable调用锁定性方法[keys:控件,enable:是否锁定,policy:自定义]a:指令名称p:指令参数等等几百个指令,其中InvokeControlMothod及其他几个方法参数较为自由12① 前端指令及属性•action:命令名,如心跳;getConfig、getMetaData、loadData、batchInvokeAction等•pageId:页面ID•appId:应用ID•params:命令参数key–控件标识methodName–调用方法名postData–客户端传入数据 后端指令及属性•action:命令名,如updateViewState、invokeControlMethod、setFormatInfos等•args:命令执行参数 通讯规范:http指令集13① 前后端Action分离的MVC框架•FormView•DataModelPageModelViewFront-endControllerActionPoolActionDispatcherDataModelViewStateActionDispatcherBack-endControllerBusinessService浏览器端Web服务端苍穹MVC框架e.g.•getView().setEnable(ControlKey,booleanValue)设置锁定性•getView().setVisible(controlKey,booleanValue)设置可见性14①提纲苍穹MVC框架,通信02前端调试03开发问题场景01日志应用05后端调试0415①15前端常见问题场景:·前端样式:字体、颜色等·前后端交互:通信响应数据有错,(如元数据规则等错误定义)·后端返回显示报错窗口的指令,指令指定前端打开该窗口·后端返回指令正确,但是控件的逻辑指令有问题,控件工作异常卡卡卡报错16①16前端调试(以Chrome为例):使用快捷键(F12或者Ctrl+Shift+I)打开开发者调试工具台·设备模式·元素面板(Elements)·控制台面板(Console)·源代码面板(Source)·网络面板(Network)·性能面板(perfomance)·内存面板(memory)·应用面板(Application)·安全面板(Security)·检查面板(Audits)·开发者工具主菜单17①17元素面板(Elements)18①18元素面板(Elements)查看样式,布局19①19元素面板(Elements)查看绑定事件,dom元素属性等等20①20控制台面板(Console)查看日志输出,输出当前调试对象的信息,调用js函数请求21①21控制台面板(Console)定位异常js片段发送后端请求调试(spyApi.doPostActions())22①22源代码面板(Source)url添加kdweb_debug=true进入调试模式:http://localhost:8080/ierp/?formId=pc_main_console&kdweb_debug=true用于js代码调试,基于组件调试(如:toolbarItems.js,toobaraction.js)23①23网络面板(Network)查看请求参数:(batchinvokeAction.do;formData)24①24网络面板(Network)查看前后端数据包,指令集,网络返回情况,请求耗时25①提纲苍穹MVC框架,通信02前端调试03开发问题场景01日志应用05案例调试0426①26案例调试:(以附件面板为例,Chrome,eclipse调试)1)善用工具;2)抓住action,service,plugin。工具准备-开启反编译:Windows-preference27①27新增一张单据,Chrome浏览器F12打开调试控制台,附件面板上传操作28①28在前端network可以看到发送了两次请求:1)/ierp/attachment/uploadFile.do2)batchInvokeAction.do29①291)uploadFile.do由xml配置action定位到AttachmentAction以及uploadFile方法30①30AttachmentAction找到核心代码片段,(缓存地址..):31①31返回前端信息:32①32当然细心的同学,如果稍微看回attachmentAction这个类,会发现里面getFileService()方法33①332)FormserviceImpl-batchInvokeAtion34①34通过堆栈由插件找到控件模型xxxplugin-->AttachmentPanel35①35AttachmentPanel--upload事件监听机制的体现,实现接口,注册监听,实现扩展功能36①36控件插件事件监听机制--控件扩展体系37①373)单据保存操作38①38堆栈调用信息,定位到上传文件服务器代码片段-->AbstractFileServcie40①40从单据新增到保存,经过前端action再到具体服务实现类前后端的调试,我们可以看到附件面板附件上传到单据保存的整个过程。41①从扩展插件的一个调试,找到了附件面板类,看到了插件实际执行的时机以及原理。随着开发经验积累,当遇到某一类问题的时候,相信大家能够很快地定位找到具体位置,比如:服务类操作类控件类42①42熟练应用工具43①提纲苍穹MVC框架,通信02前端调试03开发问题场景01日志应用05案例调试0444①日志应用-日志查询与堆栈分析45①业务日志:领域内作业执行结果监控与记录……46①特定类型问题,善于关于利用平台业务日志47①特定类型问题,善于关于利用平台业务日志48①1234系统日志:系统层调用过程与结果监控通过url访问浏览器(F12)IDE控制台输出各应用服务节点logs49①监控平台-monitor首页苍穹服务Monitor:http://localhost:对应服务端口如8080/monitor/管理中心服务Monitor:http://localhost:对应服务端口如8090/monitor/默认登录信息admin/admin50①日志查询页面51①按时间倒查按关键字搜索按调用链跟踪重现问题后立马去查日志最好以近似时间点小范围查考虑时间差猜想特定业务语义关键字搜索:mail,save所在业务包名:kd.fi,kd.scm,……系统特定关键字:causedby,error,warn根据前端请求获取调用链跟踪唯一识别码(traceid)根据traceid分析调用链过程逻辑日志分析:该怎么看52①搜索:关键字、业务操作、业务领域标识、系统关键信息..53①最终爆发点如:jdkORM①②公共组件FIPURHR标准业务EXTISV业务切入点如:客户化开发包④⑤SaveServiceUserService基础平台3Java堆栈:按调用层级从左往右找,从右往左分析StringDateBigDecaiml理想的模型,实际情况可能会比该环节更少54①根据TraceId查询日志获取TraceIdChromeF12开调试打开需要跟踪的页面找到其中一个请求:batchInvoke.do(如果分析性能问题,通常找耗时长的)在ResponseHeaders中找到traceId55①根据TraceId查询日志56①根据TraceId查看调用链在新窗口右上角的输入框,输入traceId进行查询。57①查看调用链在刚才的新窗口(调用链查询)中,输入traceId回车。列出本次请求所有的方法调用:名称、参数、用时、嵌套。列出的信息为代码中用Tracer记录的跟踪信息58①分析调用链分析与优化时间长的span:耗费是否合理;调用频繁的:是否可优化;未知的长耗费:代码中需要再埋tracer点。【可能问题】1)redis缓存key粒度过大2)redis访问频繁3)sql语句查询缓慢:select*,无索引,复杂sql4)代码不合理:循环内重复使用相同参数调用同一个方法…【原则】1)减少不必要的资源访问2)不要把压力下沉到DB【代码优化列举】1)反射调用方法,务必把Method缓存起来。2)能用QueryDataSet的时候,不要用queryDynamicObjectCollection。3)慎重使用静态对象,无法GC回收。4)复杂sql:换种实现方式。59①学习平台与小技巧60①分享:代码是现实世界的逻辑反映,每一行代码其实也是每一个开发者的逻辑思维的体现。希望大家在调试,分析的时候看到的不是一行行冰冷的代码,一个问题场景,背后怎么设计解决,实际怎么实现,小到一个接口,大到一个设计模式,模块,这个过程就像我们日常生活中跟人交谈一样,只是在这里通过代码分析,调试这种特殊方式交流和认识。他不像自然语言的自由,松散,但他有着他的规范,结构,美感..Thanksterimakasih感謝谢谢ありがとうขอบคุณ

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

定制化开发问题分析与调试技巧(无海报).pdf

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信