SlideShare uma empresa Scribd logo
1 de 75
Клиентская Java вне браузера.
Делаем нативные клиенты на Java
Nikita Lipsky
Excelsior LLC
1
2
Web 3.0 – уже сейчас!
3
Native apps
• Нативные приложения
– Отзывчивы
– Выразительны
– Удобны
– Имеют доступ ко всем ресурсам устройства, которые пожелают
Текущие скорости интернета позволяют их доставлять до
пользователя быстро
4
Десктоп vs. мобайл
• Планшеты – для потребления контента
• Десктопы – для создания контента
• Тенденция слияния десктопных и планшетных OC:
– Windows Surface, Universal apps
– OS X / iOS
– Linux для планшетов
5
Причины написания приложения под десктоп
• Доступ к локальной файловой системе
• Возможность работы оффлайн
• Отзывчивость системы
• Эффективность разработки сложного ПО
• Независимость от браузера, установленного у пользователя
6
Проблема: кросс-платформенная разработка
7
8
Кросс-платформенная разработка
• QT / C++
• WebKit / JavaScript + HTML5 / C++
• Java
• Mono / Xamarin / .NET Core
9
План доклада
• Обзор UI фреймворков для Java
• Аспекты native UX:
– установка
– старт
– look-n-feel
– восприятие пользователем
10
Кто знает про себя ?
• Более 20 лет профессиональной карьеры
• Инициатор проекта Excelsior JET
– работал над проектом более 16 лет
– как идейный вдохновитель
– как компиляторный инженер
– как руководитель
– и много в каких еще ролях
• Open source проекты WebFX и Java ReStart
– в свободное от работы время
• twitter: @pjBooms
11
Кто знает про Excelsior JET?
• Полная реализация Java SE
– c 2005 года cертифицирована как Java Compatible
• AOT compiler + Java Runtime
– смешанная компиляция: AOT + JIT
– поддержка нестандартных загрузчиков классов в
AOT режиме (для Eclipse RCP, Tomcat)
• Toolkit
– Startup Optimizer
– Deployment
12
UI фреймворки для Java
13
UI фреймворки для Java SE
• AWT/Swing
• SWT/JFace
• LibGDX, JOGL
• JavaFX
14
Swing
• Входит в стандарт Java SE
• Самописные контролы/эмуляция контролов ОС
• Cменяемый look-n-feel
• Netbeans, IntelliJ IDEA
15
SWT
• Библиотека, разработанная IBM
• Родные (native) контролы
• Eclipse
16
SWT vs. Swing
17
SWT vs. Swing
• Pros Swing
– легкость настройки look-n-feel
– можно сделать лучше чем native (JIDE, Alloy)
• Cons Swing
– по умолчанию look-n-feel не совсем native
– многие look-n-feel по умолчанию находят “убогим”
18
SWT vs. Swing
• Pros SWT
– действительно native look-n-feel
– легковесный ~2M (работает на compact1 / Apache Harmony / GCJ)
– может работать поверх Swing/JavaFX
• Cons SWT
– тяжело сделать уникальный look-n-feel
– такой же “убогий” как UI операционной системы
19
JavaFX
• Scene graph
• Анимация, визуальные эффекты
• FXML, CSS
• Скриптовые языки: JavaScript, Groovy, JRuby
• Multi touch
• Бизнес-графика, media, 3D
• Аппаратное ускорение графики
• HTML5 & WebView (на основе WebKit)
20
Scene Graph vs. Layout Managers
21
Layout Manager
22
Scene Graph
23
JavaFX WebView
24
JavaFX Hybrid Apps
25
Десктопные приложения вместо веба с апплетами
Live demo
http://javarestart.com
26
Кто использует JavaFX
27
http://www.oracle.com/technetwork/java/javase/community/javafx-community-
2158661.html
28
JavaFXPorts.org
• iOS & RoboVM
• Android & LodgON
29
Native clients
30
31
Native clients
• Правило №1:
– Ваш пользователь не должен знать, что такое Java. Не должен!
• Решение:
– Ваше приложение должно запускаться как .exe целевой
платформы
– Не зависеть от Java, установленной у клиента
32
Java to Exe
Сделать из Java исполняемый файл целевой платформы не
просто …
33
Java to Exe
Сделать из Java исполняемый файл целевой платформы не
просто
а очень просто!
34
Java to Exe
Сделать из Java исполняемый файл целевой платформы не
просто
а очень просто!
И совершенно бесплатно!
35
Java to Exe
• Можно самому
– Invocation API
• Много бесплатных (и платных) инструментов
– Launch4J
– Exe4J
– etc.
Tip: Google “Java to Exe”
36
Native bundle
Чтобы устранить зависимость от JRE нужно …
37
Native bundle
Чтобы устранить зависимость от JRE нужно …
просто включить JRE целиком
в состав приложения
38
Native bundle
Чтобы устранить зависимость от JRE нужно …
просто включить JRE целиком
в состав приложения
Это абсолютно легально по лицензии на JRE (но включать
надо все файлы JRE, за редким исключением)
39
Native bundle
Self-contained directory:
40
Native bundle
Теперь ваше приложение распространяется простым
копированием
– можно завернуть в дистрибутив целевой платформы
Бесплатные инсталляторы: WiX, InnoSetup, NSIS, Excelsior
Installer
Платные: InstallAnywhere, InstallShield
41
Java-aware инсталляторы
• Java Packager (требует WiX или InnoSetup)
– Ant task
– Maven plugin
(https://github.com/javafx-maven-plugin/javafx-maven-plugin )
• IzPack (free)
• Install4J (commercial)
– Instant splash
– Autoupdates
– И много чего еще
42
Native bundle
• Private JRE увеличивает дистрибутив на 30-70 MB
Можно ли уменьшить эти издержки?
43
Small Private JRE
• Лицензия на Oracle JRE запрещает его “уменьшать”
• Альтернативные открытые реализации Java:
– OpenJDK
– Apache Harmony/Android classlib
– GNU Classpath
44
45
Compact Profiles
Compact1 Compact2 Compact3
java.lang java.rmi java.lang.instrument
java.io java.sql java.lang.management
java.math javax.transaction javax.management
java.nio javax.xml javax.naming
java.util org.w3c.dom javax.script
java.net org.xml.sax javax.security
java.security javax.sql
javax.crypto javax.xml.crypto
java.text org.ietf.jgss
46
Есть в Java SE Embedded и OpenJDK
Compact Profiles: размеры
• Compact1: 11MB
• Compact2: 15MB
• Compact3: 21MB
Замечание: размеры на диске (ROM)
47
Project Jigsaw
48
Excelsior Java Runtime Slim-Down
• Java SE API делится на компоненты:
– Kernel, XML, SQL, CORBA, AWT/Java2D, Swing, etc.
• анализатор определяет какие
компоненты “нужны”
– содержат достижимые методы
49
Глобальный анализатор
Application
Java SE API
Entry points
- used
- not used
- component’s boundary
50
Java Runtime Slim-Down
• Пользователю предоставляются:
– результаты анализа c возможностью исключить
неиспользуемые компоненты из дистрибутива
51
Java Packager vs. Runtime Slim-Down
Java Packager Java Runtime
Slim-Down
Ensemble Demo 41 MB 18 MB
BrickBreaker 37 MB 10 MB
52
Cтарт приложения
53
Что делает JVM на старте
54
JVM with AOT
55
56
Как ускорить старт без AOT
• Instant splash
• Выяснить, какие классы грузятся на старте, и перепаковать
ваши jars в порядке загрузки классов
– VM arg: -verbose:class
• Упаковать все jar в один (One-Jar, Autojar)
57
Look-n-feel
58
Look-n-feel
Миф о native look-n-feel:
Приложение только тогда нативное, когда оно
выглядит ”привычно” для конечного пользователя и
похоже на другие приложения данной операционной
системы
59
“Native” Look-n-feel
60
мгновенное отклик
“Native” Look-n-feel
61
Look-n-feel
• Приложение воспринимается как родное:
– интуитивно понятный интерфейс
– мгновенный отклик
– выглядит хорошо
– UI разработан профессионалами в областях графического
дизайна и UX
– с учетом HIG (human interface guidelines) целевой платформы
62
“Native” Look-n-feel
63
мгновенное отклик
Look-n-feel
• Приложение воспринимается как родное:
– интуитивно понятный интерфейс
– мгновенный отклик
– выглядит хорошо
– UI разработан профессионалами в областях графического
дизайна и UX
– с учетом HIG (human interface guidelines) целевой платформы
64
Look-n-feel
Мечта дизайнера:
–Делать программы без программистов
65
JavaFX Scene Builder
66
JavaFX Scene Builder
• Действительно WYSIWYG
– Манипуляция ровно теми же объектами, что и потом “идут в
бой”
• Порождает FXML
– Понимает рукописный FXML
• Легко расширяется вашими контролами
– Как first class citizen
• Сейчас – open source
67
Отзывчивость UI
68
Отзывчивость UI
69
Отзывчивость UI
70
Отзывчивость UI
• JIT хорошо работает для горячего кода
• UI приложения – пример приложений без ярко
выраженного горячего кода
– Профиль исполнения практически плоский
– JIT долго греется
• AOT работает лучше, оптимизируя каждую строчку кода
максимально агрессивно
71
JFCMark (Short Run)
0%
20%
40%
60%
80%
100%
120%
140%
160%
180%
200%
4 core i5, 3.8Ghz
Excelsior JET
HotSpot client
HotSpot server
72
Больше – лучше
JFCMark (Long Run)
0%
20%
40%
60%
80%
100%
120%
140%
160%
4 core i5, 3.8Ghz
Excelsior JET
HotSpot client
HotSpot server
73
Больше – лучше
Заключение
• Javа прекрасно подходит для client side
– кросс-платформенна
– богатый выбор UI фреймворков
• JavaFX – потрясающая технология
– практически готова для mobile
• Native bundle для Java приложения – легко!
– уникально именованный процесс
– независимость от Java у пользователя
• Проектировка UI & UX – дело профессионалов
– дизайнеры наше все
• AOT улучшает UX
74
Вопросы и ответы
Никита Липский,
Excelsior
nlipsky@excelsior-usa.com
twitter: @pjBooms
75

Mais conteúdo relacionado

Mais procurados

Java 8 Support at the JVM Level
Java 8 Support at the JVM LevelJava 8 Support at the JVM Level
Java 8 Support at the JVM LevelNikita Lipsky
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Nikita Lipsky
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9JavaDayUA
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Nikita Lipsky
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Tech Talks @NSU: AOT-компиляция Java
Tech Talks @NSU: AOT-компиляция JavaTech Talks @NSU: AOT-компиляция Java
Tech Talks @NSU: AOT-компиляция JavaTech Talks @NSU
 
UICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиUICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиSQALab
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustMichael Pankov
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in netAlex Tumanoff
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Pythonautomated-testing.info
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...DevGAMM Conference
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
 

Mais procurados (20)

Java 8 Support at the JVM Level
Java 8 Support at the JVM LevelJava 8 Support at the JVM Level
Java 8 Support at the JVM Level
 
Java худеет. Спроси меня как.
Java худеет. Спроси меня как.Java худеет. Спроси меня как.
Java худеет. Спроси меня как.
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?Верификация Java байткода: когда, как, а может отключить?
Верификация Java байткода: когда, как, а может отключить?
 
Java 9 - Back to the Future
Java 9 - Back to the FutureJava 9 - Back to the Future
Java 9 - Back to the Future
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Tech Talks @NSU: AOT-компиляция Java
Tech Talks @NSU: AOT-компиляция JavaTech Talks @NSU: AOT-компиляция Java
Tech Talks @NSU: AOT-компиляция Java
 
UICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестамиUICov - инструмент анализа покрытия UI-тестами
UICov - инструмент анализа покрытия UI-тестами
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Быстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием PythonБыстрое расширение Robot Framework под свои нужды с использованием Python
Быстрое расширение Robot Framework под свои нужды с использованием Python
 
JPHP
JPHPJPHP
JPHP
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибок
 

Destaque

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
WDB005.1 - JavaScript for Java Developers (Lecture 1)
WDB005.1 - JavaScript for Java Developers (Lecture 1)WDB005.1 - JavaScript for Java Developers (Lecture 1)
WDB005.1 - JavaScript for Java Developers (Lecture 1)Igor Khotin
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8Alexey Zinoviev
 
Expert Java Day: Java concurrency
Expert Java Day: Java concurrencyExpert Java Day: Java concurrency
Expert Java Day: Java concurrencyPavel Titkov
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8Ilya Lapitan
 
Секреты сборки мусора в Java
Секреты сборки мусора в JavaСекреты сборки мусора в Java
Секреты сборки мусора в Javaaragozin
 

Destaque (9)

Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
WDB005.1 - JavaScript for Java Developers (Lecture 1)
WDB005.1 - JavaScript for Java Developers (Lecture 1)WDB005.1 - JavaScript for Java Developers (Lecture 1)
WDB005.1 - JavaScript for Java Developers (Lecture 1)
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8
 
Expert Java Day: Java concurrency
Expert Java Day: Java concurrencyExpert Java Day: Java concurrency
Expert Java Day: Java concurrency
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8
 
Секреты сборки мусора в Java
Секреты сборки мусора в JavaСекреты сборки мусора в Java
Секреты сборки мусора в Java
 
Java: вчера, сегодня, завтра
Java: вчера, сегодня, завтраJava: вчера, сегодня, завтра
Java: вчера, сегодня, завтра
 

Semelhante a Клиентская Java вне браузера. Делаем нативные клиенты на Java

Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsNikita Lipsky
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidAndrew Sovtsov
 
Елена Жукова "Native JavaScript на мобильных устройствах"
Елена Жукова "Native JavaScript на мобильных устройствах"Елена Жукова "Native JavaScript на мобильных устройствах"
Елена Жукова "Native JavaScript на мобильных устройствах"Fwdays
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...Yandex
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...Yandex
 
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?Nikita Lipsky
 
Денис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылуДенис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылуYandex
 
Веб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и ITВеб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и ITDevDay
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаAlexander Kirillov
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаOpen-IT
 
Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...HappyDev
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системAlex Chistyakov
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
Interactive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DDevGAMM Conference
 
React Native в продакшне
React Native в продакшнеReact Native в продакшне
React Native в продакшнеEugeni Feudorov
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация4ertenka
 
Что нового в NOVA Microhypervisor
Что нового в NOVA MicrohypervisorЧто нового в NOVA Microhypervisor
Что нового в NOVA MicrohypervisorYandex
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Ontico
 

Semelhante a Клиентская Java вне браузера. Делаем нативные клиенты на Java (20)

Delivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java ApplicationsDelivering Native User Experience In Client Side Java Applications
Delivering Native User Experience In Client Side Java Applications
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios android
 
Елена Жукова "Native JavaScript на мобильных устройствах"
Елена Жукова "Native JavaScript на мобильных устройствах"Елена Жукова "Native JavaScript на мобильных устройствах"
Елена Жукова "Native JavaScript на мобильных устройствах"
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
 
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма..."Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...
 
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
Веб 3.0. Есть ли будущее у Java в RIA и Mobile?
 
Денис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылуДенис Чистяков — JavaScript на фронте и в тылу
Денис Чистяков — JavaScript на фронте и в тылу
 
Веб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и ITВеб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и IT
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
Interactive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3D
 
React Native в продакшне
React Native в продакшнеReact Native в продакшне
React Native в продакшне
 
браузеры презентация
браузеры презентациябраузеры презентация
браузеры презентация
 
Что нового в NOVA Microhypervisor
Что нового в NOVA MicrohypervisorЧто нового в NOVA Microhypervisor
Что нового в NOVA Microhypervisor
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
Успешный кейс использования React Native в продакшне, Евгений Федоров (LOOKBUCK)
 

Mais de Nikita Lipsky

Escaping The Jar hell with Jigsaw Layers
Escaping The Jar hell with Jigsaw LayersEscaping The Jar hell with Jigsaw Layers
Escaping The Jar hell with Jigsaw LayersNikita Lipsky
 
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...Nikita Lipsky
 
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeJava 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeNikita Lipsky
 
AOT для Java: Мифы и Challenges
AOT для Java: Мифы и ChallengesAOT для Java: Мифы и Challenges
AOT для Java: Мифы и ChallengesNikita Lipsky
 
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers Nikita Lipsky
 
Ahead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java ApplicationsAhead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java ApplicationsNikita Lipsky
 
Java Restart with WebFX
Java Restart with WebFX Java Restart with WebFX
Java Restart with WebFX Nikita Lipsky
 
Занимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVMЗанимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVMNikita Lipsky
 
Неумолимая близость десктопа, веба и мобайла
Неумолимая близость десктопа, веба и мобайлаНеумолимая близость десктопа, веба и мобайла
Неумолимая близость десктопа, веба и мобайлаNikita Lipsky
 
История одной JVM в картинках
История одной JVM в картинкахИстория одной JVM в картинках
История одной JVM в картинкахNikita Lipsky
 

Mais de Nikita Lipsky (10)

Escaping The Jar hell with Jigsaw Layers
Escaping The Jar hell with Jigsaw LayersEscaping The Jar hell with Jigsaw Layers
Escaping The Jar hell with Jigsaw Layers
 
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...
 
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeJava 9 Modules: The Duke Yet Lives That OSGi Shall Depose
Java 9 Modules: The Duke Yet Lives That OSGi Shall Depose
 
AOT для Java: Мифы и Challenges
AOT для Java: Мифы и ChallengesAOT для Java: Мифы и Challenges
AOT для Java: Мифы и Challenges
 
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers
 
Ahead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java ApplicationsAhead-Of-Time Compilation of Java Applications
Ahead-Of-Time Compilation of Java Applications
 
Java Restart with WebFX
Java Restart with WebFX Java Restart with WebFX
Java Restart with WebFX
 
Занимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVMЗанимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVM
 
Неумолимая близость десктопа, веба и мобайла
Неумолимая близость десктопа, веба и мобайлаНеумолимая близость десктопа, веба и мобайла
Неумолимая близость десктопа, веба и мобайла
 
История одной JVM в картинках
История одной JVM в картинкахИстория одной JVM в картинках
История одной JVM в картинках
 

Клиентская Java вне браузера. Делаем нативные клиенты на Java

  • 1. Клиентская Java вне браузера. Делаем нативные клиенты на Java Nikita Lipsky Excelsior LLC 1
  • 2. 2
  • 3. Web 3.0 – уже сейчас! 3
  • 4. Native apps • Нативные приложения – Отзывчивы – Выразительны – Удобны – Имеют доступ ко всем ресурсам устройства, которые пожелают Текущие скорости интернета позволяют их доставлять до пользователя быстро 4
  • 5. Десктоп vs. мобайл • Планшеты – для потребления контента • Десктопы – для создания контента • Тенденция слияния десктопных и планшетных OC: – Windows Surface, Universal apps – OS X / iOS – Linux для планшетов 5
  • 6. Причины написания приложения под десктоп • Доступ к локальной файловой системе • Возможность работы оффлайн • Отзывчивость системы • Эффективность разработки сложного ПО • Независимость от браузера, установленного у пользователя 6
  • 8. 8
  • 9. Кросс-платформенная разработка • QT / C++ • WebKit / JavaScript + HTML5 / C++ • Java • Mono / Xamarin / .NET Core 9
  • 10. План доклада • Обзор UI фреймворков для Java • Аспекты native UX: – установка – старт – look-n-feel – восприятие пользователем 10
  • 11. Кто знает про себя ? • Более 20 лет профессиональной карьеры • Инициатор проекта Excelsior JET – работал над проектом более 16 лет – как идейный вдохновитель – как компиляторный инженер – как руководитель – и много в каких еще ролях • Open source проекты WebFX и Java ReStart – в свободное от работы время • twitter: @pjBooms 11
  • 12. Кто знает про Excelsior JET? • Полная реализация Java SE – c 2005 года cертифицирована как Java Compatible • AOT compiler + Java Runtime – смешанная компиляция: AOT + JIT – поддержка нестандартных загрузчиков классов в AOT режиме (для Eclipse RCP, Tomcat) • Toolkit – Startup Optimizer – Deployment 12
  • 14. UI фреймворки для Java SE • AWT/Swing • SWT/JFace • LibGDX, JOGL • JavaFX 14
  • 15. Swing • Входит в стандарт Java SE • Самописные контролы/эмуляция контролов ОС • Cменяемый look-n-feel • Netbeans, IntelliJ IDEA 15
  • 16. SWT • Библиотека, разработанная IBM • Родные (native) контролы • Eclipse 16
  • 18. SWT vs. Swing • Pros Swing – легкость настройки look-n-feel – можно сделать лучше чем native (JIDE, Alloy) • Cons Swing – по умолчанию look-n-feel не совсем native – многие look-n-feel по умолчанию находят “убогим” 18
  • 19. SWT vs. Swing • Pros SWT – действительно native look-n-feel – легковесный ~2M (работает на compact1 / Apache Harmony / GCJ) – может работать поверх Swing/JavaFX • Cons SWT – тяжело сделать уникальный look-n-feel – такой же “убогий” как UI операционной системы 19
  • 20. JavaFX • Scene graph • Анимация, визуальные эффекты • FXML, CSS • Скриптовые языки: JavaScript, Groovy, JRuby • Multi touch • Бизнес-графика, media, 3D • Аппаратное ускорение графики • HTML5 & WebView (на основе WebKit) 20
  • 21. Scene Graph vs. Layout Managers 21
  • 25. JavaFX Hybrid Apps 25 Десктопные приложения вместо веба с апплетами
  • 28. 28
  • 29. JavaFXPorts.org • iOS & RoboVM • Android & LodgON 29
  • 31. 31
  • 32. Native clients • Правило №1: – Ваш пользователь не должен знать, что такое Java. Не должен! • Решение: – Ваше приложение должно запускаться как .exe целевой платформы – Не зависеть от Java, установленной у клиента 32
  • 33. Java to Exe Сделать из Java исполняемый файл целевой платформы не просто … 33
  • 34. Java to Exe Сделать из Java исполняемый файл целевой платформы не просто а очень просто! 34
  • 35. Java to Exe Сделать из Java исполняемый файл целевой платформы не просто а очень просто! И совершенно бесплатно! 35
  • 36. Java to Exe • Можно самому – Invocation API • Много бесплатных (и платных) инструментов – Launch4J – Exe4J – etc. Tip: Google “Java to Exe” 36
  • 37. Native bundle Чтобы устранить зависимость от JRE нужно … 37
  • 38. Native bundle Чтобы устранить зависимость от JRE нужно … просто включить JRE целиком в состав приложения 38
  • 39. Native bundle Чтобы устранить зависимость от JRE нужно … просто включить JRE целиком в состав приложения Это абсолютно легально по лицензии на JRE (но включать надо все файлы JRE, за редким исключением) 39
  • 41. Native bundle Теперь ваше приложение распространяется простым копированием – можно завернуть в дистрибутив целевой платформы Бесплатные инсталляторы: WiX, InnoSetup, NSIS, Excelsior Installer Платные: InstallAnywhere, InstallShield 41
  • 42. Java-aware инсталляторы • Java Packager (требует WiX или InnoSetup) – Ant task – Maven plugin (https://github.com/javafx-maven-plugin/javafx-maven-plugin ) • IzPack (free) • Install4J (commercial) – Instant splash – Autoupdates – И много чего еще 42
  • 43. Native bundle • Private JRE увеличивает дистрибутив на 30-70 MB Можно ли уменьшить эти издержки? 43
  • 44. Small Private JRE • Лицензия на Oracle JRE запрещает его “уменьшать” • Альтернативные открытые реализации Java: – OpenJDK – Apache Harmony/Android classlib – GNU Classpath 44
  • 45. 45
  • 46. Compact Profiles Compact1 Compact2 Compact3 java.lang java.rmi java.lang.instrument java.io java.sql java.lang.management java.math javax.transaction javax.management java.nio javax.xml javax.naming java.util org.w3c.dom javax.script java.net org.xml.sax javax.security java.security javax.sql javax.crypto javax.xml.crypto java.text org.ietf.jgss 46 Есть в Java SE Embedded и OpenJDK
  • 47. Compact Profiles: размеры • Compact1: 11MB • Compact2: 15MB • Compact3: 21MB Замечание: размеры на диске (ROM) 47
  • 49. Excelsior Java Runtime Slim-Down • Java SE API делится на компоненты: – Kernel, XML, SQL, CORBA, AWT/Java2D, Swing, etc. • анализатор определяет какие компоненты “нужны” – содержат достижимые методы 49
  • 50. Глобальный анализатор Application Java SE API Entry points - used - not used - component’s boundary 50
  • 51. Java Runtime Slim-Down • Пользователю предоставляются: – результаты анализа c возможностью исключить неиспользуемые компоненты из дистрибутива 51
  • 52. Java Packager vs. Runtime Slim-Down Java Packager Java Runtime Slim-Down Ensemble Demo 41 MB 18 MB BrickBreaker 37 MB 10 MB 52
  • 54. Что делает JVM на старте 54
  • 56. 56
  • 57. Как ускорить старт без AOT • Instant splash • Выяснить, какие классы грузятся на старте, и перепаковать ваши jars в порядке загрузки классов – VM arg: -verbose:class • Упаковать все jar в один (One-Jar, Autojar) 57
  • 59. Look-n-feel Миф о native look-n-feel: Приложение только тогда нативное, когда оно выглядит ”привычно” для конечного пользователя и похоже на другие приложения данной операционной системы 59
  • 62. Look-n-feel • Приложение воспринимается как родное: – интуитивно понятный интерфейс – мгновенный отклик – выглядит хорошо – UI разработан профессионалами в областях графического дизайна и UX – с учетом HIG (human interface guidelines) целевой платформы 62
  • 64. Look-n-feel • Приложение воспринимается как родное: – интуитивно понятный интерфейс – мгновенный отклик – выглядит хорошо – UI разработан профессионалами в областях графического дизайна и UX – с учетом HIG (human interface guidelines) целевой платформы 64
  • 67. JavaFX Scene Builder • Действительно WYSIWYG – Манипуляция ровно теми же объектами, что и потом “идут в бой” • Порождает FXML – Понимает рукописный FXML • Легко расширяется вашими контролами – Как first class citizen • Сейчас – open source 67
  • 71. Отзывчивость UI • JIT хорошо работает для горячего кода • UI приложения – пример приложений без ярко выраженного горячего кода – Профиль исполнения практически плоский – JIT долго греется • AOT работает лучше, оптимизируя каждую строчку кода максимально агрессивно 71
  • 72. JFCMark (Short Run) 0% 20% 40% 60% 80% 100% 120% 140% 160% 180% 200% 4 core i5, 3.8Ghz Excelsior JET HotSpot client HotSpot server 72 Больше – лучше
  • 73. JFCMark (Long Run) 0% 20% 40% 60% 80% 100% 120% 140% 160% 4 core i5, 3.8Ghz Excelsior JET HotSpot client HotSpot server 73 Больше – лучше
  • 74. Заключение • Javа прекрасно подходит для client side – кросс-платформенна – богатый выбор UI фреймворков • JavaFX – потрясающая технология – практически готова для mobile • Native bundle для Java приложения – легко! – уникально именованный процесс – независимость от Java у пользователя • Проектировка UI & UX – дело профессионалов – дизайнеры наше все • AOT улучшает UX 74
  • 75. Вопросы и ответы Никита Липский, Excelsior nlipsky@excelsior-usa.com twitter: @pjBooms 75