参考

工具参考

浏览器参考

编程学习网站参考

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. 导入zip文件解析

    /** * 导入压缩文件 * * @param file * @param charsetName * @param consumer */ public static void importZipF ...

  2. leetcode 31. 下一个排列 【时间击败 100%】 【内存击败 92.17%】

    对于该题,我本来兴致勃勃地想到了两个优化,但从提交结果来看根本看不出来有什么区别,但我发4我说的都是真的 -3- 1 public void nextPermutation(int[] nums) { ...

  3. 解决多行文本超出显示省略号webpack打包后失效的问题

    开发环境没问题: 但是在打包部署后就失效了: 经过对比后发现是因为: 缺少了 -webkit-box-orient: vertical;  导致 解决方案 : /* ! autoprefixer: o ...

  4. WDA学习(28):Drag &Drop使用

    1.21 Drag Drop使用 本实例测试Drag Drop; 运行结果: Drag图标Drop到添加Icon,会将一条记录添加到Table; Drag Table记录Drop到垃圾桶Icon,会将 ...

  5. beego框架中的注解路由不生效的问题

    在测试中发现 使用注解路由的话 项目需要在gopath路径下的src下才可以 并且配置文件的 runmode = dev 然后执行bee run 在路由文件夹里才会生成commentRouter文件 ...

  6. 【转】wamp如何添加多个站点

    1.打开wamp目录下的bin目录下的apache/conf/extra/httpd-vhosts.conf文件(虚拟目录配置文件),修改文件:在num01下创建index.php文件,输出01,:在 ...

  7. HCIP-ICT实战进阶06-BGP基础

    HCIP-ICT实战进阶06-BGP基础 0 前言 运营商内部网络通过RIP.OSPF.ISIS实现网络互联, 但运营商之间要怎么办? 能不能互相引入路由? 理论上可行, 但考虑到网络机密问题和内部路 ...

  8. SQL 错误 [1105] [HY000]: errCode = 2, detailMessage = select list expression not produced by aggregation output (missing from GROUP BY clause?): ......

    SQL 错误 [1105] [HY000]: errCode = 2, detailMessage = select list expression not produced by aggregati ...

  9. .NET Core基础:白话管道中间件

    在Asp.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景 ...

  10. AFNI 教程 步骤5:统计和建模

    第一部分 时间序列 用AFNI打开fMRI数据, Graph按钮可以打开信号界面,中心的信号是该像素的信号随着时间的变化图,m 可以显示更少的体素,M可以显示更多的体素.V 可以浏览整个图像,+ 可以 ...