{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41005212","id":41005212,"diff_hunk":"@@ -1,3 +1,380 @@\n-<html>\n-    <!-- Ваш замечательный код -->\n-</html>\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+    <head>\n+        <meta charset=\"utf-8\">\n+        <title>Блог компании Яндекс.</title>\n+        <meta name=\"author\" content=\"Ветошко Дарья\">\n+        <style type=\"text/css\">\n+            table{\n+                border-collapse: collapse;\n+                border: 1px solid black;\n+            }\n+            td, th{\n+                border: 1px solid black;\n+                padding: 0px 20px;\n+            }\n+            div{\n+                padding-left: 30px;\n+            }\n+            .formula{\n+                font-style: italic;\n+                font-weight: bold;\n+            }\n+        </style>\n+    </head>\n+    <body>\n+    <main>\n+        <h1>ЯНДЕКС.ПОЧТА: КАК МЫ ИЗМЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</h1>\n+        <aside>\n+            Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то,\n+            какой он красивый, ни то, какой он удобный. Никому не понравится, когда все\n+            тормозит. Мы регулярно добавляем в Яндекс.Почту новую функциональность,\n+            иногда &mdash; исправляем ошибки, а это значит, у нас постоянно появляются новый код\n+            и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+        </aside>\n+        <article>\n+            <h2>Что мы измеряем</h2>\n+            <p>Этапы первой загрузки:</p>\n+            <div>\n+                <ul>\n+                    <li>подготовка;</li>\n+                    <li>загрузка статики (HTTP&ndash;запрос и парсинг);</li>\n+                    <li>исполнение модулей;</li>\n+                    <li>инициализация базовых объектов;</li>\n+                    <li>отрисовка.</li>\n+                </ul>\n+            </div>\n+            <p>Этапы отрисовки любой страницы:</p>\n+            <div>\n+                <ul>\n+                    <li>подготовка к запросу на сервер;</li>\n+                    <li>запрос данных с сервера;</li>\n+                    <li>шаблонизация;</li>\n+                    <li>обновление DOM.</li>\n+                </ul>\n+            </div>\n+            <dialog>\n+                <dd>\n+                    &ndash; &laquo;Ок, теперь у нас есть метрики, \n+                    мы можем отправить их на сервер&raquo; &ndash; говорим мы\n+                </dd>\n+                <dd>&ndash; &laquo;Что же дальше?&raquo; &ndash; вопрошаете вы</dd>\n+                <dd>&ndash; &laquo;А давай построим график!&raquo; &ndash; отвечаем мы</dd>\n+                <dd>&ndash; &laquo;А что будем считать?&raquo; &ndash; уточняете вы</dd>\n+            </dialog>\n+            <p>\n+                Как вы знаете, <dfn>медиана</dfn> &ndash; это серединное, \n+                а не среднее значение в выборке.<br>\n+                Если у нас имеются числа 1, 2, 2, 3, 8, 10, 20, то медиана &ndash; 3, \n+                а среднее &ndash; 6,5.<br>\n+                В общем случае медиана отлично показывает, сколько грузится средний пользователь.\n+            </p>\n+            <p>\n+                В случае ускорения или замедления медиана, конечно, изменится. Но она не может\n+                рассказать, сколько пользователей ускорилось, а сколько замедлилось.</p>\n+            <p>\n+                <abbr title=\"Application Performance Index\"><def>APDEX</def></abbr> &ndash; метрика, которая сразу говорит: хорошо или плохо. \n+                Метрика работает очень просто. Мы выбираем временной интервал [0; t], такой, что если\n+                время показа страницы попало в него, то пользователь счастлив. Берем еще один\n+                интервал, (t; 4t] (в четыре раза больше первого), и считаем, что если страница\n+                показана за это время, то пользователь в целом удовлетворен скоростью работы,\n+                но уже не настолько счастлив. И применяем формулу:</p>\n+            <p>\n+                <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n+                    <mfrac>\n+                        <mrow>\n+                            <mi>кол&ndash;во счастливых пользователей</mi>\n+                            <mo>&plus;</mo>\n+                            <mfrac>\n+                                <mi>кол&ndash;во удовлетворенных</mi>\n+                                <mi>2</mi>\n+                            </mfrac>\n+                        </mrow>\n+                        <mrow>\n+                            <mi>кол&ndash;во всех</mi>\n+                        </mrow>\n+                    </mfrac>\n+                </math>.\n+            </p>\n+            <p>\n+                Получается значение от нуля до единицы, которое, видимо, лучше всего показывает,\n+                хорошо или плохо работает почта.\n+            </p>\n+        </article>\n+\n+        <article>\n+            <h2>Как мы измеряем</h2>\n+            <p>\n+                Сейчас модуль обновления сам логирует все свои стадии, и можно легко понять\n+                причину замедления: медленнее стал отвечать сервер либо слишком долго\n+                выполняется JavaScript. Выглядит это примерно так:\n+                <pre><code><figure>\n+                this.timings['look&ndash;ma&ndash;im&ndash;start'] = Date.now();\n+                this.timings['look&ndash;ma&ndash;finish'] = Date.now();\n+                </figure></code></pre>\n+            </p>\n+            <p>\n+                C помощью <code>Date.now()</code> мы получаем текущее время. Все тайминги собираются и при\n+                отправке рассчитываются. \n+                На этапах разница между &#10077;end&#10078; и &#10077;start&#10078;\n+                не считается, а все вычисления производятся в конце:","path":"index.html","position":123,"original_position":123,"commit_id":"cb371a967437969271658371beed7f5fc3dc317c","original_commit_id":"cb371a967437969271658371beed7f5fc3dc317c","user":{"login":"xiiivii","id":14858283,"avatar_url":"https://avatars.githubusercontent.com/u/14858283?v=3","gravatar_id":"","url":"https://api.github.com/users/xiiivii","html_url":"https://github.com/xiiivii","followers_url":"https://api.github.com/users/xiiivii/followers","following_url":"https://api.github.com/users/xiiivii/following{/other_user}","gists_url":"https://api.github.com/users/xiiivii/gists{/gist_id}","starred_url":"https://api.github.com/users/xiiivii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiiivii/subscriptions","organizations_url":"https://api.github.com/users/xiiivii/orgs","repos_url":"https://api.github.com/users/xiiivii/repos","events_url":"https://api.github.com/users/xiiivii/events{/privacy}","received_events_url":"https://api.github.com/users/xiiivii/received_events","type":"User","site_admin":false},"body":"то же самое с `figure`","created_at":"2015-10-02T09:34:57Z","updated_at":"2015-10-02T09:34:57Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/54#discussion_r41005212","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41005212"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/54#discussion_r41005212"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54","id":46611566,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/54","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/54.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/54.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/54","number":54,"state":"open","locked":false,"title":"Ветошко Дарья","user":{"login":"vetoshko","id":5564166,"avatar_url":"https://avatars.githubusercontent.com/u/5564166?v=3","gravatar_id":"","url":"https://api.github.com/users/vetoshko","html_url":"https://github.com/vetoshko","followers_url":"https://api.github.com/users/vetoshko/followers","following_url":"https://api.github.com/users/vetoshko/following{/other_user}","gists_url":"https://api.github.com/users/vetoshko/gists{/gist_id}","starred_url":"https://api.github.com/users/vetoshko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vetoshko/subscriptions","organizations_url":"https://api.github.com/users/vetoshko/orgs","repos_url":"https://api.github.com/users/vetoshko/repos","events_url":"https://api.github.com/users/vetoshko/events{/privacy}","received_events_url":"https://api.github.com/users/vetoshko/received_events","type":"User","site_admin":false},"body":null,"created_at":"2015-10-02T08:13:04Z","updated_at":"2015-10-02T09:34:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6da579f448e78a4e83ad31dccf9a143d6ad2472d","assignee":{"login":"xiiivii","id":14858283,"avatar_url":"https://avatars.githubusercontent.com/u/14858283?v=3","gravatar_id":"","url":"https://api.github.com/users/xiiivii","html_url":"https://github.com/xiiivii","followers_url":"https://api.github.com/users/xiiivii/followers","following_url":"https://api.github.com/users/xiiivii/following{/other_user}","gists_url":"https://api.github.com/users/xiiivii/gists{/gist_id}","starred_url":"https://api.github.com/users/xiiivii/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xiiivii/subscriptions","organizations_url":"https://api.github.com/users/xiiivii/orgs","repos_url":"https://api.github.com/users/xiiivii/repos","events_url":"https://api.github.com/users/xiiivii/events{/privacy}","received_events_url":"https://api.github.com/users/xiiivii/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54/comments","review_comment_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments{/number}","comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/54/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/cb371a967437969271658371beed7f5fc3dc317c","head":{"label":"vetoshko:master","ref":"master","sha":"cb371a967437969271658371beed7f5fc3dc317c","user":{"login":"vetoshko","id":5564166,"avatar_url":"https://avatars.githubusercontent.com/u/5564166?v=3","gravatar_id":"","url":"https://api.github.com/users/vetoshko","html_url":"https://github.com/vetoshko","followers_url":"https://api.github.com/users/vetoshko/followers","following_url":"https://api.github.com/users/vetoshko/following{/other_user}","gists_url":"https://api.github.com/users/vetoshko/gists{/gist_id}","starred_url":"https://api.github.com/users/vetoshko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vetoshko/subscriptions","organizations_url":"https://api.github.com/users/vetoshko/orgs","repos_url":"https://api.github.com/users/vetoshko/repos","events_url":"https://api.github.com/users/vetoshko/events{/privacy}","received_events_url":"https://api.github.com/users/vetoshko/received_events","type":"User","site_admin":false},"repo":{"id":43541862,"name":"verstka-tasks-1","full_name":"vetoshko/verstka-tasks-1","owner":{"login":"vetoshko","id":5564166,"avatar_url":"https://avatars.githubusercontent.com/u/5564166?v=3","gravatar_id":"","url":"https://api.github.com/users/vetoshko","html_url":"https://github.com/vetoshko","followers_url":"https://api.github.com/users/vetoshko/followers","following_url":"https://api.github.com/users/vetoshko/following{/other_user}","gists_url":"https://api.github.com/users/vetoshko/gists{/gist_id}","starred_url":"https://api.github.com/users/vetoshko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vetoshko/subscriptions","organizations_url":"https://api.github.com/users/vetoshko/orgs","repos_url":"https://api.github.com/users/vetoshko/repos","events_url":"https://api.github.com/users/vetoshko/events{/privacy}","received_events_url":"https://api.github.com/users/vetoshko/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/vetoshko/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/vetoshko/verstka-tasks-1","forks_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/vetoshko/verstka-tasks-1/releases{/id}","created_at":"2015-10-02T08:04:45Z","updated_at":"2015-10-02T08:04:46Z","pushed_at":"2015-10-02T08:13:01Z","git_url":"git://github.com/vetoshko/verstka-tasks-1.git","ssh_url":"git@github.com:vetoshko/verstka-tasks-1.git","clone_url":"https://github.com/vetoshko/verstka-tasks-1.git","svn_url":"https://github.com/vetoshko/verstka-tasks-1","homepage":"","size":1797,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"urfu-2015:master","ref":"master","sha":"92106c708076d457b6ffcd8175044271b4318dd9","user":{"login":"urfu-2015","id":14800971,"avatar_url":"https://avatars.githubusercontent.com/u/14800971?v=3","gravatar_id":"","url":"https://api.github.com/users/urfu-2015","html_url":"https://github.com/urfu-2015","followers_url":"https://api.github.com/users/urfu-2015/followers","following_url":"https://api.github.com/users/urfu-2015/following{/other_user}","gists_url":"https://api.github.com/users/urfu-2015/gists{/gist_id}","starred_url":"https://api.github.com/users/urfu-2015/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/urfu-2015/subscriptions","organizations_url":"https://api.github.com/users/urfu-2015/orgs","repos_url":"https://api.github.com/users/urfu-2015/repos","events_url":"https://api.github.com/users/urfu-2015/events{/privacy}","received_events_url":"https://api.github.com/users/urfu-2015/received_events","type":"Organization","site_admin":false},"repo":{"id":43061154,"name":"verstka-tasks-1","full_name":"urfu-2015/verstka-tasks-1","owner":{"login":"urfu-2015","id":14800971,"avatar_url":"https://avatars.githubusercontent.com/u/14800971?v=3","gravatar_id":"","url":"https://api.github.com/users/urfu-2015","html_url":"https://github.com/urfu-2015","followers_url":"https://api.github.com/users/urfu-2015/followers","following_url":"https://api.github.com/users/urfu-2015/following{/other_user}","gists_url":"https://api.github.com/users/urfu-2015/gists{/gist_id}","starred_url":"https://api.github.com/users/urfu-2015/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/urfu-2015/subscriptions","organizations_url":"https://api.github.com/users/urfu-2015/orgs","repos_url":"https://api.github.com/users/urfu-2015/repos","events_url":"https://api.github.com/users/urfu-2015/events{/privacy}","received_events_url":"https://api.github.com/users/urfu-2015/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/urfu-2015/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":false,"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1","forks_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/releases{/id}","created_at":"2015-09-24T10:45:26Z","updated_at":"2015-09-29T19:03:45Z","pushed_at":"2015-10-02T08:13:05Z","git_url":"git://github.com/urfu-2015/verstka-tasks-1.git","ssh_url":"git@github.com:urfu-2015/verstka-tasks-1.git","clone_url":"https://github.com/urfu-2015/verstka-tasks-1.git","svn_url":"https://github.com/urfu-2015/verstka-tasks-1","homepage":"","size":1797,"stargazers_count":14,"watchers_count":14,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":61,"mirror_url":null,"open_issues_count":45,"forks":61,"open_issues":45,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/54"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/54"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/54/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54/comments"},"review_comment":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/54/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/cb371a967437969271658371beed7f5fc3dc317c"}}}}