瀏覽代碼

use preload to load faceapi resource

Michael Wang 3 年之前
父節點
當前提交
25879640dd
共有 2 個文件被更改,包括 18 次插入18 次删除
  1. 10 18
      src/features/UserLogin/UserLogin.vue
  2. 8 0
      src/utils/utils.ts

+ 10 - 18
src/features/UserLogin/UserLogin.vue

@@ -15,7 +15,7 @@ import { createEncryptLog, createUserDetailLog } from "@/utils/logger";
 import { MD5 } from "@/utils/md5";
 import { getScreenShot, isElectron } from "@/utils/nativeMethods";
 import ua from "@/utils/ua";
-import { decryptLogin } from "@/utils/utils";
+import { decryptLogin, preloadResource } from "@/utils/utils";
 import { CloseCircleOutline, LockClosed, Person } from "@vicons/ionicons5";
 import { FormItemInst, FormRules } from "naive-ui";
 import { onMounted, watch } from "vue";
@@ -74,23 +74,15 @@ useExamShellStats();
 
 //#region cache faceapi json
 {
-  const begin = Date.now();
-  void Promise.all([
-    fetch(
-      FACE_API_MODEL_PATH + "tiny_face_detector_model-weights_manifest.json"
-    ),
-    fetch(FACE_API_MODEL_PATH + "face_landmark_68_model-weights_manifest.json"),
-    fetch(FACE_API_MODEL_PATH + "face_expression_model-weights_manifest.json"),
-  ]).then(() => {
-    logger({
-      cnl: ["console", "local", "server"],
-      pgn: "登录页面",
-      act: "faceapi json loaded",
-      ext: {
-        expense: Date.now() - begin,
-      },
-    });
-  });
+  const faceapiUrls = [
+    FACE_API_MODEL_PATH + "tiny_face_detector_model-weights_manifest.json",
+    FACE_API_MODEL_PATH + "face_landmark_68_model-weights_manifest.json",
+    FACE_API_MODEL_PATH + "face_expression_model-weights_manifest.json",
+  ];
+
+  for (const u of faceapiUrls) {
+    preloadResource(u);
+  }
 }
 //#endregion
 

+ 8 - 0
src/utils/utils.ts

@@ -55,6 +55,14 @@ export function toChineseNumber(num: number) {
   return ret;
 }
 
+export function preloadResource(url: string) {
+  const preloadLink = document.createElement("link");
+  preloadLink.href = url;
+  preloadLink.rel = "preload";
+  preloadLink.as = "script";
+  document.head.appendChild(preloadLink);
+}
+
 // let salt: string;
 // export function setSalt(_salt: string) {
 //   salt = _salt;