Skip to content

Commit ea8ddee

Browse files
kevmoofelangel
andauthored
perf: optimize Request.read (#1410)
Co-authored-by: Felix Angelov <felangelov@gmail.com>
1 parent 00c371e commit ea8ddee

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

packages/dart_frog/lib/src/request.dart

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class Request {
110110

111111
Request._(this._request);
112112

113-
shelf.Request _request;
113+
final shelf.Request _request;
114114

115115
/// Connection information for the associated HTTP request.
116116
HttpConnectionInfo get connectionInfo {
@@ -146,16 +146,12 @@ class Request {
146146

147147
/// Returns a [Future] containing the body as a [String].
148148
Future<String> body() async {
149-
const requestBodyKey = 'dart_frog.request.body';
150-
final bodyFromContext =
151-
_request.context[requestBodyKey] as Completer<String>?;
152-
if (bodyFromContext != null) return bodyFromContext.future;
149+
final bodyFromCache = _requestBodyCache[_request];
150+
if (bodyFromCache != null) return bodyFromCache;
153151

154152
final completer = Completer<String>();
155153
try {
156-
_request = _request.change(
157-
context: {..._request.context, requestBodyKey: completer},
158-
);
154+
_requestBodyCache[_request] = completer.future;
159155
completer.complete(await _request.readAsString());
160156
} catch (error, stackTrace) {
161157
completer.completeError(error, stackTrace);
@@ -184,3 +180,5 @@ class Request {
184180
return Request._(_request.change(headers: headers, path: path, body: body));
185181
}
186182
}
183+
184+
final _requestBodyCache = Expando<Future<String>>('dart_frog.request.body');

0 commit comments

Comments
 (0)