From 5d07bba603775a5f98c73c6b11c89323d13f1bde Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Tue, 15 Oct 2024 17:04:08 +0800 Subject: [PATCH] perf: use `hash` to replace `createHash` (#6703) --- packages/vitest/src/integrations/css/css-modules.ts | 4 ++-- packages/vitest/src/node/cache/index.ts | 4 ++-- packages/vitest/src/node/hash.ts | 7 +++++++ packages/vitest/src/node/pools/rpc.ts | 4 ++-- packages/vitest/src/node/sequencers/BaseSequencer.ts | 4 ++-- 5 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 packages/vitest/src/node/hash.ts diff --git a/packages/vitest/src/integrations/css/css-modules.ts b/packages/vitest/src/integrations/css/css-modules.ts index 95a50272989c..15948db5a27c 100644 --- a/packages/vitest/src/integrations/css/css-modules.ts +++ b/packages/vitest/src/integrations/css/css-modules.ts @@ -1,8 +1,8 @@ -import { createHash } from 'node:crypto' +import { hash } from '../../node/hash' import type { CSSModuleScopeStrategy } from '../../node/types/config' export function generateCssFilenameHash(filepath: string) { - return createHash('md5').update(filepath).digest('hex').slice(0, 6) + return hash('md5', filepath, 'hex').slice(0, 6) } export function generateScopedClassName( diff --git a/packages/vitest/src/node/cache/index.ts b/packages/vitest/src/node/cache/index.ts index 3d6008ae0e8d..d6483db41bfa 100644 --- a/packages/vitest/src/node/cache/index.ts +++ b/packages/vitest/src/node/cache/index.ts @@ -1,6 +1,6 @@ -import crypto from 'node:crypto' import { resolve } from 'pathe' import { slash } from '../../utils' +import { hash } from '../hash' import { FilesStatsCache } from './files' import { ResultsCache } from './results' @@ -26,7 +26,7 @@ export class VitestCache { ? resolve( root, baseDir, - crypto.createHash('md5').update(projectName, 'utf-8').digest('hex'), + hash('md5', projectName, 'hex'), ) : resolve(root, baseDir) } diff --git a/packages/vitest/src/node/hash.ts b/packages/vitest/src/node/hash.ts new file mode 100644 index 000000000000..cd93d8216d25 --- /dev/null +++ b/packages/vitest/src/node/hash.ts @@ -0,0 +1,7 @@ +import crypto from 'node:crypto' + +export const hash = crypto.hash ?? (( + algorithm: string, + data: crypto.BinaryLike, + outputEncoding: crypto.BinaryToTextEncoding, +) => crypto.createHash(algorithm).update(data).digest(outputEncoding)) diff --git a/packages/vitest/src/node/pools/rpc.ts b/packages/vitest/src/node/pools/rpc.ts index 9bfde0e6cb9c..21825c4f0705 100644 --- a/packages/vitest/src/node/pools/rpc.ts +++ b/packages/vitest/src/node/pools/rpc.ts @@ -1,9 +1,9 @@ -import { createHash } from 'node:crypto' import { mkdir, writeFile } from 'node:fs/promises' import type { RawSourceMap } from 'vite-node' import { join } from 'pathe' import type { WorkspaceProject } from '../workspace' import type { RuntimeRPC } from '../../types/rpc' +import { hash } from '../hash' const created = new Set() const promises = new Map>() @@ -47,7 +47,7 @@ export function createMethodsRPC(project: WorkspaceProject, options: MethodsOpti } const dir = join(project.tmpDir, transformMode) - const name = createHash('sha1').update(id).digest('hex') + const name = hash('sha1', id, 'hex') const tmp = join(dir, name) if (promises.has(tmp)) { await promises.get(tmp) diff --git a/packages/vitest/src/node/sequencers/BaseSequencer.ts b/packages/vitest/src/node/sequencers/BaseSequencer.ts index 8b3715757355..92636512f60e 100644 --- a/packages/vitest/src/node/sequencers/BaseSequencer.ts +++ b/packages/vitest/src/node/sequencers/BaseSequencer.ts @@ -1,6 +1,6 @@ -import { createHash } from 'node:crypto' import { relative, resolve } from 'pathe' import { slash } from 'vite-node/utils' +import { hash } from '../hash' import type { Vitest } from '../core' import type { WorkspaceSpec } from '../pool' import type { TestSequencer } from './types' @@ -25,7 +25,7 @@ export class BaseSequencer implements TestSequencer { const specPath = fullPath?.slice(config.root.length) return { spec, - hash: createHash('sha1').update(specPath).digest('hex'), + hash: hash('sha1', specPath, 'hex'), } }) .sort((a, b) => (a.hash < b.hash ? -1 : a.hash > b.hash ? 1 : 0))