当前位置:首页 > 技术分析 > 正文内容

看似不起眼的一个习惯,竟能直接让你的游戏卡死

ruisui882个月前 (04-07)技术分析34

13. 阻塞与非阻塞

13. 阻塞与非阻塞

首先,我们这边所说的阻塞非阻塞指的是加载文件。在很多的api中,我们可以看到一个接口经常有2种形态:

readFile

readFileSync

或者unity里面加载资源的接口:

Resource.Load

Resource.LoadSync

我们用js写文件的时候,很容易建立一个认知。当我们想对文件进行有序的操作的时候,我们用阻塞的方式。如果我们不需要任何的时序或者只使用到很少的时序,那么我们就可以用非阻塞的形式。

在游戏里面,经常会被建议不要用阻塞的方式。因为阻塞行为一旦发生,它是可能卡住整个界面的,使得游戏无法做出任何的响应。那我们是不是就不用阻塞了?我们先来看一看阻塞的优点。阻塞相对非阻塞而言,它的速度是比较快的。它可以在一些场景中进行应用:

在游戏的启动加载过程中,为了缩短玩家的等待时间。我们大量使用阻塞,只在单个文件加载后更新一下界面,接着就继续阻塞加载了。

在大部分游戏引擎里面,加载界面资源我们常用的是非阻塞。但是当我们加载界面资源后,如果实例化这个对象一定是耗时的或者说卡的。那么这个时候我们一般会先把界面的外框加载出来,再加载里面的内容,这个时候我们就可以换用阻塞了。当存在某些逻辑是不得不卡住的或者说耗时严重的,而且也无法通过线程或者其他方式优化的时候,我们先阻塞加载静态的背景,再进行一系列耗时的操作,包含阻塞加载资源,对象的实例化等。

这2个案例告诉了我们它的应用场景,在效率至上的地方,以及在耗时已经超出的地方。因为如果一定要卡(耗时),那么就在一瞬间铺个静态背景卡个够。这边还可以举个例子就是场景切换后,需要加载大量的玩家对象。这些对象在加载的时候因为数量,也因为其他不确定的因素,可能是会导致CPU的高峰。那么我们就在切换场景的加载页面出现之前,先同步把它们都加载完。这样,进入场景后就不会再遇到它们导致的卡顿。

对于非阻塞,通常伴随着事件完成的回调处理。比如说加载一个文件,我们会在加载完成后回调到我们注册的函数。对于代码而言,阻塞的代码写起来是比较舒服的,不用各种回调嵌套,因为回调一旦多了,会引发“回调地域”的灾难,这在js里面有专门的介绍。我们可以通过协程来解决,模拟一个同步的写法。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3337.html

标签: readfilesync
分享给朋友:

“看似不起眼的一个习惯,竟能直接让你的游戏卡死” 的相关文章

vue中组件之间的通信方式

** 1.1 父子组件**a. 父向子传数据: 第1种: 父通过属性传值,子组件通过props接收数据(注:props传过来的数据是单向的,不可以进行修改)第2种:子组件可以通过$parent来获取父组件里的数据和调用父组件的方法(注:数据是双向的,还要注意如用了UI组件并且在该UI组件里重新定义一...

K8s里我的容器到底用了多少内存?

作者:frostchen导语 Linux下开发者习惯在物理机或者虚拟机环境下使用top和free等命令查看机器和进程的内存使用量,近年来越来越多的应用服务完成了微服务容器化改造,过去查看、监控和定位内存使用量的方法似乎时常不太奏效。如果你的应用程序刚刚迁移到K8s中,经常被诸如以下问题所困扰:容器的...

壹啦罐罐 Android 手机里的 Xposed 都装了啥

这是少数派推出的系列专题,叫做「我的手机里都装了啥」。这个系列将邀请到不同的玩家,从他们各自的角度介绍手机中最爱的或是日常使用最频繁的 App。文章将以「每周一篇」的频率更新,内容范围会包括 iOS、Android 在内的各种平台和 App。本期继续歪楼,由少数派撰稿作者@壹啦罐罐介绍他正在使用的...

vue v-html动态生成的html怎么加样式/事件

1、动态生成的html,样式不生效//html 布局 <view v-html="html"> {{html}} </view> //动态生成的元素 <view class="btngo" @tap="handleLink...

JavaScript数组操作:掌握常用方法,提升开发效率

JavaScript数组操作:从增删改查到高级应用本文深入解析JavaScript中常用的数组方法,包括push、unshift、pop、shift、map、filter、reverse、at 和 slice。通过详细的例子和应用场景,帮助开发者快速掌握这些方法,提升代码效率和可读性。开篇点题作为J...

VUE-router

七.Vue-router1、什么是vue-routervue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统页面切换是用超链接a标签进行切换。但vue里是用路由,因为我们用Vue做的都是单页应用,就相当于只有一个主的i...