Javascript 使用公司代理服务器的Web应用程序性能
我有一个奇怪的问题,我已经成功地缩小到我公司的代理服务器设置。然而,我不知道发生了什么,我想在与我们的IT团队会面时提出一些建议 我有一个ASP.NET应用程序,它显示一个用于输入不同产品数量的表。因为有很多行,所以我有一个jQuery脚本,它允许用户像在Excel中一样使用箭头、选项卡和输入键进行导航 将站点部署到intranet上的web服务器时会出现问题。虽然该网站在我的个人电脑上运行良好,但一旦发布就完全无法运行。我已将问题缩小到检查/取消选中计算机上的代理服务器设置 下表显示了在网格中按20次右箭头键时脚本的累积执行时间(以毫秒为单位)。正如您所见,此问题仅影响Internet Explorer,并且仅在启用代理时才影响。这种行为在我尝试过的任何其他机器上都是可以复制的。该页面无法与代理一起运行,因此我无法列出时间 我注意到IE 9在基于视觉外观的代理和非代理上得到的CSS文件略有不同。当我比较代码时,我注意到不同的CSS被发送到浏览器。我尝试更改脚本文件名,这样代理服务器就不会提供过时的版本,但这并没有帮助 代理CSS示例 非Proxy CSS示例 一些奇怪的事情,比如将文本大写,或者将填充的缩写改为更详细的版本。不确定这是否可能与其他资源(如jQuery库)相关。但是,脚本本身是相同的。对于那些感兴趣的人,引起问题的代码是:Javascript 使用公司代理服务器的Web应用程序性能,javascript,jquery,html,asp.net,proxy,Javascript,Jquery,Html,Asp.net,Proxy,我有一个奇怪的问题,我已经成功地缩小到我公司的代理服务器设置。然而,我不知道发生了什么,我想在与我们的IT团队会面时提出一些建议 我有一个ASP.NET应用程序,它显示一个用于输入不同产品数量的表。因为有很多行,所以我有一个jQuery脚本,它允许用户像在Excel中一样使用箭头、选项卡和输入键进行导航 将站点部署到intranet上的web服务器时会出现问题。虽然该网站在我的个人电脑上运行良好,但一旦发布就完全无法运行。我已将问题缩小到检查/取消选中计算机上的代理服务器设置 下表显示了在网格中
function convertInput(e) {
//Assign the active CSS class to the selected cell
$('.active').removeClass('active');
$(e).addClass('active');
//Ignore any elements which do not have an 'ID' tag since these should not be edited
var attr = $(e).attr('id');
if (typeof attr !== 'undefined' && attr !== false) {
//Get the text value
var text = $(e).text();
$(e).text('');
lastbox = activebox;
//Create an inputbox and place the original value in there
$('<input type="text" />').appendTo($(e)).val(text).select().blur(
function () {
var orig = $(this);
var parent = $(this).parent();
var newText = orig.val();
parent.text(newText);
updateMonthTotal(parent);
parent.find('input').remove();
});
}
else {
//If we land on an non-updateable field, find the only input box on the table
//and grab its value
var elem = $('#allocation_entry_grid tr td:eq(' + lastbox + ') input');
var newText = $(elem).val();
//Assign it to the underlying TD and remove the textbox
$(elem).parent().text(newText)
$(elem).remove();
};
最后,更重要的是,代理设置根本不重要,因为整个intranet已经被排除在外了!我在下面的截图中隐藏了真实姓名,但它确实有一个条目,应该排除我的网站
这是怎么回事?为什么只有IE,我还能做些什么来测试它吗
编辑
我已经在评论中提到了这一点,但当使用Wireshark检查流量时,IE中的用户代理会根据代理设置进行更改:
有代理人
用户代理:Mozilla/5.0兼容;MSIE 9.0;WindowsNT6.1;WOW64;三叉戟/5.0
无代理
用户代理:与Mozilla/4.0兼容;msie7.0;WindowsNT6.1;WOW64;三叉戟/5.0;SLCC2。NET CLR 2.0.50727。NET CLR 3.5.30729。NET CLR 3.0.30729;媒体中心PC 6.0;InfoPath.3。NET4.0C。NET4.0E
在这两种情况下,到代理服务器的流量均为0。通过切换此复选框,我可以确认在我从这台计算机访问的任何站点上都会发生这种情况。2建议:
1.使用IE测试仪检查这是否仅发生在IE9或所有IE上
2.如果您认为IE在代理/非代理之间的行为不同,请尝试将css的不同部分从外部css文件移动到您的页面。
3.如果移动css/js解决了您的问题,那么您可以尝试用!重要的
让我知道这对你是如何起作用的
因为你的作品看起来不像是可以发布在JSFIDLE上的,所以我只能拍瞎子。祝你好运。我今晚会查一下。我确实注意到我的一个朋友!从代理服务器与非代理服务器提供服务时,css文件中的重要标志被删除。有趣的是,我可以更新颜色或大小,代理将显示新值。它只是调整随机元素。当你说IE9得到不同的文件时,你是如何根据IE在它的开发者控制台中告诉你的东西来确定这一点的?如果使用Charles Proxy这样的工具会发生什么?使用Charles的外部代理设置和取消设置?当用户导航表时是否会触发任何客户端-服务器交互?IE是否在兼容模式下运行?开发人员控制台中是否存在错误?您是否尝试过调试以查看脚本是否正在运行和/或在哪里中断?我与Wireshark进行了检查,发现了一些问题。启用代理设置时,“我的用户代理”标题为用户代理:Mozilla/4.0兼容;msie7.0;WindowsNT6.1;WOW64;三叉戟/5.0;SLCC2。NET CLR 2.0.50727。NET CLR 3.5.30729。NET CLR 3.0.30729;媒体中心PC 6.0;InfoPath.3。NET4.0C。NET4.0E。。。。禁用代理时,用户代理:Mozilla/5.0兼容;MSIE 9.0;WindowsNT6.1;WOW64;三叉戟/5.0。。。。。在这两种情况下,发送的实际数据看起来是相同的。开发人员控制台指示不同的结果。从未联系过代理服务器
#entry_grid td {
padding: 2px 0px; text-align: center; border-right-color: rgb(204, 204, 204); border-bottom-color: rgb(204, 204, 204); border-right-width: 1px; border-bottom-width: 1px; border-right-style: solid; border-bottom-style: solid; min-width: 75px; max-width: 75px;}
function convertInput(e) {
//Assign the active CSS class to the selected cell
$('.active').removeClass('active');
$(e).addClass('active');
//Ignore any elements which do not have an 'ID' tag since these should not be edited
var attr = $(e).attr('id');
if (typeof attr !== 'undefined' && attr !== false) {
//Get the text value
var text = $(e).text();
$(e).text('');
lastbox = activebox;
//Create an inputbox and place the original value in there
$('<input type="text" />').appendTo($(e)).val(text).select().blur(
function () {
var orig = $(this);
var parent = $(this).parent();
var newText = orig.val();
parent.text(newText);
updateMonthTotal(parent);
parent.find('input').remove();
});
}
else {
//If we land on an non-updateable field, find the only input box on the table
//and grab its value
var elem = $('#allocation_entry_grid tr td:eq(' + lastbox + ') input');
var newText = $(elem).val();
//Assign it to the underlying TD and remove the textbox
$(elem).parent().text(newText)
$(elem).remove();
};