参考

工具参考

浏览器参考

编程学习网站参考

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. 解决html2canvas.js和pdf.js导出页面问题

    最近在做项目时有这么一个需求,需要将当前html页面导出pdf到本地.由于之前是做过类似的功能的借助了两个插件分别是html2canvas.js和pdf.js,本以为是非常顺利就能完成的,实际在使用过 ...

  2. 一个方便IO单元测试的C#扩展库

    对于我们.Net程序员,System.Web.Abstractions我们都非常熟悉,主要作用于Web可以实现单元测试,他是在.Net framework 3.5 sp1开始引入的,很好的解决项目表示 ...

  3. ConvFormer: Closing the Gap Between CNN and Vision Transformers概述

    0.前言 相关资料: arxiv github 论文解读 论文基本信息: 发表时间:arxiv2022(2022.9.16) 1.针对的问题 CNN虽然效率更高,能够建模局部关系,易于训练,收敛速度快 ...

  4. python读取Excel指定单元格的值

    使用openpyxl实现 只支持xlsx文件,不支持xls import openpyxl def read_cell(io, sheet, cell='A2'): """ ...

  5. echart lengend 选中事件

    根据列选项 来改变echart y轴数值 前4个指标 甲方要求 95~100   第5个 要求 0~10如果混合起来 就是 0~100 这时的我 不由的破口大骂!!!但是 该干的活还是得干 干货如下:

  6. spark2.0.1源码编译

    一.编译源码步骤演示详解 . 编译spark环境要求 1.必须在linux系统下编译(以centos6.4为例) 2.编译使用的JDK版本必须是1.6以上(以JDK1.8为例) 3.编译需要使用Mav ...

  7. 初学银河麒麟linux笔记 第二章 虚拟机VMware16 共享文件

    由于需要把我在WINDOWS上写好的QT程序转移过来,因此这里需要设置共享文件.需要在虚拟机系统上安装VMwareTools,在主机上设置共享文件夹,这里参考了 https://blog.csdn.n ...

  8. windows 链接 MySQL8.0.28 报错: SSL connection error: unknown error number 解决办法

    找到 My.ini文件,以管理员身份打开并在  [mysqld]   节点下 增加   skip_ssl   选项并保存,重启 MySQL 服务 执行SQL语句    SHOW VARIABLES L ...

  9. signalR从外部服务中推送消息和全局参数的设置

    在前面的章节中,我们都是采用两方模式, 客户端 <-> 服务端,也就是说在这种情况下如果有第三方如果有通知的没有办法插足的,下面解决方案 1:和之前的代码一样,在index页面加一个客户端 ...

  10. Windows10 WSL开启SSH登录

    1.wsl 安装ssh服务(使用的是ubuntu)sudo apt install openssh-server 2.修改配置文件sudo vim /etc/ssh/sshd_config关键的几处修 ...