Как обрабатывать JavaScript на странице с тысячами флажков в IE6 - PullRequest
0 голосов
/ 03 июня 2011

У меня проблемы с кодом, написанным на ASP.NET с некоторым javascript, выполняющим обратную передачу на сервер для изменений, внесенных в сетку приблизительно из 8000 флажков. Это то, что пока я тестировал, все было в порядке, примерно с 1000 флажков в IE6. Но теперь, импортировав реальные данные, я застрял с медлительностью IE6 и реальностью того, что код, который я написал, не собирается его сокращать.

Я должен использовать IE6 для его тестирования, потому что, к сожалению, клиент требует, чтобы веб-приложение было полностью функциональным с ним. Как я могу повысить скорость страницы?

EDIT

Я насчитал строки и столбцы: 66 * 110 = 7260 флажков на странице.

CODE

[...]

<asp:Repeater ID="repChkAssociations" runat="server" DataSource="<%#Failures%>">
<ItemTemplate>
    <td style="text-align: center;">
        <asp:CheckBox ID="cbEqClassFailure" runat="server" Enabled="<%#AllowEditAssociations%>"
            ToolTip='ommited code'
            Checked='ommited code'
            OnClick="setIsDirty(true);"
            >
        </asp:CheckBox>
    </td>
</ItemTemplate>

[...]

<script src="~/Scripts/jquery-1.6.1.min.js"></script>

<script type="text/javascript">

    var isDirty;
    var identifiter;

    function SaveAssociation() {
        setIsDirty(false);
    }

    // check if the page has been modified
    function CheckIsDirty(_id) {
        setID(_id);
        if (getIsDirty() == true) {
            ShowConfirmPopup();
        } else {
            ShowGridPopup(); 
        }
    }

    function ShowGridPopup() {
        if (getID() == "EqClasses") {
            ShowClassPopup();
        } else if (getID() == "Failures") {
            ShowFailurePopup();
        }
    }

    // isDirty setter        
    function setIsDirty(changeVal) {
        isDirty = changeVal;
    }

    // isDirty getter
    function getIsDirty() {
        return isDirty;
    }

function ClickSaveButton() {
    var _id = $('a[id$="butSaveAssociation"]').attr("ID");
    __doPostBack(_id.replace("_", "$"), '');
}

function ShowClassPopup() {
    var _id = '<%= eqClassPopup.BehaviorID %>';
    var modal = $find(_id);
    modal.show();
}

function ShowFailurePopup() {
    var _id = '<%= failurePopup.BehaviorID %>';
    var modal = $find(_id);
    modal.show();
}

function ShowConfirmPopup() {
    var _id = '<%= confirmPopup.BehaviorID %>';
    var modal = $find(_id);
    modal.show();
}
</script>

Ответы [ 2 ]

4 голосов
/ 03 июня 2011

Конечно, я не знаю, что вы делаете, но наличие 8000 флажков на одной странице кажется мне недружественным для пользователя. Попробуйте добавить нумерацию страниц и фильтрацию, чтобы количество флажков на странице не превышало, возможно, 100?

РЕДАКТИРОВАТЬ - Вы также, кажется, думаете, что это проблема IE6. Я бы рискнул предположить, что у любого браузера будут проблемы с громкостью, о которой вы говорите.

DOUBLE EDIT - Хорошо, после просмотра вашего кода, я уверен, что единственный способ повысить скорость - это уменьшить количество элементов управления на сайте. Вы не делаете ничего сумасшедшего в JS.

2 голосов
/ 03 июня 2011

Echoing @Matt Grande - вы пытаетесь сделать что-то невозможное. IE6 запускает JavaScript очень, очень медленно. Это также будет пропорционально медленнее на древнем оборудовании, над которым может работать ваш конечный пользователь. Черт, почти невозможно избежать утечек памяти, что бы ты ни делал. Это просто не очень хороший подход.

Если вам действительно нужно 6000 флажков на странице, рассмотрите альтернативный подход. Например, используйте одно изображение со всеми предварительно установленными флажками. Захватывайте события щелчка мышью, определяйте, какое поле они отметили, используя положение мыши, визуализируйте галочку с помощью VML и сохраняйте информацию в виде массива или JSON в скрытом поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...