Javascript 使用公司代理服务器的Web应用程序性能

Javascript 使用公司代理服务器的Web应用程序性能,javascript,jquery,html,asp.net,proxy,Javascript,Jquery,Html,Asp.net,Proxy,我有一个奇怪的问题,我已经成功地缩小到我公司的代理服务器设置。然而,我不知道发生了什么,我想在与我们的IT团队会面时提出一些建议 我有一个ASP.NET应用程序,它显示一个用于输入不同产品数量的表。因为有很多行,所以我有一个jQuery脚本,它允许用户像在Excel中一样使用箭头、选项卡和输入键进行导航 将站点部署到intranet上的web服务器时会出现问题。虽然该网站在我的个人电脑上运行良好,但一旦发布就完全无法运行。我已将问题缩小到检查/取消选中计算机上的代理服务器设置 下表显示了在网格中

我有一个奇怪的问题,我已经成功地缩小到我公司的代理服务器设置。然而,我不知道发生了什么,我想在与我们的IT团队会面时提出一些建议

我有一个ASP.NET应用程序,它显示一个用于输入不同产品数量的表。因为有很多行,所以我有一个jQuery脚本,它允许用户像在Excel中一样使用箭头、选项卡和输入键进行导航

将站点部署到intranet上的web服务器时会出现问题。虽然该网站在我的个人电脑上运行良好,但一旦发布就完全无法运行。我已将问题缩小到检查/取消选中计算机上的代理服务器设置

下表显示了在网格中按20次右箭头键时脚本的累积执行时间(以毫秒为单位)。正如您所见,此问题仅影响Internet Explorer,并且仅在启用代理时才影响。这种行为在我尝试过的任何其他机器上都是可以复制的。该页面无法与代理一起运行,因此我无法列出时间

我注意到IE 9在基于视觉外观的代理和非代理上得到的CSS文件略有不同。当我比较代码时,我注意到不同的CSS被发送到浏览器。我尝试更改脚本文件名,这样代理服务器就不会提供过时的版本,但这并没有帮助

代理CSS示例

非Proxy CSS示例

一些奇怪的事情,比如将文本大写,或者将填充的缩写改为更详细的版本。不确定这是否可能与其他资源(如jQuery库)相关。但是,脚本本身是相同的。对于那些感兴趣的人,引起问题的代码是:

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();
};