Over the past several months we've tested a number of different designs of our home page to make navigation easier and to surface the most interesting content to users. Today we're starting to roll out the latest design to users. Learn all about the product changes on the Facebook blog.
Here are the changes that you will want to pay close attention to as a developer:
Dashboards
Along with the changes to the home page design, we're introducing new features to make it easier for users to discover and re-engage with your applications via the Games and Applications Dashboards. We announced these APIs a few weeks ago, and have been updating our public roadmap with details over the past several months. Now users can navigate to their applications via the dashboards, see news about their experiences with the applications, and discover new applications based on what their friends are using. Thanks to your feedback we've made a number of improvements to how these APIs work over the past couple of weeks. Be sure to check the documentation for the latest information.
Also, to help protect user privacy, if your application contains sensitive content (for example, it's related to a health issue) and you would rather not have your application show up in the "Friends' Recent Activity" or "Friends' Applications" sections of the dashboards, you can choose to hide it via a setting on the Advanced tab of the Developer application. In addition, we are providing users with the ability to control if they show up in the dashboards, and who they share their application activity with, through the Applications Settings page. We are also working on a way for users to set more granular controls for specific applications, so that they can easily filter how activity for these applications is shown in the dashboards.
New Navigation
To make it easier for users to find applications, we're removing the application menu at the bottom of the screen, and moving the bookmarks to the left-hand side of the home page. The dashboards and three bookmarks will show up on the home page, and the remaining bookmarked applications will appear beneath a "more" link. Learn more about how the new bookmarking behavior on the roadmap. Users aren't able to reorder their bookmarks yet, but we're building the feature right now.
Counters
You can set a counter for your users (which will appear if they have bookmarked your application), indicating it's time to come back to the application and take an action. Counters serve as an additional communication channel to reach users and prompt them to re-engage with your application. Learn all about these changes and how to integrate with the new dashboards via the Dashboard API. Make sure you've included the Add Bookmark button to your application to make it easy for your users to bookmark your application.
Notifications
For now, application notifications will show up with all other notifications in the new top menu. As we have stated on our public roadmap, we will stop delivering application notifications on March 1, 2010. We recommend you begin switching your integrations now.
To send information directly to your users (like application-to-user notifications today), we recommend you add news on the dashboard ("Three friends donated to your cause -- come back and recruit some more!"). You can also send email messages to users, if they have opted to receive emails from you. We recommend you use email for content like receipts for transactions, newsletters, or other richer content.
To indicate a user's friend has taken an action in an application that the user might care about (for example, the friend tagged the user in a piece of content), set the counter. When a user clicks the bookmark to land on your application, clearly indicate why the user is there (for example, to take a turn in a game.)
Requests
For now, requests will continue to appear in the upper right hand side of the home page, along with other Facebook requests. As we have said on our public roadmap, we will deprecate requests later this year, after we release our improved Share dialogs.
Keep reading the developer roadmap to stay informed. As always, please leave your feedback in our Developer Forum.
Justin, a software engineer on the Platform team, is excited to find more great applications to share with his friends.
Over the past year, we've focused on providing an environment for developers that rewards high-quality, third-party advertising and monetization practices. Through this process, it's become clear that while you are working hard to monetize your applications in a safe and reliable manner, it isn't easy to ensure that ad and offer providers are following the same terms and guidelines that you adhere to.
To meet this need, we are introducing a set of terms for all ad and offer providers and related services that operate on Facebook Platform. The terms are similar to the terms of service to which all users, developers, and advertisers agree, and are an addition to the existing Facebook Advertising Guidelines. Just as everyone must agree to existing terms of service, we are requiring that all ad providers agree to these new terms. If you are an ad or offer network, please visit this form to submit your information and agree to the terms. We will continue to enforce against anyone who violates any of our terms.
Our intention is to facilitate an ecosystem that upholds the user experience and continues to set the foundation for a platform that delivers substantial long-term opportunities for building or expanding a business. Note that Facebook does not approve or vet the content or services of any ad provider. Developers remain accountable for all content appearing within applications including all advertising content. However, this does ensure that we maintain an open line of communication directly with your monetization providers.
We will continue to provide more resources to developers and ad and offer networks to help everyone better understand our advertising principles.
We welcome your feedback. Please direct any comments or questions to the Developer Forum. If you are an ad or offer network or related service, and wish to contact us directly, please direct inquiries to our Web form.
Nick, a member of the Facebook Advertising Team, is looking forward to seeing new innovative ad products on Platform.
One of the key values at Facebook is to move fast. For the past six years, we have been able to accomplish a lot thanks to rapid pace of development that PHP offers. As a programming language, PHP is simple. Simple to learn, simple to write, simple to read, and simple to debug. We are able to get new engineers ramped up at Facebook a lot faster with PHP than with other languages, which allows us to innovate faster.

Today I'm excited to share the project a small team of amazing people and I have been working on for the past two years; HipHop for PHP. With HipHop we've reduced the CPU usage on our Web servers on average by about fifty percent, depending on the page. Less CPU means fewer servers, which means less overhead. This project has had a tremendous impact on Facebook. We feel the Web at large can benefit from HipHop, so we are releasing it as open source this evening in hope that it brings a new focus toward scaling large complex websites with PHP. While HipHop has shown us incredible results, it's certainly not complete and you should be comfortable with beta software before trying it out.
HipHop for PHP isn't technically a compiler itself. Rather it is a source code transformer. HipHop programmatically transforms your PHP source code into highly optimized C++ and then uses g++ to compile it. HipHop executes the source code in a semantically equivalent manner and sacrifices some rarely used features — such as eval() — in exchange for improved performance. HipHop includes a code transformer, a reimplementation of PHP's runtime system, and a rewrite of many common PHP Extensions to take advantage of these performance optimizations.
Scaling PHP as a Scripting Language
PHP's roots are those of a scripting language, like Perl, Python, and Ruby, all of which have major benefits in terms of programmer productivity and the ability to iterate quickly on products. This is compared to more traditional compiled languages like C++ and interpreted languages like Java. On the other hand, scripting languages are known to generally be less efficient when it comes to CPU and memory usage. Because of this, it's been challenging to scale Facebook to over 400 billion PHP-based page views every month.
One common way to address these inefficiencies is to rewrite the more complex parts of your PHP application directly in C++ as PHP Extensions. This largely transforms PHP into a glue language between your front end HTML and application logic in C++. From a technical perspective this works well, but drastically reduces the number of engineers who are able to work on your entire application. Learning C++ is only the first step to writing PHP Extensions, the second is understanding the Zend APIs. Given that our engineering team is relatively small — there are over one million users to every engineer — we can't afford to make parts of our codebase less accessible than others.
Scaling Facebook is particularly challenging because almost every page view is a logged-in user with a customized experience. When you view your home page we need to look up all of your friends, query their most relevant updates (from a custom service we've built called Multifeed), filter the results based on your privacy settings, then fill out the stories with comments, photos, likes, and all the rich data that people love about Facebook. All of this in just under a second. HipHop allows us to write the logic that does the final page assembly in PHP and iterate it quickly while relying on custom back-end services in C++, Erlang, Java, or Python to service the News Feed, search, Chat, and other core parts of the site.
Since 2007 we've thought about a few different ways to solve these problems and have even tried implementing a few of them. The common suggestion is to just rewrite Facebook in another language, but given the complexity and speed of development of the site this would take some time to accomplish. We've rewritten aspects of the Zend Engine — PHP's internals — and contributed those patches back into the PHP project, but ultimately haven't seen the sort of performance increases that are needed. HipHop's benefits are nearly transparent to our development speed.
Hacking Up HipHop
One night at a Hackathon a few years ago (see Prime Time Hack), I started my first piece of code transforming PHP into C++. The languages are fairly similar syntactically and C++ drastically outperforms PHP when it comes to both CPU and memory usage. Even PHP itself is written in C. We knew that it was impossible to successfully rewrite an entire codebase of this size by hand, but wondered what would happen if we built a system to do it programmatically.
Finding new ways to improve PHP performance isn't a new concept. At run time the Zend Engine turns your PHP source into opcodes which are then run through the Zend Virtual Machine. Open source projects such as APC and eAccelerator cache this output and are used by the majority of PHP powered websites. There's also Zend Server, a commercial product which makes PHP faster via opcode optimization and caching. Instead, we were thinking about transforming PHP source directly into C++ which can then be turned into native machine code. Even compiling PHP isn't a new idea, open source projects like Roadsend and phc compile PHP to C, Quercus compiles PHP to Java, and Phalanger compiles PHP to .Net.
Needless to say, it took longer than that single Hackathon. Eight months later, I had enough code to demonstrate it is indeed possible to run faster with compiled code. We quickly added Iain Proctor and Minghui Yang to the team to speed up the pace of the project. We spent the next ten months finishing up all the coding and the following six months testing on production servers. We are proud to say that at this point, we are serving over 90% of our Web traffic using HipHop, all only six months after deployment.
How HipHop Works
The main challenge of the project was bridging the gap between PHP and C++. PHP is a scripting language with dynamic, weak typing. C++ is a compiled language with static typing. While PHP allows you to write magical dynamic features, most PHP is relatively straightforward. It's more likely that you see if (...) {...} else {..} than it is to see function foo($x) { include $x; }. This is where we gain in performance. Whenever possible our generated code uses static binding for functions and variables. We also use type inference to pick the most specific type possible for our variables and thus save memory.
The transformation process includes three main steps:
- Static analysis where we collect information on who declares what and dependencies,
- Type inference where we choose the most specific type between C++ scalars, String, Array, classes, Object, and Variant, and
- Code generation which for the most part is a direct correspondence from PHP statements and expressions to C++ statements and expressions.
We have also developed HPHPi, which is an experimental interpreter designed for development. When using HPHPi you don't need to compile your PHP source code before running it. It's helped us catch bugs in HipHop itself and provides engineers a way to use HipHop without changing how they write PHP.
Overall HipHop allows us to keep the best aspects of PHP while taking advantage of the performance benefits of C++. In total, we have written over 300,000 lines of code and more than 5,000 unit tests. All of this will be released this evening on GitHub under the open source PHP license.
Learn More this Evening
This evening we're hosting a small group of developers to dive deeper into HipHop for PHP and will be streaming this tech talk live. Check back here around 7:30pm Pacific time if you'd like to watch.
As I'm sure there will be plenty of questions, starting this evening take a look at the HipHop wiki or join the HipHop developer mailing list. You'll also find us at FOSDEM, SCALE, PHP UK, ConFoo, TEK X, and OSCON over the next few months talking about HipHop for PHP. We're very excited to evolve HipHop into a thriving open source project along with all of you.
Haiping Zhao, a senior engineer, has found Facebook to be a programmer's paradise.
Recent News
Updates to the Facebook Home Page
February 4, 2010
New Terms for Advertising Providers on Facebook Platform
February 3, 2010
HipHop for PHP: Move Fast
February 2, 2010
Communicating Directly with Your Users via Email
January 20, 2010
Building on our Commitment to Open Source Software
January 12, 2010
Postcards from December Developer Events
January 6, 2010
December 2009 Platform News
December 31, 2009
A Look Back on the App Economy of Facebook in 2009
December 22, 2009


