Загрузка множества javascript файлов с взаимозависимостями в контекст JavaScriptCore - PullRequest
1 голос
/ 17 июня 2020

В следующих вопросах и ответах показано, как загрузить один файл javascript в JavaScriptCore: { ссылка }

func analyzeText(scriptName: String) {
    var ext = scriptName.pathExtension
    var fileName = scriptName.substringToIndex(
        advance(scriptName.startIndex, 
                scriptName.utf16Count - ext.utf16Count - 1))

    if fileExtension.utf16Count == 0 {
        fileName = scriptName
        ext = "js"
    }

    let url = NSBundle.mainBundle()
        .URLForResource(fileName, withExtension: ext)
    let scriptCode = String(contentsOfURL: url!, 
                            encoding: NSUTF8StringEncoding, 
                            error: nil)!

    var context = JSContext(virtualMachine: JSVirtualMachine())
    context.evaluateScript(scriptCode)
    /* ... */
}

Что делать, если файлов javascript много и они имеют взаимозависимости: могут ли они загружаться последовательно в порядке, обратном их зависимостям, и ожидать правильного разрешения?

  1. utils.js
  2. file1NeedingUtils.js
  3. file2NeedingFile1.js

Итак:

func analyzeText(jsContext: JSContext, scriptName: String) {
    var ext = scriptName.pathExtension
    var fileName = scriptName.substringToIndex(
        advance(scriptName.startIndex, 
                scriptName.utf16Count - ext.utf16Count - 1))

    if fileExtension.utf16Count == 0 {
        fileName = scriptName
        ext = "js"
    }

    let url = NSBundle.mainBundle()
        .URLForResource(fileName, withExtension: ext)
    let scriptCode = String(contentsOfURL: url!, 
                            encoding: NSUTF8StringEncoding, 
                            error: nil)!

    jsContext.evaluateScript(scriptCode)
}
var jsCtx = JSContext(virtualMachine: JSVirtualMachine())


["utils.js","file1NeedingUtils.js","file2NeedingFile1.js"]
      .forEach( x in analyzeScript(jsCtx, x))

Обратите внимание, что мы используем один и тот же JSContext для всех вызовов.

Эта функциональность обычно домен обрабатываемого браузера. Я планирую go по этому маршруту, но мне интересно, могут ли быть проблемы. Кроме того, есть ли полезные оптимизации процесса?

...