Code splitting — это техника оптимизации загрузки JavaScript-кода, позволяющая разбивать приложение на отдельные модули и загружать их по мере необходимости. В библиотеке Mind.js это реализуется через динамическую загрузку компонентов и использование асинхронных модулей, что снижает время первоначальной загрузки и улучшает производительность.
Mind.js поддерживает модульную архитектуру, что позволяет разделять код на функциональные блоки:
import { NeuralNetwork } from 'mindjs';
const net = new NeuralNetwork({
inputSize: 3,
hiddenLayers: [5],
outputSize: 1
});
Каждый модуль можно подключать отдельно, благодаря чему основной
бандл остаётся лёгким. Для динамической загрузки используется синтаксис
import():
async function loadNetworkModule() {
const { NeuralNetwork } = await import('mindjs');
const net = new NeuralNetwork({ inputSize: 2, hiddenLayers: [4], outputSize: 1 });
return net;
}
Mind.js позволяет загружать нейросети и данные только тогда, когда они реально нужны. Это снижает потребление памяти и ускоряет работу приложения. Пример ленивой загрузки модели:
let model;
async function getModel() {
if (!model) {
const { NeuralNetwork } = await import('mindjs');
model = new NeuralNetwork({ inputSize: 2, hiddenLayers: [3], outputSize: 1 });
}
return model;
}
При таком подходе основная часть кода загружается сразу, а ресурсоёмкие модули подключаются по требованию.
Mind.js прекрасно интегрируется с системами сборки типа Webpack. Для
эффективного code splitting используется директива
/* webpackChunkName: "chunk-name" */:
async function loadAdvancedNetwork() {
const { NeuralNetwork } = await import(
/* webpackChunkName: "advanced-network" */ 'mindjs'
);
return new NeuralNetwork({ inputSize: 5, hiddenLayers: [10, 5], outputSize: 2 });
}
Это позволяет явно задавать имена отдельных чанков, облегчая отладку и кэширование.
В Mind.js рекомендуется разделять код обучения нейросети и код, выполняющий предсказания. Это уменьшает размер бандла, загружаемого на клиентскую сторону. Пример:
Обучение (сервер):
import { NeuralNetwork } from 'mindjs';
const net = new NeuralNetwork({ inputSize: 3, hiddenLayers: [5], outputSize: 1 });
net.train([{ input: [0,1,0], output: [1] }]);
export const trainedModel = net.toJSON();
Предсказания (клиент, лениво):
let net;
async function predict(input) {
if (!net) {
const { NeuralNetwork } = await import('mindjs');
net = NeuralNetwork.fromJSON(await fetch('/trainedModel.json').then(res => res.json()));
}
return net.run(input);
}
В проектах с Mind.js большие модели и утилиты для обработки данных можно разделять на отдельные модули. Это позволяет загружать тяжелые части кода только при необходимости:
async function loadUtilities() {
const utils = await import('./utils/dataProcessing.js');
return utils;
}
Такая организация повышает читаемость кода, ускоряет сборку и уменьшает задержку при инициализации приложения.
Code splitting совместно с кэшированием чанков позволяет значительно уменьшить количество повторных загрузок. Mind.js-модули можно хранить в отдельных бандлах и загружать с CDN, используя хеширование файлов:
const networkModule = await import(`/cdn/mindjs-network.${hash}.js`);
Это обеспечивает быстрый доступ к модулям, которые редко изменяются, и оставляет основной бандл лёгким и быстро загружаемым.
Для больших датасетов целесообразно загружать данные частями, используя асинхронные функции. Например:
async function loadTrainingData(batch) {
const response = await fetch(`/data/batch_${batch}.json`);
const data = await response.json();
return data;
}
В сочетании с динамической загрузкой моделей это позволяет строить масштабируемые приложения с Mind.js, минимизируя нагрузку на клиент и сеть.
Mind.js с code splitting интегрируется с React, Vue и другими фронтенд-фреймворками. Компоненты, использующие нейросети, можно загружать лениво через динамический импорт:
const NeuralComponent = React.lazy(() => import('./NeuralComponent.js'));
Таким образом достигается минимальный вес основного бандла и высокая отзывчивость интерфейса.