美文网首页Flutter for iOS
flutter -单纯的网络请求会造成卡顿吗

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

作者: 鸿伟x | 来源:发表于2022-11-30 20:46 被阅读0次

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

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

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

    对应的实现在:

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

    继续点 就到了这里:



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


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



    相关文章

      网友评论

        本文标题:flutter -单纯的网络请求会造成卡顿吗

        本文链接:https://www.haomeiwen.com/subject/qrnjfdtx.html