`
youxinrencwx
  • 浏览: 74193 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Facebook优化分享后记

 
阅读更多

周六,参加完SD大会,Facebook的蒋博士被邀请到杭州的淘宝做一次技术分享。由于没有参加北京的velocity大会,上海的SD大会蒋博士的内容又由于时间问题被压缩的变形,所以周六无论如何都去听一次。原定10点开始的会议,9点50分诺大的淘宝培训室就没有座位了,后续不断地还有同学涌入,当然我看了一下,集团的每个子公司的人都有,各种岗位的人都有,其实今天的优化分享主要还是侧重于前端,而那么多人来听,我觉得和我来的出发点一样:“技术不分领域和语言,设计触类旁通”。
这里只是记录自己的一些学习理解和体会,其中的思考一些是自己看的清楚的,一些还是比较迷惑的,因为毕竟不是做前端的,欢迎讨论,具体的内容参看PPT:http://velocity.oreilly.com.cn/ppts/ChanghaoJiang.pdf
网站的请求其实可以分割为多个步骤:网络传输消耗,服务端业务处理消耗,页面渲染消耗。(如果更细致,其实可以将网络传输消耗细分成DNS解析,连接建立及网络传输消耗)Facebook从局部和整体的角度考虑优化,提出了三个优化方式:Quickling,PageCache,BigPipe。每个优化都有适用的场景,所以每个技术优化点前面我先写一下场景。
Quickling优化场景:用户页面切换频繁。优化方式:通过ajax方式模拟页面内容切换。优点:降低传统页面切换对于资源载入和卸载在前面提到优化场景的损失,服务端对于可重用的内容不必再做重复渲染。缺点:页面复杂度增加,包括模拟传统页面的前进后退,爬虫对页面的信息获取,缓存资源必须在一定时间内批量释放。
思考:浏览器载入和卸载页面的消耗究竟在什么地方?编程复杂度的提高(模拟浏览器页面行为)和收益(特定场景,复用性)。因此这点对于网站来说最多也是部分页面的适用或者部分场景的适用,同时带来的维护成本有点高。当前很多场景开始使用Comet的模式(如果用ajax模式,那么就和Quickling一样),通常情况下,Comet用于单个页面的增量数据推送,不存在页面切换的那些复杂模拟问题。

PageCache优化场景:用户行为在多个热点页面中反复切换。优化方式:基于Quickling的流程,在客户端做数据缓存。优点:热点页面渲染快,服务端压力下降。缺点:数据即时性问题。(当前可以模拟单客户自己的操作行为,保证显示及时性,但是如果服务端状态变更,消息无法通知,页面数据较老)
思考:其实就是将可以缓存的数据尽量缓存,提高页面渲染速度,过去切割页面用ajax局部渲染,现在整体都用ajax,本来的局部渲染需要通过内部实现,但缓存最大的问题就是状态及时性,对于用户数据显示要求不高的可以用这种方式。(我的淘宝页面不可以用,及时性要求太强,虽然这是热点页面)。总体上来说还是多页面的Comet实现中缓存的一部分。
延伸:服务端管道化模式中,可以考虑部分管道结果缓存。简单来说原来一个请求一个事务,现在被切割成多个小任务通过事件驱动的方式或者简单的管道串联的方式执行后,可以将某一个环节的中间结果缓存,那么可以提高部分子任务的执行效率,在原来一条道走到黑的情况下做起来很复杂也很难看。

BigPipe优化场景:整体页面可以被切割(无强依赖),每个切割块之间可以并行被执行。优化方式:页面切割为多个Pagelet,交由Ajax框架调度并行或者串行执行请求(当前主要使用串行化,通过局部增量显示,提升用户体验)。优点:用户体验增强。

在开放平台服务请求中,我们的Pipe支持演进和BigPipe很类似,如下四图:

常规的web请求,容器负责业务线程的管理,业务请求直接在一个Service方法中完成。

还是常规的Web容器,但是将一个服务处理方法切割成多个Pipe,包含三个部分,准备,执行,释放,传统任务被分割,不同子任务资源生命周期缩短,资源利用率提升,如果采用Lazy解析数据流,则可以更好的提升上行带宽的利用率,另一方面可以缓存部分pipe的中间结果,提升部分pipe的处理性能。

采用支持异步化的容器,将业务线程池和容器线程池分开。容器线程池线程依然可以执行部分管道(消耗较低的管道),返回部分处理结果,业务线程池可以根据业务规则来区分对待不同的服务请求(在线程资源有限情况下优先保证重要服务被执行,Bigpipe也提到对于不同的pagelet的优先权重不同可以先后处理),最后返回剩余全部结果。

支持批量API请求和QL服务请求(前者是并行服务组合,后者是串行服务组合),容器执行公用的管道(消耗较低的管道),如果是QL call,则容器线程池顺序执行多个API call,最后返回结果。如果是batch call,则启动多个业务线程工作者,并行执行任务,随机返回部分结果。好处就是减少连接损耗,合并多个请求共同处理的消耗。

其实很多优化理念看似简单,但是作起来很多细节特别重要,就好比Quickling如何用ajax模拟前进后退历史,cache如何可选择的部分监听数据更新,bigpipe如何对不同客户端请求或者爬虫做支持。当然听完分享更需要注意的是自己的场景如何借鉴。

分享到:
评论

相关推荐

    vue使用facebook twitter分享示例

    facebook 分享文档 twitter 分享文档 vue 使用 facebook 使用分享 找到index.html 添加一下代码 <!-- facebook 分享 --> <div id=fb-root></div> [removed](function (d, s, id) { var js, fjs = d....

    Facebook登录 分享Android项目库

    在Android开发中,集成社交平台如Facebook的功能是一个常见的需求,这包括用户通过Facebook账户进行登录以及分享内容到用户的Facebook时间线。本项目库提供了一种简单有效的方式,帮助开发者快速实现这些功能。以下...

    Facebook图文分享

    在智能手机和平板电脑上,Facebook应用程序通过优化的接口和离线缓存策略,让用户在任何网络环境下都能轻松分享图片。 总之,Facebook的图文分享功能是其服务的核心部分,结合了HTTP协议、本地文件操作、图像处理、...

    cocos creator中facebook分享demo

    cocos creator接入facebook SDK,利用facebook的接口FBInstant,在facebook的环境下执行代码,实现facebook分享功能及其他

    Facebook登录分享广告接入

    Facebook的登录分享广告接入是移动应用开发者为了提升用户体验和增加用户参与度的一种常见做法。...通过合理的集成和优化,开发者可以充分利用Facebook的社交网络优势,为自己的应用带来更多的活跃用户和商业价值。

    facebook 授权分享

    在iOS开发中,Facebook授权分享是一项重要的功能,它允许用户通过他们的Facebook账户在应用程序内分享内容,同时提供了一种方式来获取用户的Facebook信息以便个性化体验。Objective-C是苹果平台的主要编程语言之一,...

    facebook分享

    在IT行业中,Facebook分享是一项常见的功能,特别是在移动应用和网页开发中。Facebook分享允许用户将内容,如文本、图片或链接,快速便捷地发布到他们的Facebook时间线,从而扩大信息的传播范围。在这个"facebook...

    Facebook登录分享发布信息程序

    Facebook登录分享发布信息程序是基于C#编程语言和Facebook SDK(FaceBook.dll)构建的应用,旨在为用户提供一种简便的方式,通过Webview组件实现用户在Windows桌面应用中的Facebook账户登录,并授权应用发布信息到...

    JS分享代码 全功能 支持facebook twitter等

    在本文中,我们将深入探讨如何使用JS实现全功能的社交媒体分享功能,包括支持Facebook和Twitter等平台。 首先,为了在网页上实现分享功能,我们需要了解各个社交平台提供的分享API。例如,Facebook提供了"Like"和...

    Egret Facebook分享.txt

    Egret 白鹭Facebook分享demo,多种分享方式,通过图文方式分享给facebook好友

    Android分享到Facebook的sdk和demo源码

    在Android平台上,与社交网络集成是提升用户体验的重要方式之一,Facebook作为全球领先的社交平台,提供了SDK使得开发者可以方便地在Android应用中实现Facebook分享功能。本文将深入解析"Android分享到Facebook的sdk...

    facebook分享源码

    在Android应用开发中,集成Facebook分享功能是一项常见的需求,它可以让用户方便地将应用内的内容发布到自己的Facebook社交网络上,...同时,Facebook的SDK会定期更新,建议及时升级到最新版本以获取最新的特性和优化。

    Facebook 出品的 apk 包优化工具 redex.zip

    **Facebook的Redex:APK包优化利器** Facebook的Redex是一个开源的Android应用程序(APK)字节码优化工具,旨在提升应用的性能、大小和加载速度。它通过一系列的优化步骤,对APK中的DEX文件进行处理,从而达到减少...

    Facebook 分享 url

    Facebook分享 URL demo。通过这个 demo 可以快速学习Facebook的分享

    Facebook Web优化策略

    ### Facebook Web优化策略 在数字化时代,随着互联网技术的飞速发展与用户需求的日益增长,网站性能成为了衡量用户体验和企业竞争力的重要指标之一。作为全球知名的社交网络平台,Facebook不仅面临着海量用户数据...

    Facebook-Android-sdk-4.8.2

    这个版本的SDK包含了实现Facebook登录、分享、邀请、广告以及分析等功能所需的库和资源。通过使用Facebook Android SDK,开发者可以轻松地与Facebook平台进行交互,为用户提供更加丰富的社交体验。 首先,SDK中的...

    Facebook大数据实时分析案例分享(Uri).zip

    在这个案例分享中,我们将深入探讨Facebook如何利用大数据实时分析技术来优化用户体验、提高广告效果以及进行精准的内容推荐。 一、大数据基础设施 1. 数据湖:Facebook构建了自己的数据湖,将来自各个业务模块的...

    Facebook广告投放以及优化PPT课件.pptx

    Facebook广告投放以及优化PPT课件 Facebook广告投放是一个复杂的过程,需要了解Facebook的Timeline信息组成、广告推广目标、Campaign结构、Targeting、广告创意、出价方式、操作及优化等多个方面。下面是对Facebook...

Global site tag (gtag.js) - Google Analytics