Web开发 学习 调试 调优
参考
- 参考:MDN 调试HTML
- 参考:什么是浏览器开发者工具?
- 参考:检查和编辑页面与样式
- 参考:谷歌浏览器调试工具的13个Tips
- 参考:Chrome调试工具进阶技巧
工具参考
浏览器参考
- 参考:Chrome
- 参考:Chrome (DEV)
- 参考:Chrome (Canary)
编程学习网站参考
- 参考:Codegym(Java学习)
- 参考:Treehouse
- 参考:Khan Academy(数据结构和算法相关知识)
- 参考:Udemy(在线教育平台)
- 参考:Code4Startup
- 参考:One Month
- 参考:PluralSight
- 参考:Coursera
- 参考:Freecodecamp(基于项目的作业)
- 参考:Codewars(代码练习网站)
LeetCode刷题参考:
- 参考:LeetCode题解
日志
快捷操作
- F12进入调试界面。
- 常用鼠标右击→检查,找到相应组件对应的HTML语言位置及其相应的属性情况。
- 调试界面console中,快捷键:ctrl+L为清屏操作。
- 点击调试界面左上角的箭头,可以让鼠标定位找到网页中各个组件在HTML源代码中的位置(或者鼠标右击,选择检查)。
- 使用左上角箭头找到需求组件在HTML源代码中的位置后,在console中输入$0即代表所选中的组件。
- 在console中输入
$("#id")
,然后回车,可以看到当前组件的所有属性,以及展开在proto找到相应属性的配置方法。 - 会出现较乱的Source源码,可以点击左下角的"{}",即可展开为方便查看的形式。
调试方法
基本调试方法
- 参考:console命令详解
F12进入调试界面,在Sources中找到源文件,打断点进行调试。
在源文件代码中增加“debugger”,在代码运行时候,打开F12进入调试界面。
F12进入调试界面,在Elements窗口中,键盘
Ctrl+Shift+F
,进行查找。或者在控制台Network中,Search/Filter中搜索JS文件名称,找到该JS文件,并进入右击Open in Source panel进入源码调试。预览页面中,查看页面(Page)是否有调用服务(Service)成功的方式:F12后,在Network中查看调用的服务,以及服务中传入的参数(报表详细信息,可以看到页面调用的服务,以及传入的参数信息)(如有报错,在调试窗口的右上角可以看到有红色×的 图标,点击红色×进行调试)。
显示信息的命令:
console.log("Hello, world!");
或者console.error("Hello, world!");
调试,在浏览器的F12的Console中刷新即可看到打印的调试信息console.log("Hello, world!");
需要在F12的Console中勾选info选项)。console.log("Hello, world!") // 或者`console.error("Hello, world!");`调试,在浏览器的F12的Console中刷新即可看到打印的调试信息`console.log("Hello, world!");`需要在F12的Console中勾选info选项)。
console.log("Hello, world!"); // 用于输出普通信息
console.info("Hello, world!"); // 用于输出提示性信息
console.error("Hello, world!"); // 用于输出错误信息
console.warn("Hello, world!"); // 用于输出警示信息
console.debug("Hello, world!"); // 用于输出调试信息console对象的上面5种方法,都可以使用printf风格的占位符。不过,占位符的种类比较少,只支持字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)四种。
console.log("%年%月%日", 2011, 3, 26);
console.log("圆周率是:%f", 3.1415926);
占位符:
console.log("Hello, world!, %s");
支持的占位符:支持字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)console.log("Hello, world, date: %d年%d月%d日", 2020, 01, 02); // Hello, world, date: 2020年1月2日
console.log("Hello, world, dog object: ", { name: "Hei", age: 11 }); // Hello, world, dog object: { name: 'Hei', age: 11 }
分组显示:如果信息太多,可以分组显示,用到的方法:
console.group()
和console.groupEnd()
// 分组显示
console.group("第一组信息");
console.log("第一组第一条");
console.log("第一组第二条");
console.groupEnd();
console.group("第二组信息");
console.log("第二组第一条");
console.log("第二组第二条");
console.groupEnd(); // 输出结果:
// 第一组信息
// 第一组第一条
// 第一组第二条
// 第二组信息
// 第二组第一条
// 第二组第二条
console.dir(obj)
:显示对象所有属性和方法console.dirxml(element)
:显示网页的某个节点(node)所包含的html/xml代码let footer = document.getElementById("footer");
console.dirxml(footer);
console.assert(expression)
:用来判断一个表达式或变量是否为真。如果结果为否,则在控制台输出一条相应信息,并且抛出一个异常。console.trace(element)
:用来追踪函数的调用轨迹。计时功能:
console.time(timerName);
console.timeEnd(timerName);
console.time("计时器1");
console.log("Hello, world!");
console.timeEnd("计时器1");
性能分析:性能分析(Profiler)就是分析程序各个部分的运行时间,找出瓶颈所在,使用的方法是
console.profile(profileName)
console.profileEnd(profileName)
。function Foo() {
for (var i = 0; i < 10; i++) { funcA(1000); }
funcB(10000);
} function funcA(count) {
for (var i = 0; i < count; i++) { }
} function funcB(count) {
for (var i = 0; i < count; i++) { }
} // 使用性能分析功能
console.profile('性能分析器一');
Foo();
console.profileEnd("性能分析器一");
控制台会显示一张性能分析表,标题栏提示,一共运行了12个函数,共耗时2.656毫秒。其中funcA()运行10次,耗时1.391毫秒,最短运行时间0.123毫秒,最长0.284毫秒,平均0.139毫秒;funcB()运行1次,耗时1.229ms毫秒。
除了使用console.profile()方法,firebug还提供了一个【概况】(Profiler)按钮。第一次点击该按钮,"性能分析" 开始,你可以对网页进行某种操作(比如ajax操作),然后第二次点击该按钮,"性能分析"结束,该操作引发的所有运算就会进行性能分析。
F12 控制台引入jQuery库
var importJs = document.createElement('script') // 在页面新建一个script标签
importJs.setAttribute("type", "text/javascript") // 给script标签增加type属性
importJs.setAttribute("src", 'http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js') // 给script标签增加src属性, url地址为cdn公共库里的
document.getElementsByTagName("head")[0].appendChild(importJs) // 把importJs标签添加在页面
当代码执行异常,但控制台又无报错时候,可以在F12 控制台右上方调试栏(
Don't pause on exception
)
修改参数和请求重发
- F12打开控制台,在Network中,对需要修改参数的请求内容,右键,Copy > Copy as fetch。
Chrome抓包分析
推荐软件:HttpWatch(需要同时安装Chrome扩展包和安装包)
性能优化
- 减少请求:
- 删除无用请求;
- 减少重复请求;
- 合并多个请求(如:【提交】时候,提交前和提交后等校验,尽量在一个服务请求中完成);
- 删除非必要的后台校验;
- 优化请求:分析耗时较长的请求,能否进一步优化;
- 请求异步化:分析同步请求能否转换为异步请求执行;
- 表结构优化:如使用聚合索引(varchar)代替普通的文本类型,在查询时候,group by, having 等场景对比非常明显;
- 查询SQL性能优化;
- 页签的懒加载:在点击相应页签时候,才开始该页签的请求;
安全
- A类
- 未公开接口;
- 审计日志记录:增删改类服务以及其它重要操作,需要记录日志;
- 敏感数据与加密保护:如联系人电话、邮箱等敏感信息需要进行脱敏处理;
- B类
- SQL注入:单引号+转换处理,入参加长度+特殊字符处理;
- URL越权:资源权限配置(服务、页面对应的能访问的角色);
- 前后台校验:前后台一致性;
- 反射型XSS:从后台获取到的参数进行转化,做到所见即所得,如
<script>alert(1)</script>
; - 存储型XSS:长度+特殊字符、存在性校验、白名单等,防止出现XSS注入;
- 数据越权:个人只能访问权限范围内(如地区部、代表处、国家)的数据内容;
- 资源越权:比如相应的操作只能指定的某一些人进行操作;
cURL请求
输入以下命令测试能否与目标进行连接。
按Windows+R键,输入“cmd”,打开命令终端。
curl <URL>
默认发送GET请求。
curl <URL> # 或者
curl -X -GET <URL>
发送POST请求。
curl -X -POST <URL> # 或者
curl -XPOST <URL> # 示例
curl -XPOST https://jsonplaceholder.typicode.com/posts
发送POST请求,携带数据。
curl -XPOST <URL> -d <数据> # 示例
curl -XPOST https://jsonplaceholder.typicode.com/posts -d '{"title": "Hello World"}'
发送POST请求,更新数据。
curl -XPUT https://jsonplaceholder.typicode.com/posts/1 -d '{"title": "Hello World 2"}'
发送POST请求,删除数据。
curl -XDELETE https://jsonplaceholder.typicode.com/posts/1
HTTP首部。
curl <URL> -H <首部> # 示例1
curl -XPOST https://jsonplaceholder.typicode.com/posts -H 'Content-Type:application/json' -d '{"title": "Hello World"}' # 示例2,添加多个首部
curl -XPOST https://jsonplaceholder.typicode.com/posts -H 'Content-Type:application/json' -H ''A-cc-dept:ap-ation/json -d '{"title": "Hello World"}'
获取浏览器中响应的所有首部。
curl -I <URL> # 示例
curl -I https://jsonplaceholder.typicode.com/posts
下载文件。默认下载到当前文件夹中。
curl -O <URL>
自定义文件名。
curl -o 文件名 <URL>
限制下载速度。默认单位为“字节”。
curl --limit-rate <速度> <URL> # 示例
curl --limit-rate 100k <URL>
恢复下载速度。
curl -C - <URL>
跟随重定向。
curl <URL> -L # 示例
curl https://www.bilibili.com/ -L
查看请求问题。请求连接信息、相应的首部信息等都会展示出来
curl -v <URL> curl -v -L <URL>
通过代理请求目标地址。
curl --proxy <协议://用户名:密码@代理地址:端口> <URL>
FTP协议请求。
curl -u <用户名:密码> -O <ftp://server/egg.avi>
FTP协议请求,上传文件。
curl -u <用户名:密码> -T <文件> <ftp://server/egg.avi>
Web开发 学习 调试 调优的更多相关文章
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- sysctl.conf学习和调优
转载于简书:sysctl.conf学习和调优 ,如有版本问题,请联系我 前言 记得第一次接触/etc/security/limits.conf和/etc/sysctl.conf时是因为部署Oracle ...
- 2021升级版微服务教程7-OpenFeign实战开发和参数调优
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...
- MindSpore模型精度调优实战:常用的定位精度调试调优思路
摘要:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,我们为MindSpore量身定做了可视化调试调优组件:MindInsight. 本文分享自华为云社区<技 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- 【Java Web开发学习】跨域请求
[Java Web开发学习]跨域请求 ================================================= 1.使用jsonp ===================== ...
- 【Java Web开发学习】Spring MVC 使用HTTP信息转换器
[Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...
- 【Java Web开发学习】Spring JPA
[Java Web开发学习]Spring JPA 转载:https://www.cnblogs.com/yangchongxing/p/10082864.html 1.使用容器管理类型的JPA JND ...
- 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener
[Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...
随机推荐
- 解决html2canvas.js和pdf.js导出页面问题
最近在做项目时有这么一个需求,需要将当前html页面导出pdf到本地.由于之前是做过类似的功能的借助了两个插件分别是html2canvas.js和pdf.js,本以为是非常顺利就能完成的,实际在使用过 ...
- 一个方便IO单元测试的C#扩展库
对于我们.Net程序员,System.Web.Abstractions我们都非常熟悉,主要作用于Web可以实现单元测试,他是在.Net framework 3.5 sp1开始引入的,很好的解决项目表示 ...
- ConvFormer: Closing the Gap Between CNN and Vision Transformers概述
0.前言 相关资料: arxiv github 论文解读 论文基本信息: 发表时间:arxiv2022(2022.9.16) 1.针对的问题 CNN虽然效率更高,能够建模局部关系,易于训练,收敛速度快 ...
- python读取Excel指定单元格的值
使用openpyxl实现 只支持xlsx文件,不支持xls import openpyxl def read_cell(io, sheet, cell='A2'): """ ...
- echart lengend 选中事件
根据列选项 来改变echart y轴数值 前4个指标 甲方要求 95~100 第5个 要求 0~10如果混合起来 就是 0~100 这时的我 不由的破口大骂!!!但是 该干的活还是得干 干货如下:
- spark2.0.1源码编译
一.编译源码步骤演示详解 . 编译spark环境要求 1.必须在linux系统下编译(以centos6.4为例) 2.编译使用的JDK版本必须是1.6以上(以JDK1.8为例) 3.编译需要使用Mav ...
- 初学银河麒麟linux笔记 第二章 虚拟机VMware16 共享文件
由于需要把我在WINDOWS上写好的QT程序转移过来,因此这里需要设置共享文件.需要在虚拟机系统上安装VMwareTools,在主机上设置共享文件夹,这里参考了 https://blog.csdn.n ...
- windows 链接 MySQL8.0.28 报错: SSL connection error: unknown error number 解决办法
找到 My.ini文件,以管理员身份打开并在 [mysqld] 节点下 增加 skip_ssl 选项并保存,重启 MySQL 服务 执行SQL语句 SHOW VARIABLES L ...
- signalR从外部服务中推送消息和全局参数的设置
在前面的章节中,我们都是采用两方模式, 客户端 <-> 服务端,也就是说在这种情况下如果有第三方如果有通知的没有办法插足的,下面解决方案 1:和之前的代码一样,在index页面加一个客户端 ...
- Windows10 WSL开启SSH登录
1.wsl 安装ssh服务(使用的是ubuntu)sudo apt install openssh-server 2.修改配置文件sudo vim /etc/ssh/sshd_config关键的几处修 ...