Артем Сильчук - respond in 60ms. extremal optimization with reinventing a wheel

Post on 12-Jul-2015

70 Views

Category:

Internet

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Respond in 60ms.

Extremal optimization with reinventing a

wheel

About me: Drupal developer since 2010

Artem Sylchuk

How long it takes to load a page?

1,096,471 microsecs

24,824 microsecs

?

XHProf

Optimize it!

1. Disable and uninstall unused modules.

2. Switch to non-database cache backend.

3. Enable page caching, CSS and JS aggregation.

4. CDN

5. Install “caching” modules.

6. Investigate page load time using XHProf and/or NewRelic, etc.

7. Configure cron jobs and other background processes.

8. Optimize slow queries.

9. Authcache?

Do more caching...

The Authcache module offers page caching for both anonymous users and

logged-in authenticated users. This allows Drupal/PHP to only spend 1-2

milliseconds serving pages, greatly reducing server resources.

How does it work?Authcache saves the final rendered HTML of a page to serve visitors. A separate cache is created for each user role as defined by the

administrator, so some roles can be excluded if necessary.

Authcache places priority on serving pages to the visitor as fast as possible. After a page is loaded by the browser, a second HTTP request may

be performed via Ajax. This initiates a lightweight DRUPAL_BOOTSTRAP_SESSION that allows SQL queries to be executed (such as updating

the user "history" table or node "statistics" table), and returns any user-customized data to the page (such as form tokens or default values on a

contact form).

How does Drupal load pages?

drupal_bootstrap()

3,294 microsecs

48,839 microsecs

65,190 microsecs

63,089 microsecs

66,188 microsecs

73,894 microsecs

687,986 microsecs

menu_execute_active_handler

1,639,028 microsecs

drupal_deliver_page

drupal_deliver_html_page

drupal_render_page

(Un)Real tasks?

● Less than 10 database requests

● Less than 100ms for the page generation

● More than 10 000 users per minute

● Page must be dynamic

History of Chiq.com

Thin applications idea

start

load bootsrap.inc

bootstrap session //

connect to DB, start

session

home

page?

Load homepage

application

search

page?

Load

Search

application

bootstrap FULL

finish

finish

Load

Drupal

finish

yes

yes

no

no

item

?

load item

application

bootstrap language

bootstrap late page cache

check for canvas page

bootstrap path

yes

no

finish

Result?

Cons

1. It is custom. Too custom.● Maintainability.

● Security.

● Documentation.

● Complexity.

● Bicyclelity.

● Development speed.

● All other things why we prefer Drupal over a custom solution.

Is there a way to make it better?

Page delivery callbacks

Add headers, print content. They deliver.

● drupal_deliver_html_page

● ajax_deliver

● drupal_json_output (Media browser plus)

● admin_menu_deliver (Admin menu)

Renderable arrays https://www.drupal.org/node/930760

"Render Arrays" or

"Renderable Arrays" are the

building blocks of a Drupal

page, starting with Drupal 7.

A render array is an

associative array which

conforms to the standards

and data structures used in Drupal's theme rendering system.

In many cases, the data used to build a page (and all parts of it) is kept as

structured arrays until the rendering stage in the theming system. This allows

enormous flexibility in changing the layout or content of a page, and provides future

performance enhancements as well.

Views, panels, etc

hook_boot

Profit?

Main myth of Drupal

We do write the code.

A lot of code. “81792 lines” lot of code.

Drupal 8 - brave new world

Page generation time for anonymous user: 353,903 ms …

?

Future?

= ?

Questions?

top related