成人网站在推动网络发展中所起的作用无可辩驳。 从突破浏览器视频能力的限制,到利用网络插座推送广告(不被广告拦截者拦截),必须不断探索各种聪明的方法,使之处于网络技术创新的最前沿。
最近,我有幸采访了大型成人网站Pornhub的某网站开发工程师,了解到了相关的开发技术、网站API的改进,以及作为成人网站开发工程师是怎样的体验。
注意:因为成人网站这个行业竞争相当激烈,我有几个问题。 他们不能回答我。 这个我理解。
成人网站需要显示大量的图像内容。 开发过程中是否使用了大量的图像和视频占位符? 开发中的内容体验和最终产品差别大吗?
其实,开发这个网站的时候,我们没有使用占位符! 毕竟,代码和功能才是最重要的东西,关于接口等,到了这个时候我就很清楚了。 虽然一开始有点困难,但是很快就习惯了。
在开发过程中,您是如何模拟实时视频流和第三方广告脚本的? 那些都是很重要的资源。
播放器分为两个组件,基本组件实现了用于触发事件的核心功能。 开发是单独进行的,在进行集成时必须使用第三方脚本和广告。 这样可以尽早发现问题。 对于一些特殊情况,与广告主合作,手动引发随机事件。
一般页面至少有一个视频、几个GIF广告、几个实时预览和其他视频的缩略图。 你是怎么测量页面性能的? 并且,如何尽量提高页面的性能呢?
我们使用了一些评价系统。
播放器把视频播放的性能和用户的播放情况发给我们;
我们使用了第三方的RUM系统;
我们可以使用WebpageTest知道某个时间段发生了什么。
假设播放器是前端最重要和最复杂的功能。 您如何维持播放器的性能、功能和稳定性,包括在视频之前插入广告、标记视频的重要部分和改变播放速度?
有一支专门负责开发选手的队伍。 他们的首要任务是持续监控玩家的性能。 我们使用了所有可用的工具,包括浏览器性能工具、web页面测试和性能指标。 每次发布更新时,为了保证稳定性和质量,都要进行严格的QA。
视频团队有多少专职开发人员? 有多少前端开发人员?
从产品整体的规模来看,我们团队的规模只能说是中等。
在从事成人网站开发期间,你看到了前端领域取得了什么样的发展? 什么样的新网络API能给你带来很大的帮助?
我们看到前端技术在许多方面都取得了进步。
支持多种分辨率和屏幕大小,从使用纯CSS到使用LESS和Mixin,再到使用灵活的网格系统和图像标签。
jQuery和jQueryUI渐渐从我们的眼中消失,我们回到了更面向对象的纯JavaScript编程中。 一些框架在某些场景中起着非常有趣的作用;
我们非常喜欢新的IntersectionObserver API,用它加载图像非常有效率;
我们还使用画中画API,将视频呈现在页面上,但至今仍在获取用户对这个想法的反馈。
展望未来,你有想要改变、改善的Web API吗? 还是会出现新的网络API?
这些API希望能够进行Beacon、WebRTC、服务工作器、Fetch等的变更或改善。
Beacon:IOs有几个问题,对pageHide事件的支持不太好;
Fetch :没有下载进度,也没有提供拦截请求的方法
WebRTC :在实时情况下,分辨率不够会受到限制
呼叫serviceworker:navigator.service worker.register不会被service worker的Fetch事件处理器拦截。
WebVR在这几年有所改善。 目前,它的作用有多大? 成人网站将投入多少精力支持VR内容? Pornhub的WebVR中有触觉技术吗?
研究将WebXR应用于沉浸式空间场景的方法。 作为最大的内容分发平台,用户必须能够以自己的方式体验网站内容。 但是,我们正在探索在使用这些新媒体时,内容和平台应该变成什么样。
我们是支持VR、计算机视觉、虚拟播音员的主要平台,将继续推动新技术的发展。
虽然每个页面都有不同类型的媒体和内容,但是对于桌面版和移动版来说,最需要考虑的是什么?
我们主要考虑操作系统和浏览器功能方面的限制。 例如,iOS和安卓在访问权限和功能方面非常不同。
某些iOS设备无法在全屏模式下使用自定义播放器,因此必须强制使用本机快速播放程序。 安卓赋予了我们完全的控制权限,全屏时可以使用我们的播放器。
另一个例子是HLS视频流,IE和Edge对HLS视频流的质量非常挑剔,因此需要控制视频的质量。 否则,播放过程中会断断续续或出现重影。
目前,Pornhub支持的浏览器的最低版本是哪个? 你现在也支持IE吗?
我们长期支持IE
了,但最近不支持 IE 11 之前的版本。另外,我们也停止支持 Flash 播发器。我们现在主要支持 Chrome、Firefox 和 Safari。可以分享一下 Pornhub 的技术栈吗?从服务器端到前端,你们使用了哪些库?
基本上,我们使用了这些东西:
Nginx;
PHP;
MySQL;
Memcached/Redis。
其他技术还包括 Varnish、ElasticSearch、NodeJS、Go 语言、Vertica。
前端方面,我们主要使用了纯 JavaScript。我们在逐步淘汰 jQuery,并开始使用框架,比如 Vue.js。
在外行看来,成人网站的网页上一般充斥着各种视频缩略图、视频、直播和广告。从开发者的角度来看,是什么东西让一个成人网站变得与众不同?
我们努力让每一个品牌都具备一定程度的独特性,不同的内容、界面体验和功能,还使用了很多不同的算法。
在面试 Pornhub 时,你是怎么想的?你有犹豫过吗?如果有,又是怎么消除这种情绪的?
我没有感到有什么不妥,毕竟这个挑战对我来说充满了吸引力。一想到有数百万人会用到我开发的东西,我就感到很兴奋。这个想法很快就得到了验证,当我开发的功能第一次上线时,我感到很自豪,我还叫我的朋友们也去看看!成人网站永远都不会消亡,它为我们提供了稳定的工作来源。
与开发一般的网站相比,开发成人网站可能会有所不同。nqddy告诉你的朋友、家人和熟人自己在开发成人网站,你会觉得这是一种耻辱吗?你会犹豫告诉他们这些吗?
我为自己开发的东西感到自豪,我身边的人都知道,也很喜欢它们。这也成了我们的茶余饭后的谈资,非常有意思。
你也在其他地方开发过其他网站,在 Pornhub 的工作氛围有什么不同吗?
这里的氛围非常轻松友好,我不觉得跟在其他地方有什么不同。
作为前端开发人员,你需要与哪些团队密切接触?你们平常常用哪些交流方式?
我们需要与后端开发人员、QA 和产品经理打交道。大部分时间我们会跑到各自的工位上讨论问题,其次是使用聊天工具(Microsoft Teams),然后是电子邮件。
最后,作为一名在成人网站工作的开发工程师,你还有什么想要分享的吗?
我非常高兴能够参与开发这个有如此大规模用户的产品。我们身处技术发展的最前沿,这让一切都变得有趣且颇具挑战性。
后记
这个采访很有启发性。我很惊讶他们在开发时居然没有使用图像。Pornhub 走在 Web 技术的最前沿——WebXR、WebRTC 和 Intersection Observer API。我也很高兴看到他们开始逐步淘汰 jQuery,因为现在的 Web API 很给力。
我很想从他那里挖到更过有关技术和性能的细节,我敢肯定他们的源代码里有很多值得一学的东西。换了是你,你会想问哪些问题?