avoid_slow_async_io 린트 규칙: 느린 비동기 dart:io 메서드를 피합시다

avoid_slow_async_io 린트 규칙: 느린 비동기 dart:io 메서드를 피합시다

avoid_slow_async_io느린 비동기(asynchronous) dart:io 메서드 사용을 피해 달라고 알려주는 Dart 린트(lint) 규칙이에요.

출처: avoid_slow_async_io

본문

설명

다음과 같은 비동기 파일 I/O 메서드들은 그에 대응하는 동기(synchronous) 메서드보다 훨씬 느려요. 그래서 사용을 피하는 게 좋아요.

  • Directory.exists
  • Directory.stat
  • File.lastModified
  • File.exists
  • File.stat
  • FileSystemEntity.isDirectory
  • FileSystemEntity.isFile
  • FileSystemEntity.isLink
  • FileSystemEntity.type

이런 메서드 대신, 이름에 Sync가 붙은 동기 버전(existsSync, statSync, lastModifiedSync 등)을 사용하는 게 성능상 유리해요.

나쁜 예시

import 'dart:io';

Future<Null> someFunction() async {
  var file = File('/path/to/my/file');
  var now = DateTime.now();
  if ((await file.lastModified()).isBefore(now)) print('before'); // LINT
}

file.lastModified()처럼 느린 비동기 버전을 await해서 쓰고 있어요. 여기서 린트 경고가 발생해요.

좋은 예시

import 'dart:io';

Future<Null> someFunction() async {
  var file = File('/path/to/my/file');
  var now = DateTime.now();
  if (file.lastModifiedSync().isBefore(now)) print('before'); // OK
}

동기 버전인 file.lastModifiedSync()를 사용해서 더 빠르게 처리했어요.

규칙 활성화하기

avoid_slow_async_io 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 추가해요:

linter:
  rules:
    - avoid_slow_async_io

YAML 맵(map) 문법을 쓴다면 linter > rules 아래에 avoid_slow_async_io: true를 넣으면 돼요:

linter:
  rules:
    avoid_slow_async_io: true

더 알아보기