参考

工具参考

浏览器参考

编程学习网站参考

LeetCode刷题参考:


日志


快捷操作

  1. F12进入调试界面。
  2. 常用鼠标右击→检查,找到相应组件对应的HTML语言位置及其相应的属性情况。
  3. 调试界面console中,快捷键:ctrl+L为清屏操作。
  4. 点击调试界面左上角的箭头,可以让鼠标定位找到网页中各个组件在HTML源代码中的位置(或者鼠标右击,选择检查)。
  5. 使用左上角箭头找到需求组件在HTML源代码中的位置后,在console中输入$0即代表所选中的组件。
  6. 在console中输入$("#id"),然后回车,可以看到当前组件的所有属性,以及展开在proto找到相应属性的配置方法。
  7. 会出现较乱的Source源码,可以点击左下角的"{}",即可展开为方便查看的形式。

调试方法

基本调试方法

  1. F12进入调试界面,在Sources中找到源文件,打断点进行调试。

  2. 在源文件代码中增加“debugger”,在代码运行时候,打开F12进入调试界面。

  3. F12进入调试界面,在Elements窗口中,键盘Ctrl+Shift+F,进行查找。或者在控制台Network中,Search/Filter中搜索JS文件名称,找到该JS文件,并进入右击Open in Source panel进入源码调试。

  4. 预览页面中,查看页面(Page)是否有调用服务(Service)成功的方式:F12后,在Network中查看调用的服务,以及服务中传入的参数(报表详细信息,可以看到页面调用的服务,以及传入的参数信息)(如有报错,在调试窗口的右上角可以看到有红色×的 图标,点击红色×进行调试)。

  5. 显示信息的命令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);
  6. 占位符: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 }
  7. 分组显示:如果信息太多,可以分组显示,用到的方法:console.group()console.groupEnd()

    // 分组显示
    console.group("第一组信息");
    console.log("第一组第一条");
    console.log("第一组第二条");
    console.groupEnd();
    console.group("第二组信息");
    console.log("第二组第一条");
    console.log("第二组第二条");
    console.groupEnd(); // 输出结果:
    // 第一组信息
    // 第一组第一条
    // 第一组第二条
    // 第二组信息
    // 第二组第一条
    // 第二组第二条
  8. console.dir(obj)显示对象所有属性和方法

  9. console.dirxml(element)显示网页的某个节点(node)所包含的html/xml代码

    let footer = document.getElementById("footer");
    console.dirxml(footer);
  10. console.assert(expression)用来判断一个表达式或变量是否为真。如果结果为否,则在控制台输出一条相应信息,并且抛出一个异常。

  11. console.trace(element)用来追踪函数的调用轨迹。

  12. 计时功能:console.time(timerName); console.timeEnd(timerName);

    console.time("计时器1");
    console.log("Hello, world!");
    console.timeEnd("计时器1");
  13. 性能分析:性能分析(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操作),然后第二次点击该按钮,"性能分析"结束,该操作引发的所有运算就会进行性能分析。

  14. 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标签添加在页面
  15. 当代码执行异常,但控制台又无报错时候,可以在F12 控制台右上方调试栏(Don't pause on exception

修改参数和请求重发

  1. F12打开控制台,在Network中,对需要修改参数的请求内容,右键,Copy > Copy as fetch。

Chrome抓包分析

推荐软件:HttpWatch(需要同时安装Chrome扩展包和安装包

性能优化

  1. 减少请求:

    1. 删除无用请求;
    2. 减少重复请求;
    3. 合并多个请求(如:【提交】时候,提交前和提交后等校验,尽量在一个服务请求中完成);
    4. 删除非必要的后台校验;
  2. 优化请求:分析耗时较长的请求,能否进一步优化;
  3. 请求异步化:分析同步请求能否转换为异步请求执行;
  4. 表结构优化:如使用聚合索引(varchar)代替普通的文本类型,在查询时候,group by, having 等场景对比非常明显;
  5. 查询SQL性能优化;
  6. 页签的懒加载:在点击相应页签时候,才开始该页签的请求;

安全

  1. A类

    1. 未公开接口;
    2. 审计日志记录:增删改类服务以及其它重要操作,需要记录日志;
    3. 敏感数据与加密保护:如联系人电话、邮箱等敏感信息需要进行脱敏处理;
  2. B类
    1. SQL注入:单引号+转换处理,入参加长度+特殊字符处理;
    2. URL越权:资源权限配置(服务、页面对应的能访问的角色);
    3. 前后台校验:前后台一致性;
    4. 反射型XSS:从后台获取到的参数进行转化,做到所见即所得,如 <script>alert(1)</script>
    5. 存储型XSS:长度+特殊字符、存在性校验、白名单等,防止出现XSS注入;
    6. 数据越权:个人只能访问权限范围内(如地区部、代表处、国家)的数据内容;
    7. 资源越权:比如相应的操作只能指定的某一些人进行操作;

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开发 学习 调试 调优的更多相关文章

  1. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  2. sysctl.conf学习和调优

    转载于简书:sysctl.conf学习和调优 ,如有版本问题,请联系我 前言 记得第一次接触/etc/security/limits.conf和/etc/sysctl.conf时是因为部署Oracle ...

  3. 2021升级版微服务教程7-OpenFeign实战开发和参数调优

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...

  4. MindSpore模型精度调优实战:常用的定位精度调试调优思路

    摘要:在模型的开发过程中,精度达不到预期常常让人头疼.为了帮助用户解决模型调试调优的问题,我们为MindSpore量身定做了可视化调试调优组件:MindInsight. 本文分享自华为云社区<技 ...

  5. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  6. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  7. 【Java Web开发学习】跨域请求

    [Java Web开发学习]跨域请求 ================================================= 1.使用jsonp ===================== ...

  8. 【Java Web开发学习】Spring MVC 使用HTTP信息转换器

    [Java Web开发学习]Spring MVC 使用HTTP信息转换器 转载:https://www.cnblogs.com/yangchongxing/p/10186429.html @Respo ...

  9. 【Java Web开发学习】Spring JPA

    [Java Web开发学习]Spring JPA 转载:https://www.cnblogs.com/yangchongxing/p/10082864.html 1.使用容器管理类型的JPA JND ...

  10. 【Java Web开发学习】Spring MVC添加自定义Servlet、Filter、Listener

    [Java Web开发学习]Spring MVC添加自定义Servlet.Filter.Listener 转载:https://www.cnblogs.com/yangchongxing/p/9968 ...

随机推荐

  1. Linux——CentOS7无法ping通外网问题

    出现问题: 当在终端中出现 ping: unknown host www.baidu.com 或 ping: www.baidu.com: 未知的名称或服务 时,该如何解决? 解决方法: 1.使用ro ...

  2. 数据类型之字符串(string)(二)

    1.字符串索引 name = "Liu Dehua" print(name[0]) 返回结果: 'L' 注意:索引从0开始. 2.反索引--通过字符找位置 name.index(& ...

  3. 数据类型之字符串(string)(一)

    1.引号括起的都是字符串(可以时空格),可以是''(单引号).""(双引号).''''''(三引号).""""""(我还 ...

  4. N63050 第十二周运维作业 ansible常用模块介绍未完成

    就业和全程班本周学习内容: 二十三.Mysql数据库四 1.MySQL主从复制实现和故障排错(50分钟) 2.MySQL级联复制和主主复制架构实现(51分钟) 3.MySQL的半同步复制和复制过滤器( ...

  5. 使用NibiruSDK 坑

    最近有项目要接NibiruSDK ,在使用时需要用他们提供的软件,进行项目签名,在这里包名前必须是 com.dream.*** ,否则会导致签名失败而且没有任何提示.用DreamClass打开apk, ...

  6. 升级grafana

    We recommend everyone to upgrade Grafana often to stay up to date with the latest fixes and enhancem ...

  7. memoの左手转右手

    说的是坐标系. 假设两个坐标系都是X向右,Y向上.那么,右手系的Z是从屏幕垂直向外,左手系的Z就是垂直屏幕向里. 向量假设是列向量.(OpenGL系的毛病啊,列向量,右手系,泪目) 先说结论 变换矩阵 ...

  8. idea等工具网盘下载地址

    1.idea2020 下载地址:https://caiyun.139.com/m/i?1E5C2SkIZbJH4 ,下载密码微信 搜索 "白菜拼吧" 回复 idea2020 获取 ...

  9. 云函数调用云函数 openid不存在

    最近发现了一个问题 就是我使用云函数调用云函数的时候,将openid存入数据库发现为空,怎么回事呢,一查, 原来是这样 还是没有仔细看文档的错啊

  10. verilog Signed与赋值形式

    `timescale 1ns/1ps module test; reg signed[3:0] uu; reg signed[3:0] dd; reg [2:0] extract; reg [4:0] ...