Почему рендеринг textField с поведением занимает так много времени

1

В моем приложении у меня есть listView с примерно 100 строками. Каждая строка содержит textField с поведением. Проблема в том, что эта страница занимает слишком много времени около 2 секунд. Когда я удаляю это поведение, он занимает всего пару мс. Мой вопрос в том, почему это так долго, и есть ли способ сделать это быстрее?

   add(new ListView<PlayOffGame>("games") {

        private static final long serialVersionUID = 1L;

        @Override
        protected void populateItem(final ListItem<Game> listItem) {


            listItem.add(new TextField<String>("results").add(new AjaxFormComponentUpdatingBehavior("onchange") {

                private static final long serialVersionUID = 1L;

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    // do something
                }
            }));    
        }
    });

ОБНОВИТЬ

калитка версия: 1.5.9

render = метод onRender:

@Override
protected void onRender() {
    logger.debug("Render start");
    long time = System.currentTimeMillis();
    super.onRender();
    time = System.currentTimeMillis() - time;
    logger.debug("Render: " + time + " ms");
};
Теги:
wicket

1 ответ

0

Это займет много времени, потому что для каждого TextField вы добавляете строку javascript (с помощью AjaxFormComponentUpdatingBehavior).

У меня были некоторые проблемы с AjaxEventBehavior. Я внедрил пользовательское поведение родителя, которое проверяет, какой из них вызвал событие. Это значительно сокращает время рендеринга, а также время загрузки браузера.

Я думаю, что можно было бы сделать что-то подобное для AjaxFormComponentUpdatingBehavior, переопределив onEvent и получив правильный child- FormComponent. Для FormComponent потребуется setOutputMarkupId(true) и вам потребуется некоторый javascript cutsom, чтобы передать id в поведение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню