Browse Source

Pull request #8198: feat: KERNEL-10354 bytebuddy / 加解密性能优化 @Harrison

Merge in DESIGN/design from ~HARRISON/design:feature/x to feature/x

* commit '93a52c73bcacd2cc00e25d922dff79b6ad75c197':
  feat: KERNEL-10354 bytebuddy / 加解密性能优化 @Harrison 将启动画面整体前移到启动最开始的时候。 减少视觉偏差。
  feat: KERNEL-10354 bytebuddy / 加解密性能优化 @Harrison 处理设计器的 loginAuthServer 逻辑 启动的时候比较耗时,完全没必要启动的时候就起来。 等启动完成后启动也没关系
feature/x
Harrison 3 years ago
parent
commit
9608384b67
  1. 24
      designer-base/src/main/java/com/fr/design/login/socketio/LoginAuthServer.java
  2. 32
      designer-realize/src/main/java/com/fr/start/MainDesigner.java
  3. 2
      designer-realize/src/main/java/com/fr/start/SplashContext.java
  4. 23
      designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java
  5. 31
      designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java
  6. 8
      designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java

24
designer-base/src/main/java/com/fr/design/login/socketio/LoginAuthServer.java

@ -1,5 +1,6 @@
package com.fr.design.login.socketio; package com.fr.design.login.socketio;
import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.login.DesignerLoginType; import com.fr.design.login.DesignerLoginType;
import com.fr.design.login.bean.BBSAccountLogin; import com.fr.design.login.bean.BBSAccountLogin;
@ -11,7 +12,11 @@ import com.fr.third.socketio.Configuration;
import com.fr.third.socketio.SocketIOClient; import com.fr.third.socketio.SocketIOClient;
import com.fr.third.socketio.SocketIOServer; import com.fr.third.socketio.SocketIOServer;
import com.fr.third.socketio.listener.DataListener; import com.fr.third.socketio.listener.DataListener;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
/** /**
* @author Lanlan * @author Lanlan
@ -20,6 +25,8 @@ import java.net.URLDecoder;
*/ */
public class LoginAuthServer { public class LoginAuthServer {
private AtomicBoolean started = new AtomicBoolean(false);
private SocketIOServer server; private SocketIOServer server;
private static final String HOSTNAME = "localhost"; private static final String HOSTNAME = "localhost";
@ -47,6 +54,23 @@ public class LoginAuthServer {
} }
public void start() { public void start() {
// 只运行一次,不在乎成不成功
if (started.compareAndSet(false, true)) {
asyncStart();
}
}
public void asyncStart() {
ExecutorService asyncService = Executors.newSingleThreadExecutor(new NamedThreadFactory(LoginAuthServer.class.getName(), true));
asyncService.submit(this::compatibleStart);
asyncService.shutdown();
}
@Deprecated
public void compatibleStart() {
try { try {
server.start(); server.start();
} catch (Exception e) { } catch (Exception e) {

32
designer-realize/src/main/java/com/fr/start/MainDesigner.java

@ -16,6 +16,7 @@ import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.MutilTempalteTabPane;
import com.fr.design.fun.MenuHandler; import com.fr.design.fun.MenuHandler;
import com.fr.design.fun.OemProcessor;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIPreviewButton; import com.fr.design.gui.ibutton.UIPreviewButton;
import com.fr.design.gui.ibutton.UISaveForbiddenButton; import com.fr.design.gui.ibutton.UISaveForbiddenButton;
@ -42,6 +43,7 @@ import com.fr.design.module.DesignModuleFactory;
import com.fr.design.monitor.DesignerLifecycleMonitorContext; import com.fr.design.monitor.DesignerLifecycleMonitorContext;
import com.fr.design.notification.ui.NotificationCenterPane; import com.fr.design.notification.ui.NotificationCenterPane;
import com.fr.design.share.SharableManager; import com.fr.design.share.SharableManager;
import com.fr.design.ui.util.UIUtil;
import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.concurrent.ThreadFactoryBuilder;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.env.utils.DesignerInteractionHistory; import com.fr.env.utils.DesignerInteractionHistory;
@ -59,6 +61,7 @@ import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.lifecycle.FineLifecycleFatalError; import com.fr.stable.lifecycle.FineLifecycleFatalError;
import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLTools;
import com.fr.start.common.SplashCommon;
import com.fr.start.module.StartupArgs; import com.fr.start.module.StartupArgs;
import com.fr.start.server.ServerTray; import com.fr.start.server.ServerTray;
import com.fr.third.org.apache.commons.lang3.time.StopWatch; import com.fr.third.org.apache.commons.lang3.time.StopWatch;
@ -107,6 +110,7 @@ public class MainDesigner extends BaseDesigner {
*/ */
public static void main(String[] args) { public static void main(String[] args) {
showSplash();
DeepLinkManager.getInstance().start(args); DeepLinkManager.getInstance().start(args);
StopWatch watch = new StopWatch(); StopWatch watch = new StopWatch();
watch.start(); watch.start();
@ -137,6 +141,17 @@ public class MainDesigner extends BaseDesigner {
watch.stop(); watch.stop();
} }
private static void showSplash() {
// 快快显示启动画面
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
@Override
public void run() {
SplashContext.getInstance().registerSplash(createSplash());
SplashContext.getInstance().show();
}
});
}
/** /**
* 创建新建文件的快捷方式数组 * 创建新建文件的快捷方式数组
* *
@ -529,4 +544,21 @@ public class MainDesigner extends BaseDesigner {
historyCollector.saveXMLFile(); historyCollector.saveXMLFile();
} }
private static SplashStrategy createSplash() {
OemProcessor oemProcessor = OemHandler.findOem();
if (oemProcessor != null) {
SplashStrategy splashStrategy = null;
try {
splashStrategy = oemProcessor.createSplashStrategy();
} catch (Throwable e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
if (splashStrategy != null) {
return splashStrategy;
}
}
return new SplashCommon();
}
} }

2
designer-realize/src/main/java/com/fr/start/SplashContext.java

@ -36,7 +36,7 @@ public class SplashContext {
private SplashStrategy splashStrategy; private SplashStrategy splashStrategy;
private String moduleId = ""; private String moduleId = Toolkit.i18nText("Fine-Design_Basic_Initializing");
private int loadingIndex = 0; private int loadingIndex = 0;
private String[] loading = new String[]{"..", "....", "......"}; private String[] loading = new String[]{"..", "....", "......"};

23
designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java

@ -3,6 +3,7 @@ package com.fr.start.module;
import com.fr.base.BaseFormula; import com.fr.base.BaseFormula;
import com.fr.base.Formula; import com.fr.base.Formula;
import com.fr.base.MultiFieldParameter; import com.fr.base.MultiFieldParameter;
import com.fr.base.OptimizeUtil;
import com.fr.base.passport.FinePassportListenerAdapter; import com.fr.base.passport.FinePassportListenerAdapter;
import com.fr.base.passport.FinePassportManager; import com.fr.base.passport.FinePassportManager;
import com.fr.base.process.ProcessOperator; import com.fr.base.process.ProcessOperator;
@ -80,7 +81,10 @@ import com.fr.design.share.ui.generate.ShareGeneratePane;
import com.fr.design.update.actions.RecoverForDesigner; import com.fr.design.update.actions.RecoverForDesigner;
import com.fr.design.update.push.DesignerPushUpdateManager; import com.fr.design.update.push.DesignerPushUpdateManager;
import com.fr.design.widget.ui.btn.FormSubmitButtonDetailPane; import com.fr.design.widget.ui.btn.FormSubmitButtonDetailPane;
import com.fr.event.Event;
import com.fr.event.EventDispatcher; import com.fr.event.EventDispatcher;
import com.fr.event.Listener;
import com.fr.event.Null;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.xml.GeneralXMLTools; import com.fr.general.xml.GeneralXMLTools;
import com.fr.js.EmailJavaScript; import com.fr.js.EmailJavaScript;
@ -159,6 +163,8 @@ public class DesignerActivator extends Activator implements Prepare {
@Override @Override
public void start() { public void start() {
startLoginAuthServer();
migrateBBSInfoFromFineDB(); migrateBBSInfoFromFineDB();
FormThemeConfigMigrator.getInstance().upgrade(); FormThemeConfigMigrator.getInstance().upgrade();
ReportThemeConfigMigrator.getInstance().upgrade(); ReportThemeConfigMigrator.getInstance().upgrade();
@ -488,7 +494,22 @@ public class DesignerActivator extends Activator implements Prepare {
@Override @Override
public void prepare() { public void prepare() {
LoginAuthServer.getInstance().start();
ContentReplacerCenter.getInstance().register(); ContentReplacerCenter.getInstance().register();
} }
private void startLoginAuthServer() {
OptimizeUtil.execute(() -> {
// 设计器启动后启动
EventDispatcher.listen(DesignerLaunchStatus.STARTUP_COMPLETE, new Listener<Null>() {
@Override
public void on(Event event, Null param) {
LoginAuthServer.getInstance().start();
}
});
}, () -> {
LoginAuthServer.getInstance().compatibleStart();
});
}
} }

31
designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java

@ -5,13 +5,11 @@ import com.fr.concurrent.NamedThreadFactory;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.RestartHelper; import com.fr.design.RestartHelper;
import com.fr.design.dialog.TipDialog; import com.fr.design.dialog.TipDialog;
import com.fr.design.fun.OemProcessor;
import com.fr.design.fun.impl.GlobalListenerProviderManager; import com.fr.design.fun.impl.GlobalListenerProviderManager;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.messagecollect.StartErrorMessageCollector; import com.fr.design.mainframe.messagecollect.StartErrorMessageCollector;
import com.fr.design.mainframe.messagecollect.StartupMessageCollector; import com.fr.design.mainframe.messagecollect.StartupMessageCollector;
import com.fr.design.mainframe.messagecollect.entity.DesignerErrorMessage; import com.fr.design.mainframe.messagecollect.entity.DesignerErrorMessage;
import com.fr.design.ui.util.UIUtil;
import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignUtils;
import com.fr.design.utils.DesignerPort; import com.fr.design.utils.DesignerPort;
import com.fr.exit.DesignerExiter; import com.fr.exit.DesignerExiter;
@ -26,11 +24,7 @@ import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.start.DesignerProcessType; import com.fr.start.DesignerProcessType;
import com.fr.start.OemHandler;
import com.fr.start.ServerStarter; import com.fr.start.ServerStarter;
import com.fr.start.SplashContext;
import com.fr.start.SplashStrategy;
import com.fr.start.common.SplashCommon;
import com.fr.start.server.FineEmbedServer; import com.fr.start.server.FineEmbedServer;
import com.fr.value.NotNullLazyValue; import com.fr.value.NotNullLazyValue;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -100,14 +94,6 @@ public class DesignerStartup extends Activator {
DesignerExiter.getInstance().execute(); DesignerExiter.getInstance().execute();
return; return;
} }
// 快快显示启动画面
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
@Override
public void run() {
SplashContext.getInstance().registerSplash(createSplash());
SplashContext.getInstance().show();
}
});
} }
@Override @Override
@ -142,23 +128,6 @@ public class DesignerStartup extends Activator {
StartupMessageCollector.getInstance().recordStartupLog(); StartupMessageCollector.getInstance().recordStartupLog();
} }
private SplashStrategy createSplash() {
OemProcessor oemProcessor = OemHandler.findOem();
if (oemProcessor != null) {
SplashStrategy splashStrategy = null;
try {
splashStrategy = oemProcessor.createSplashStrategy();
} catch (Throwable e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
if (splashStrategy != null) {
return splashStrategy;
}
}
return new SplashCommon();
}
private void browserDemoIfNeeded() { private void browserDemoIfNeeded() {
if (startupArgsValue.getValue().isDemo()) { if (startupArgsValue.getValue().isDemo()) {

8
designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java

@ -2,14 +2,11 @@ package com.fr.start.module;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.RestartHelper; import com.fr.design.RestartHelper;
import com.fr.design.i18n.Toolkit;
import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignUtils;
import com.fr.event.EventDispatcher;
import com.fr.file.TmpFileUtils; import com.fr.file.TmpFileUtils;
import com.fr.general.CloudCenter; import com.fr.general.CloudCenter;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.module.Activator; import com.fr.module.Activator;
import com.fr.module.ModuleEvent;
/** /**
* Created by juhaoyu on 2018/1/8. * Created by juhaoyu on 2018/1/8.
@ -21,8 +18,9 @@ public class PreStartActivator extends Activator {
//清空临时文件 //清空临时文件
TmpFileUtils.cleanUpInnerTmpFiles(); TmpFileUtils.cleanUpInnerTmpFiles();
RestartHelper.deleteRecordFilesWhenStart(); RestartHelper.deleteRecordFilesWhenStart();
//初始化 //初始化起始画面放到 SplashContext 里面
EventDispatcher.fire(ModuleEvent.MajorModuleStarting, Toolkit.i18nText("Fine-Design_Basic_Initializing")); //EventDispatcher.fire(ModuleEvent.MajorModuleStarting, Toolkit.i18nText("Fine-Design_Basic_Initializing"));
// 完成初始化 // 完成初始化
//noinspection ResultOfMethodCallIgnored //noinspection ResultOfMethodCallIgnored
CloudCenter.getInstance(); CloudCenter.getInstance();

Loading…
Cancel
Save