有谁知道使用哪种语言或技术来开发Spotify桌面应用程序?它稳定,美观,轻便.
从这里:http
://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app日期:2014-09-09
5年Spotify员工Andreas Blixt:
我们所有客户的核心都是C++,但是自从Rasmus的帖子得到了浓缩以来,这个核心功能被分解为模块.随着Spotify在越来越多的平台上可用以及获得更丰富的功能集,我们需要确保"核心"不会变成"一点点".这意味着将某些功能(例如播放控制)分解到各自的模块中.这些模块仍然是C++,但是足够自包含,理论上它们的逻辑可以用其他语言实现.我们将接口层称为这些模块"Cosmos",它的工作方式与HTTP不同.Cosmos允许客户端的任何部分使用任意路径和有效负载与模块通信,从而允许更灵活的架构.一些明显的好处是版本化接口(例如:GET sp:// player/v1/main返回播放器状态)和JSON用于传递数据.这对于我们的桌面客户端的另一个更改很重要.
现在很多桌面用户界面实际上都在使用Chromium Embedded Framework(CEF),这基本上意味着我们的视图由JavaScript,HTML和CSS提供支持.为了让我们所有的功能团队能够处理他们的功能而不必担心破坏别人的视图,每个视图都在他们自己的"浏览器"中进行沙盒化(我猜你可以将视图视为Chrome中的标签,除了我们显示更多而不是一次一个).这带来了一个限制:在视图之间共享数据变得更加困难.这就是Cosmos的用武之地,它真正简化了核心(C++)和JavaScript之间的通信:JS客户端可以发出任意请求,如果有绑定,则会处理并响应该请求.一个例子是"消息"端点,它允许任何视图将JSON数据推送到正在侦听的任何其他视图(类似于HTML5中的window.postMessage,除了这个也可以与C++模块接口).这也是客户端中所有播放按钮知道曲目是否正在播放,或者是否可以离线播放(另一个Cosmos模块),或者是否已将歌曲保存到音乐中的方式.
我们的技术堆栈的另一个重要变化是我们将一些逻辑进一步"回"到视图聚合服务中.因此,我们之前在客户端执行几乎所有逻辑操作,只使用后端作为数据存储,我们现在在数据存储和客户端之间的逻辑层中做更多的工作,暴露端点与Cosmos非常相似(事实上,您可以像调用Cosmos模块一样调用后端,因此在层之间移动并不麻烦.其原因有两方面:一,它可以让我们更快地扩展到更多平台,因为实现的客户端逻辑较少,两个,它确实有助于我们保持客户端行为更加一致和最新,因为客户端是更"愚蠢".为了减轻可能由此产生的任何减速,我们确保所有数据都有缓存规则,以便客户端仍然可以在本地保存数据,它不像过去那样负责业务逻辑.
以下是他们使用的第三方组件列表(当然是在C++之上):
促进
外籍人士
FastDelegate
giflib
的libjpeg
libogg
libvorbis
Mersenne Twister
zlib的
NSIS(仅限Windows)
Windows模板库(仅限Windows)
低吼(仅限Max OS X)
MATrackingArea(仅适用于Mac OS X)
根据Spotify设计师的说法:
http://twitter.com/#!/tobiasahlin/status/96483609799692288
"其中一些是用C++编写的,其中一些是用于称为Spider的HTML-ish标记语言""它仅用于在Spotify中使用"
Spotify现在使用Chromium Embedded Framework(CEF)在桌面应用程序中显示由HTML/CSS/JavaScript组成的Web界面.