Javascript Rhino + JQuery простой вопрос производительности скрипта - PullRequest
0 голосов
/ 14 августа 2011

Хотел спросить, возможно ли сегодня иметь хорошую производительность для запуска javascript в автономном режиме с Rhino.

У меня проблема с производительностью при запуске скрипта Rhino, EnvJS + JQuery.

Вот скрипт:

load('tools/envjs/env.rhino.js')
window.location = "test.html"
load('tools/jquery.js')

// add TOC div
$('body').append('<div id="toc"></div>');

// Build TOC
$("h1, h2, h3").each(function(i) {
    var current = $(this);
    current.attr("id", "title" + i);

    var pos = current.position().top / $("#content").height() * $(window).height();
    $("#toc").append("<a id='link" + i + "' href='#title" + i +
    "' title='" + current.attr("tagName") + "'>" +
    current.html() + "</a>");

    $("#link" + i).css("top", pos);
});    
Envjs.writeToFile(document.documentElement.outerHTML, Envjs.uri('test-toc.html'))

Это слегка измененная версия скрипта, которую я нашел в Интернете для создания оглавления для входного HTML-документа.

Я запускаю его в командной строке на процессоре 3.06 ГГц, используя следующую команду:

$ time java -jar tools/js.jar -opt -1 tools/make-toc.js 
[  Envjs/1.6 (Rhino; U; Mac OS X x86_64 10.7; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13  ]

real    0m16.554s
user    0m34.131s
sys 0m1.288s

Требуется 16 секунд, чтобы завершить довольно много для обработки. Я также обнаружил, что самой медленной частью является Build TOC - это занимает большую часть времени около 10 секунд.

Просто добавьте, что входной файл имеет более или менее небольшой размер документа 23 килобайта.

Интересно, почему так долго бегать. Я ожидаю, что это завершится менее чем за секунду.

Вопрос: откуда здесь потеря производительности? Варианты, которые я могу себе представить: 1) носорог 2) EnvJs 3) JQuery 4) Мой сценарий

Любые предложения о других средах исполнения будут весьма полезны. Но нужно отметить, что он требует интеграции в кроссплатформенный цикл разработки.

1 Ответ

0 голосов
/ 23 августа 2011

Просто угадайте (не работал с EnvJs и консольным носорогом - только встроенный)

Значительная потеря скорости может быть вызвана режимом «интерпретации». (это context.setOptimizationLevel (-1) в моем приложении)

Мне пришлось использовать его, так как основной метод jQuery превышает ограничение размера метода Java 64K.

У носорога тоже есть режим "компиляции", который работает быстрее.

...