公司系统上海一客户的系统调优(二)-- 问题分析一

本文详细介绍了如何通过理解浏览器表单提交机制来优化表单数据的传输效率,包括识别不必要的表单数据、调整提交方式及编码规则等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司系统上海一客户的系统调优(一)-- 初步测试和分析

针对上篇提到到问题, 和对应的解决思路, 开始动手。


首先查看了分析下表单提交时候

 看看具体提交了那些内容。那些是必须要提交的, 那些是不必须的提交内容。

点击保存按钮, 然后在httpwatch 中看到的网页监控, 其中一个post记录恰恰是数据上传的记录, 这条记录上传76063个字节。 然后又下载了32600

个字节。 因为采用的页面提交的方式, 所以应该里面有些垃圾数据是不需要提交到服务端的。

浏览器提交form时候所做的事情

我们再来看一下浏览器是如何提交表单的,或者说,浏览器在提交表单时,要做哪些事情。

浏览器并不是将所有的表单控件全部发送到服务器的,而是会查找所有的【成功控件】,只将这些成功控件的数据发送到服务端, 什么是成功控件呢?
简单地来说,成功控件就是:每个表单中的控件都应该有一个name属性和”当前值“, 在提交时,它们将以 name=value 的形式做为提交数据的一部分。
对于一些特殊情况,成功控件还有以下规定:
1. 控件不能是【禁用】状态,即指定【disabled="disabled"】。即:禁用的控件将不是成功控件。
2. 如果一个表单包含了多个提交按键,那么仅当用户点击的那个提交按钮才算是成功控件。
3. 对于checkbox控件来说,只有被用户勾选的才算是成功控件。
4. 对于radio button来说,只有被用户勾选的才算是成功控件。
5. 对于select控件来说,所有被选择的选项都做为成功控件,name由select控件提供。
6. 对于file上传文件控件来说,如果它包含了选择的文件,那么它将是一个成功控件。
此外,浏览器不会考虑Reset按钮以及OBJECT元素。

注意:
1. 对于checkbox, radio button来说,如果它们被确认为成功控件,但没有为控件指定value属性, 那么在表单提交时,将会以"on"做为它们的value
2. 如果在服务端读不到某个表单控件的值,请检查它是否满足以上规则。

提交方式:在前面的示例代码中,我为form指定了method="post",这个提交方法就决定了浏览器在提交数据时,通过什么方式来传递它们。
如果是【post】,那么表单数据将放在请求体中被发送出去。
如果是【get】,那么表单数据将会追加到查询字符串中,以查询字符串的形式提交到服务端。
建议:表单通常还是以post方式提交比较好,这样可以不破坏URL,况且URL还有长度限制。

数据的编码:前面我将浏览器的请求细节用Fiddler做了个截图,从这个图中我们可以看到:控件输入的内容并不是直接发送的, 而是经过一种编码规则来处理的。目前基本上只会只使用二种编码规则:application/x-www-form-urlencoded 和 multipart/form-data , 这二个规则的使用场景简单地说就是:后者在上传文件时使用,其它情形则使用前者(默认)。
这个规则是在哪里指定的呢? 其实form还有个enctype属性,用它就可以指定编码规则

按照我前面说过的编码规则选择逻辑,application/x-www-form-urlencoded做为默认值,所以,一般情况下我们并不用显式指定。 除非我们要上传文件了,那么此时必须设置enctype="multipart/form-data"

好了,说了这么一大堆理论,我们再来看一下浏览是如何处理表单数据的。这个过程大致分为4个阶段:
1. 识别所有的成功控件。
2. 为所有的成功控件创建一个数据集合,它们包含 control-name/current-value 这样的值对。
3. 按照form.enctype指定的编码规则对前面准备好的数据进行编码。编码规则将放在请求中,用【Content-Type】指出。
4. 提交编码后的数据。此时会区分post,get二种情况,提交的地址由form.action属性指定的。

有了以上知识准备以后, 相信大家都回对提交表单有了不一样的看法。浏览器在后面做了很多的工作, 如果不了解这些。 势必回写出影响效率的程序代码。

表单提交内容缩减

好了, 现在回到具体的问题上, 看看提交时候, 究竟上传了什么东西, 上图。



这个是form里面的成功控件对应的内容, 提交的时候, 统统的做了提交, 图上描述的还是一部分, 没有包含全部, 包含数据比较小的这里就忽略的。

现在的重点是缩减那些体积大的内容, 仔细看一下排名第一、第二的2个控件对应的内容的尺寸  41112 + 13446 = 54558, 已经占了总体积76063的一半以上

这些数据是做什么的呢? 报着这个疑问, 又打开了



这个action对应的代码, 发现formtablexml压根就没有在这个action里面出现, 只是formdata变量出现了。呵呵~, 看到这里, 希望出现了。

这个变量提交的时可以省略, 最少可以send的数据减少体积一半哦。 在看看列表里面那个数据是可以省略的。 只提交必须的数据到服务器去。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值