В обычных загрузчиках классов не разрешено сканирование всех классов в пути к классам. Но обычно единственным используемым загрузчиком классов является UrlClassLoader, из которого мы можем получить список каталогов и файлов jar (см. getURLs ) и открывать их один за другим для отображения доступных классов. Этот подход, называемый сканированием пути к классу, реализован в Scannotation и Reflections .
Reflections reflections = new Reflections("my.package");
Set> classes = reflections.getSubTypesOf(Object.class);
Другой подход заключается в использовании Java Pluggable Annotation API обработки для записи обработчика аннотаций, который будет собирать все аннотированные классы во время компиляции и создавать индексный файл для использования во время выполнения. Этот механизм реализован в библиотеке ClassIndex :
// package-info.java
@IndexSubclasses
package my.package;
// your code
Iterable classes = ClassIndex.getPackageClasses("my.package");
Обратите внимание, что никакая дополнительная настройка не требуется, поскольку сканирование полностью автоматизировано благодаря компилятору Java, автоматически обнаруживающему любые процессоры, найденные в пути к классам .
если можно превратить алгоритм расчета во что-то, что можно назвать многократно, Вы могли выпустить управление, поддерживают браузер через короткие интервалы при помощи setTimeout с коротким значением тайм-аута.
, Например, что-то вроде этого...
function doCalculation()
{
//do your thing for a short time
//figure out how complete you are
var percent_complete=....
return percent_complete;
}
function pump()
{
var percent_complete=doCalculation();
//maybe update a progress meter here!
//carry on pumping?
if (percent_complete<100)
{
setTimeout(pump, 50);
}
}
//start the calculation
pump();
Это все еще немного передовой край, но в Firefox 3.5 есть такие вещи, называемые Web Workers, хотя я не уверен в их поддержке в других браузерах.
Mr. У Ресига есть статья о них здесь: http://ejohn.org/blog/web-workers/
И Simulated Annealing , вероятно, самый простой пример этого, если вы хотите обратите внимание, вращающийся логотип Firefox не зависает, когда рабочие потоки выполняют свои запросы (таким образом, не замораживая браузер).
Используйте тайм-ауты.
Путем помещения содержания цикла (циклов) в отдельные функции и вызова их от setTimeout () с тайм-аутом приблизительно 50, JavaScript приведет к управлению потока и возвратится некоторое время спустя, позволяя UI получить взгляд - в.
существует хороший workthrough здесь .
Можно попытаться выполнить длительные вычисления в потоках (см. JavaScript и Потоки ), хотя они не являются очень портативными.
можно также попытаться использовать некоторого профилировщика JavaScript для нахождения узких мест производительности. поддержки Firebug профильный JavaScript.
Я занес приблизительно в блог производительность в браузере некоторое время назад, но позволил мне суммировать те связанные с DOM для Вас здесь.
Тогда существуют некоторые связанные с самим JavaScript:
еще существуют некоторые на моем блоге (ссылка выше).