avoid_slow_async_io 린트 규칙: 느린 비동기 dart:io 메서드를 피합시다
avoid_slow_async_io 린트 규칙: 느린 비동기 dart:io 메서드를 피합시다
avoid_slow_async_io는 느린 비동기(asynchronous) dart:io 메서드 사용을 피해 달라고 알려주는 Dart 린트(lint) 규칙이에요.
본문
설명
다음과 같은 비동기 파일 I/O 메서드들은 그에 대응하는 동기(synchronous) 메서드보다 훨씬 느려요. 그래서 사용을 피하는 게 좋아요.
Directory.existsDirectory.statFile.lastModifiedFile.existsFile.statFileSystemEntity.isDirectoryFileSystemEntity.isFileFileSystemEntity.isLinkFileSystemEntity.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