数据结构
栈
栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。想象一下,我们平常在饭馆见到的一摞盘子就是现实世界常见的栈的例子,只能从最上面取盘子,盘子洗干净后,也只能放在最上面。栈被称为一种后入先出的数据结构。是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快。 使用条件:
只要数据的保存满足后入先出或先进后出的原理,都优先考虑使用栈
功能模块:主要模块有当前频道,歌词滚动,微信分享,切换频道,点赞,删除歌词,用户登录等功能。前端主要用了react去组件化各个模块,包括组件之间的数据流通。
当前歌曲,歌词滚动,微信分享这几个模块都需要知道当前歌曲的ID,我会将当前歌曲的一些必要信息存在一个state里面比如songID。切换歌曲模块主要触发songID更改的一个action,当歌曲被更改时,刚上面提到的内容接收到新的状态也会被更新。其中歌词滚动这一模块需要不断监听当前时间并做滚动处理,我的做法类似节流的方式,每隔0.3s就做一个更新,主要是从歌词一开始设定当前时间为0,豆瓣FM获取到的歌曲它是有带每句歌词对应的时间,我是将我们设定的时间不停累加,插在处于对应歌词之间的地方,如果0.3s之后还在当前两句歌词范围内就不滚动。
面试过程中提到歌词滚动的优化,可在每获取一句歌词时再读取一次下一句歌词的时间,再将settimeout的时间戳设为两句歌词的间隔时间。
点赞和删除歌曲会检测当前登录态,如果当前未登录,就会直接跳转到登录界面。如有已经登录,就会带上登录态去做一些请求
arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。例如,它没有 pop 方法。
|
|
面对浏览器,我们经常需要考虑一些性能的问题,除了让用户提高带宽,我们还需要通过缓存一些文件来提高用户体验。浏览器的缓存即是HTTP缓存,我们打开浏览器时总需要与远程服务器做交互,如果服务器允许的话,浏览器首次访问网站时会把成功的请求结果拦截下来并存储在内存或硬盘上,以便下次访问时快速获取。零零散散看过许多HTTP缓存的文章,所以这次想梳理一下脉络和自己动手模拟一下服务器看看我们可以如何指控浏览器缓存我们的文件。
学习过程中做了一个小demo模拟缓存过程,可以在https://github.com/abigaleypc/express-cache.git中查看源码。
续上一篇搭建音乐播放器桌面应用–前端篇后,这次讲述给界面提供数据包的后端扮演者–Node接入层。
Node在项目中扮演的是后端,但准确地说Node这并不是后端的角色,真正后端角色是豆瓣FM暴露的API。如下图
中间这一服务层即是本文的重点:对接口的挖取与封装。豆瓣FM官方并没对外提供API手册,尽管豆瓣提供了开放平台, 但与我们登录官方网站进行授权与操作走的并不是同一通道。