楠Go随笔

对JS单线程模型理解

2018-01-09 17:47:44 admin 阅读 网站首页 > PHP > 开发心得

 Javascript是一种事件驱动型的单线程模型编程语言。有一次业务需求需要做搜索框搜索内容操作,因为内容比较多,我打算分步骤加载到浏览器端,以后可以做服务器端缓存或客户端缓存。来避免频繁请求数据库,提高查询速度,在实际开发中需要做到实时查询,但是数据量又有点大,一开始以为是竞相争夺资源主导权导致卡顿,后来转念一想,既然JS是单线程模型,那应该是同步模式下,前面的执行完才执行后面的操作,同一回调函数多次执行,那也应该会是先回调的函数先执行,然后依次执行其他回调函数。显然是回调函数未执行完毕又有新的回调函数需要执行从此导致等待阻塞。

不管是什么类型的编程语言,打印函数都是个好东西,用console.log 在事件函数处打印输出,可以对照程序的执行流程来分析问题,居然发现对input控件绑定的keyup事件会回调多次,等于按下一个键他就会执行多次而无须等待下一次按键......我从网上查找,有人说是绑定了多次keyup事件而导致按一次键盘回调多次,我们知道用JQ绑定事件,绑定一次事件,触发一次回调,多次绑定同一事件,一次触发自然就会有多次回调,但是我的keyup绑定事件自有在刷新页面时绑定一次.总而言之,就是因为未知原因导致按下一次键盘keyup事件就触发多次,导致耗时操作多次执行,等待阻塞.这个时候我就在业务层做修复,对输入框文本长度做控制,对输入框内容做比对,只有内容大于一定长度和内容发生改变才会执行回调,这样就避免了懵逼的情况。

搜索

关于楠Go

2015年毕业于吉林大学珠海学院,现今工作已两年有余,2014年在珠海一家游戏公司从事手机游戏开发,后离职转型为网络端PHP工程师,时至今日。熟练掌握PHP面向对象编程网络编程TP框架使用Discuz论坛插件开发。掌握前端框架Bootstrap的使用,掌握JS框架Jquery的使用。已开发多款网站,有着一定基础的开发经验,希望能在互联网领域再上一层楼!

了解更多: 开源中国 ThinkPHP


Powered by MetInfo 5.3.19 ©2008-2018 www.MetInfo.cn