Telegram Web Link
Repomix: Pack your codebase into AI-friendly formats

Repomix - библиотека, которая запакует ваш репозиторий в формат, удобный для AI. Собранный документ затем можно кидать в любую LLM как проект, с которым можно работать.

Какой-то магии здесь нет - библиотека буквально формирует огромный файл, где структурировано расписано - какие файлы есть в проекте и какой у них контент. Как нибудь попробую поиграться с этим на пет-проекте.

https://repomix.com

#development #javascript #library #ai
👍8
Modern Node.js Patterns for 2025

Список современных бест-практисов nodejs в частном блоге. Часть бест-практисов уже "старые", часть - достаточно интересные. В любом случае полезно ознакомиться, возможно найдете что-то для себя

Из банальных советов: используйте ESM, fetch, async await, воркеры для сложных вычислений, кастомные классы ошибок. Менее банальные стоит расписать подробнее.

В основном бест-практисы связаны с использованием внутренних инструментов nodejs, вместо использования внешних библиотек, либо с использованием общих web-стандартов, вместо использования специфичного для nodejs решения.

В nodejs завезли test-runner, теперь можно запускать автотесты без внешних библиотек

В nodejs с самого начала была хорошая поддержка потоков (Streams). Теперь же потоки есть и в Web-стандартах, поэтому пора переходить на работу с ними, делая свой код кросс-платформенным.

Завезли новые удобные флаги для разработки - --watch, --env-file, которые убирают необходимость во внешних библиотеках типа dotenv и nodemon

Также в nodejs теперь есть возможность ограничивать возможность приложений как в deno. Правда, пока за экспериментальными флагами

# Run with restricted file system access
node --experimental-permission --allow-fs-read=./data --allow-fs-write=./logs app.js

# Network restrictions
node --experimental-permission --allow-net=api.example.com app.js


В nodejs теперь есть возможность мониторить перформанс, что, опять же, убирает необходимость во внешних библиотеках


import { PerformanceObserver, performance } from 'node:perf_hooks';

// Set up automatic performance monitoring
const obs = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.duration > 100) { // Log slow operations
console.log(`Slow operation detected: ${entry.name} took ${entry.duration}ms`);
}
}
});
obs.observe({ entryTypes: ['function', 'http', 'dns'] });

// Instrument your own operations
async function processLargeDataset(data) {
performance.mark('processing-start');

const result = await heavyProcessing(data);

performance.mark('processing-end');
performance.measure('data-processing', 'processing-start', 'processing-end');

return result;
}


Если вам нужно доставлять nodejs-приложение единым файлом, то nodejs теперь умеет делать это сама (опять же - убирается зависимость от внешних тулов)


# Create a self-contained executable
node --experimental-sea-config sea-config.json


Также следует использовать новые возможности node:diagnostics_channel. Можно создать канал диагностики, куда можно публиковать события, которые можно затем передавать в специализированный тулинг

import diagnostics_channel from 'node:diagnostics_channel';

// Create custom diagnostic channels
const dbChannel = diagnostics_channel.channel('app:database');
const httpChannel = diagnostics_channel.channel('app:http');

// Subscribe to diagnostic events
dbChannel.subscribe((message) => {
console.log('Database operation:', {
operation: message.operation,
duration: message.duration,
query: message.query
});
});

// Publish diagnostic information
async function queryDatabase(sql, params) {
const start = performance.now();

try {
const result = await db.query(sql, params);

dbChannel.publish({
operation: 'query',
sql,
params,
duration: performance.now() - start,
success: true
});

return result;
} catch (error) {
dbChannel.publish({
operation: 'query',
sql,
params,
duration: performance.now() - start,
success: false,
error: error.message
});
throw error;
}
}


https://kashw1n.com/blog/nodejs-2025/

#development #javascript #nodejs
👍20🔥64
Speculative Optimizations for WebAssembly using Deopts and Inlining

Статья в блоге V8 про ускорение WASM в недавнем релизе V8. В целом WASM ранее не нуждался в каких-то спекулятивных оптимизациях т.к. сгенерированный wasm-код уже был эффективный. Но вот мы дошли до создания WASM Garbage Collector, чтобы позволить языкам типа Java, Kotlin, Dart компилироваться в WASM. И вот в WasmGC уже можно заниматься спекулятивными оптимизациями.

Статья, как и многие другие в блоге v8 - одновременно хардкорная и достаточно хорошо разжеванная для обычных людей. Цитировать что-то из нее не буду - если вам интересна тема - рекомендую окунуться в чтение.

https://v8.dev/blog/wasm-speculative-optimizations

#development #javascript #v8 #wasm #performance
👍7
2025/07/10 09:03:13
Back to Top
HTML Embed Code: