flutter -单纯的网络请求会造成卡顿吗

问题1: flutter网络请求探究-单线程模型请求网络时为什么不会导致卡顿

我们查看Dio源码,发现使用Dio做网络请求,其实网络请求会交给HttpClient,由HttpClient的openUrl方法开启网络请求,而openUrl其实会调用到一个external方法,代码如下

  //flutter/bin/cache/dart-sdk/lib/io/socket.dart
  external static Future> _startConnect(host, int port,
      {sourceAddress, int sourcePort = 0});

对应的实现在:

//flutter/bin/cache/dart-sdk/lib/_internal/vm/bin/socket_patch.dart
  @patch
  static Future> _startConnect(dynamic host, int port,
      {dynamic sourceAddress, int sourcePort = 0}) {
    return RawSocket.startConnect(host, port,
            sourceAddress: sourceAddress, sourcePort: sourcePort)
        .then((rawTask) {
      Future socket =
          rawTask.socket.then((rawSocket) => new _Socket(rawSocket));
      return new ConnectionTask._(socket, rawTask._onCancel);
    });
  }

继续点 就到了这里:



nativeCreateUnixDomainConnect也是一个external方法,但是没有找到它的实现,


看注释的意思是_NativeSocket封装了一个操作系统的socket,os是操作系统
或者说调用socket.nativeCreateUnixDomainConnect方法的时候会到调用操作系统的socket,也就是说网络请求其实是操作系统完成的,这就是为什么flutter应用是单线程模型的应用,但是在root isolate里做网络请求却不会卡 UI 的原因,猜测网络请求应该不是dart层完成的,是操作系统完成的;



你可能感兴趣的:(flutter -单纯的网络请求会造成卡顿吗)