FE-star / 2018.1

第二期课程仓库,请勿fork,建议watch或者star
43 stars 7 forks source link

第三节课问题收集 #10

Open loskael opened 6 years ago

JaffarL commented 6 years ago

请问这次的homework3具体是要怎么做?

我们跟后台约定一个所有请求的规范

这是要后端起一个服务器进行数据交互么? 前端发一个ajax请求,后端起一个node服务器返回数据?

并且我们希望每一种请求都可以通过 localStorage 做缓存

这个LocalStorage是前端的一种用以保存数据的变量嘛?

要求在 homework2 的 DB 基础上进行优化,并扩展出满足上面需求的库 完成所有测试用例

这个测试用例是homework2的测试用例?

miniflycn commented 6 years ago

可能很多同学不懂homework3到底在干啥?

参考一下这个仓库哈:db

我们要做的是基于tapable的升级版本。

weibinzhu commented 6 years ago

在这篇文章(https://cnodejs.org/topic/57d68794cb6f605d360105bf )里面,讲到process.nextTick()的时候举了两个例子,为什么当递归调用process.nextTick时,即使fs.readFile完成,其callback无机会执行,而将process.nextTick替换成setImmediate后就有机会执行那个callback呢?

loskael commented 6 years ago

@weibinzhu

你可以看看 hyj1991 的注释:

//进入I/O处理的函数(重点分析的部分),此处挂载timeout是为了防止在uv_io_poll中陷入阻塞无法执行timers;并且对于mode为
//UV_RUN_NOWAIT类型的uv_run执行,timeout为0可以保证其立即跳出uv__io_poll,达到了非阻塞调用的效果
uv__io_poll(loop, timeout);
//实现在loop-watcher.c文件中,一次将&loop->check_handles中的check_cb全部执行完毕(如果存在的话)
uv__run_check(loop);
//执行结束时的资源释放,loop->closing_handles指针指向NULL
uv__run_closing_handles(loop);

注意 uv__run_check 也就是 check 阶段,在一次循环中只会执行一次,也就是这个 一次将&loop->check_handles中的check_cb全部执行完毕(如果存在的话),所以递归调用 setImmediate 的时候只可能在下一次循环执行

建议你好好读一下这篇文章吧,特别是这两部分 https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#process-nexttick-vs-setimmediate

至于递归执行 process.nextTick() 阻塞的问题,看这句就够了:

process.nextTick() fires immediately on the same phase