Будет ли jQuery работать с очень большим документом? - PullRequest
0 голосов
/ 27 октября 2011

Привет, программирование!У меня есть вопрос re: jQuery.У нас есть программное приложение, которое создает очень большой HTML-отчет ... размером порядка 500-2000 печатных страниц.Google Chrome может загружаться с жесткого диска в течение 12-20 секунд.

Существует некоторый используемый JavaScript, который служит только для предоставления HTML-версии отчета дополнительных функций.Прямо сейчас все события запускаются из встроенного HTML onclick s и так далее.

Если я преобразую в jQuery и использую селекторы для привязки событий, селекторы могут легко соответствовать десяткам тысяч элементов.Кроме того, типичный способ использования jQuery (например, $(document).ready()) приведет к тому, что событие click не будет срабатывать, пока документ не будет полностью загружен.

Итак, вопросы: Подходит ли jQuery для этой задачи?Или мне больше подходит выход из встроенного скрипта?Если это так, есть ли определенные методы, которые мне нужно использовать, чтобы это работало хорошо?И есть ли способ обойти сценарий «нет событий до загрузки документа»?

И второстепенный вопрос (этот вопрос только что пришел мне в голову, когда я писал это) : этот отчет продается клиенту.Каковы мои лицензионные обязательства, если jQuery включен как часть отчета?

Редактировать

@ jfriend00: Я был немногоо потере того, как это сделать (разделить отчет).Отчет выпускается в 2 форматах: HTML и PDF.Клиенты хотят иметь цифровое руководство, из которого они могут печатать разделы.Они также хотят версию HTML, потому что она обеспечивает привязки, которые связывают ключевые части.JavaScript допускает всплывающее окно, которое предоставляет представление о базовых данных, на которых основан отчет.Произошло то, что мы столкнулись с проблемой масштабирования.Анализируемые данные значительно увеличились, равно как и размер итогового отчета.

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

Если у кого-нибудь есть советы, как с этим справиться, я бы хотел услышать ваши идеи.Это проблема, которая мучает меня в течение некоторого времени.

Ответы [ 4 ]

4 голосов
/ 28 октября 2011

Что касается document.ready, вы можете использовать функцию .live() для привязки ваших событий, поэтому обработчики событий будут добавляться по мере добавления элементов в DOM:

Вместо:

$(function () {
    $(<selector>).bind(<event>, <callback>);
});

Вы можете использовать .live():

$(<selector>).live(<event>, <callback>);

Описание .live() (http://api.jquery.com/live/):

Прикрепить обработчик к событию для всех элементов, которые соответствуют текущему селектор, сейчас и в будущем.

2 голосов
/ 28 октября 2011

JQuery подходит практически для любой задачи. Вопрос в том, может ли браузер, в который будут загружаться эти отчеты, продолжать работать. Вы можете встраивать директиву «начать обработку» через каждое определенное количество строк в отчете, чтобы после (скажем) 100 строк отчета отсутствовал вызов JS начать свой сценарий на этих 100 строк.

Затем еще 100 строк отчета и еще один вызов функции. Больно, но по крайней мере эти первые несколько сотен строк будут интерактивными, пока загружается остальная часть страницы.

Что касается # 2, это юридический вопрос. JQuery находится под двойным лицензированием MIT / GPL, так что вы, вероятно, в порядке, но обязательно поговорите с адвокатом. «Но какой-то случайный чудак в интернете сказал, что все в порядке!» не является действительной защитой, если / когда вас привлекут в суд по делу о нарушении авторских прав.

1 голос
/ 28 октября 2011

Разбейте документ на 500-2000 страниц и используйте ajax для динамической загрузки содержимого.

1 голос
/ 28 октября 2011

Что касается лицензионной части, я думаю, что у вас все в порядке, поскольку jQuery бесплатен и не имеет особых правил для развертывания клиентов.

Что касается производительности, я думаю, что проблема не в jQuery. Конечно, все будет немного тормозить с большим DOM. Я думаю, вам также нужно взглянуть на браузеры, так как все они используют разные движки js для выполнения ваших скриптов.

Если сценарий все равно замедляется, вам может понадобиться разбить вещи на части или добавить более конкретные селекторы, а затем обрабатывать отчет по кусочкам.

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