уебработниците изглежда не работят в производството

Имам приложение и то използва уебработници, за да помогне за извършване на някои изчисления с други работници. Грешката, която хвърля, по същество се оплаква, че данните, които очаква, не са там, тъй като изчисленията не са изчислени.

Изчисленията се извършват локално с работещи уебработници, но в prod съм почти без идеи защо не работи.

Едно нещо, което трябва да отбележа е, че тъй като имам нужда от импортиран контекст на определени функции (дефинирани извън работния контекст), последвах съвета, предложен тук: ( Създаване на уеб работник в React ) и първо го нанизвам и първо го превръщам в петно.

`

export const buildBlobUrlFromCode = (code) => {
    // returns a DOMString that links context to the code within the blob
    code = code.substring(code.indexOf("{") + 1, code.lastIndexOf("}"));
    const blob = new Blob([code], { type: "application/javascript" });

    return URL.createObjectURL(blob);
}

export class WebWorker {
    constructor(worker) {
        let code = worker.toString();
        // const blobUrl = strDecoratedBuildBlobUrlFromCode(code);
        const blobUrl = buildBlobUrlFromCode(code);

        return new Worker(blobUrl);
    }
}

и как използвам горния код е: const workerInstance = new WebWorker(MyWorker);

където MyWorker е fn, експортиран с дефиниран onmessage и всички операции, дефинирани вътре.

Добавих някои регистрационни файлове и по същество прекъсването на кода, когато започна да стартирам изчислението с: workerInstance.postMessage([data]);

Също така трябва да се отбележи, че използвам react-create-app, за да създам моето приложение и все още не съм го извадил, така че конфигурациите на webpack са недокоснати.

Също така -- изходните файлове за тези работници са напълно празни при внедряване, но се попълват локално (както в мога да видя действителния код във файловете worker.js)

Heroku -- Счупен: На heroku (счупен) -- разгърнат

Локален -- Работещ: На локално (работещо) --


person Brian Zhou    schedule 18.06.2018    source източник


Отговори (1)


Борихме се с подобен проблем и открихме следното...

Ние също използваме Webpack и, което е важно, производствена конфигурация, която украси кода. По време на този процес установихме, че променливата на функцията onmessage се отхвърля, тъй като не се извиква никъде другаде. Това обяснява защо не се вижда код в работния екземпляр на производствената компилация.

Открихме и друг потенциален капан в това, че процесът на оглупяване променя всички имена на променливи на единични знаци. Този процес също би направил функцията onmessage безполезна.

За да го коригирате, вместо да декларирате променливата onmessage, присвоете onmessage на глобалния обект (this)

this.onmessage = (event) => {}

По този начин uglification не отхвърли кода и името на функцията не беше променено.

Знам, че е късно, но се надявам да помогне.

person Tom Duckworth    schedule 16.05.2019