收藏
回答

为什么skyline环境算单线程?

旧架构:AppService + WebView

新架构:AppService + Skyline

难道渲染线程不是真线程

回答关注问题邀请回答
收藏

2 个回答

  • ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
    ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
    2023-08-14

    如果楼主有Android或者iOS的原生开发经验,那么旧框架可以理解为

    渲染层就是在webview控件里,而AppService则运行在独立的JavascriptCore里,然后相互之间透过原生代码(JSBridge)来进行数据交互,数据传递到webview里后,再通过webview里面的JavascriptCore运算后,构成dom树再给网页引擎构建渲染画面。


    而skyline,你可以理解为独立对webview内核改造,再也不需要AppService的数据交互通过JSBridge来交互,直接通过线程间signal或者共享内存来交互数据(猜测,真要追求高效的话应该也会这么做,根据这一点也能猜测到),而且独立的线程来处理JS代码的内容,独立的线程来处理渲染,独立的线程来处理像内容的显示,所以处理更加高效。所以的单线程环境是指单独的线程来处理你的业务代码。


    2023-08-14
    有用 2
    回复 3
    • 清蒸鱼
      清蒸鱼
      2023-08-14
      skyline环境依旧要和AppService线程间通信,AppService要处理业务的,那这还是两个线程呀,只是通信方式变了
      2023-08-14
      回复
    • ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
      ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
      2023-08-14
      纯粹线程间通信,跟透过JSBrige通信性能差别可大了。中间封装都不知道堆了多少了方法栈,简单来讲每进一个方法参数等等都要进栈出栈一次,可想性能消耗之大。而线程间通过共享内存和signal交互数据的话,就是内存地址的传递读取。skyline按官网给的图示https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/introduction.html,是3个线程。旧的JavascriptCore+webview,实质上一部分dom构建,渲染都是在webview内完成的。
      2023-08-14
      回复
    • ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
      ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
      2023-08-14回复؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
      你如果从单纯代码的角度来看,确实能够理解为通信方式变了,但是从架构的角度来看,是AppService跟渲染管线之间更近了,可以理解为传递数据经过的关卡变少了。


      变的还有布局渲染和像素的生成,这两个也分在两个线程处理了。而且三个独立的线程,阻塞的情况少了,CPU的运行效率也更高了。渲染跟像素呈现之间可以各自在自己的CPU时间内处理,也就是不再等像素都拷贝进GPU再渲染下一帧,而是可以拷贝像素进GPU的其余空闲的CPU时间里顺便渲染下一帧,所以呈现也更加高效了。
      2023-08-14
      回复
  • CRMEB
    CRMEB
    2023-08-14

    Skyline环境被称为单线程环境,这是因为它使用了JavaScript的单线程执行模型。

    2023-08-14
    有用
    回复 1
    • 清蒸鱼
      清蒸鱼
      2023-08-14
      执行模型就这一个吧
      2023-08-14
      回复
登录 后发表内容