{"action":"created","comment":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41726232","id":41726232,"diff_hunk":"@@ -1,3 +1,276 @@\n+<!DOCTYPE html>\n+<html lang=\"ru\">\n+    <head>\n+        <h1>Блог компании Яндекс</h1>\n+        <h1>ЯНДЕКС.ПОЧТА: КАК МЫ ИЗЕРЯЕМ СКОРОСТЬ ЗАГРУЗКИ И УЛУЧШАЕМ ЕЁ</h1>\n+    </head>\n+    <body>\n+        <p>\n+            Если ваш сайт медленно грузится, вы рискуете тем, что люди не оценят ни то,\n+            какой он красивый, ни то, какой он удобный. Никому не понравится, когда все\n+            тормозит. Мы регулярно добавляем в Яндекс.Почту новую функциональность,\n+            иногда — исправляем ошибки, а это значит, у нас постоянно появляются новый код\n+            и новая логика. Всё это напрямую влияет на скорость работы интерфейса.\n+        </p>\n+        <p>Что мы измеряем</p>\n+        <ul>\n+            <li>подготовка;</li>\n+            <li>загрузка статики (HTTP-запрос и парсинг);</li>\n+            <li>исполнение модулей;</li>\n+            <li>инициализация базовых объектов;</li>\n+            <li>отрисовка.</li><br>\n+       </ul>\n+        <p>Этапы отрисовки любой страницы:</p>\n+        <ul>\n+            <li>подготовка к запросу на сервер;</li>\n+            <li>запрос данных с сервера;</li>\n+            <li>шаблонизация;</li>\n+            <li>обновление DOM.</li><br>\n+        </ul>\n+        <p>\n+            - <q>Ок, теперь у нас есть метрики, мы можем отправить их на сервер</q> - говорим мы<br>\n+            - <q>Что же дальше?</q> - вопрошаете вы<br>\n+            - <q>А давайте построим график!</q> - отвечаем мы<br>\n+        </p>\n+        <p>\n+            Как вы знаете, медиана – это серединное, а не среднее значение в выборке.\n+            Если у нас имеются числа 1, 2, 2, 3, 8, 10, 20, то медиана – 3, а среднее – 6,5.\n+            В общем случае медиана отлично показывает, сколько грузится средний пользователь.<br>\n+        </p>\n+        <p>\n+            В случае ускорения или замедления медиана, конечно, изменится. Но она не может\n+            рассказать, сколько пользователей ускорилось, а сколько замедлилось.<br>\n+        </p>\n+        <p>\n+            APDEX – метрика, которая сразу говорит: хорошо или плохо. Метрика\n+            работает очень просто. Мы выбираем временной интервал [0; <var>t</var>], такой, что если\n+            время показа страницы попало в него, то пользователь счастлив. Берем еще один\n+            интервал, (<var>t</var>; 4<var>t</var>] (в четыре раза больше первого), и считаем, что если страница\n+            показана за это время, то пользователь в целом удовлетворен скоростью работы,\n+            но уже не настолько счастлив. И применяем формулу:<br>\n+\t</p>\n+        <p>\n+            (кол-во счастливых пользователей + кол-во удовлетворенных / 2) / (кол-во всех).\n+            Получается значение от нуля до единицы, которое, видимо, лучше всего показывает,\n+            хорошо или плохо работает почта.<br>\n+        </p>\n+        <p>Как мы измеряем</p><br>\n+        <p>\n+            Сейчас модуль обновления сам логирует все свои стадии, и можно легко понять\n+            причину замедления: медленнее стал отвечать сервер либо слишком долго\n+            выполняется JavaScript. Выглядит это примерно так:<br>\n+        </p>\n+        <p>\n+            <pre><code>\n+                this.timings['look-ma-im-start'] = Date.now();\n+                this.timings['look-ma-finish'] = Date.now();<br>","path":"index.html","position":66,"original_position":66,"commit_id":"a32c91536d99408e4fe319b9f4cda852d83dba5d","original_commit_id":"a32c91536d99408e4fe319b9f4cda852d83dba5d","user":{"login":"trixartem","id":2376007,"avatar_url":"https://avatars.githubusercontent.com/u/2376007?v=3","gravatar_id":"","url":"https://api.github.com/users/trixartem","html_url":"https://github.com/trixartem","followers_url":"https://api.github.com/users/trixartem/followers","following_url":"https://api.github.com/users/trixartem/following{/other_user}","gists_url":"https://api.github.com/users/trixartem/gists{/gist_id}","starred_url":"https://api.github.com/users/trixartem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trixartem/subscriptions","organizations_url":"https://api.github.com/users/trixartem/orgs","repos_url":"https://api.github.com/users/trixartem/repos","events_url":"https://api.github.com/users/trixartem/events{/privacy}","received_events_url":"https://api.github.com/users/trixartem/received_events","type":"User","site_admin":false},"body":"`br` здесь не нужен - текст заключен в `pre` который учитывает все переносы и пробелы","created_at":"2015-10-12T06:19:49Z","updated_at":"2015-10-12T06:19:49Z","html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/33#discussion_r41726232","pull_request_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/33","_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/comments/41726232"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/33#discussion_r41726232"},"pull_request":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/33"}}},"pull_request":{"url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/33","id":46424169,"html_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/33","diff_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/33.diff","patch_url":"https://github.com/urfu-2015/verstka-tasks-1/pull/33.patch","issue_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/33","number":33,"state":"open","locked":false,"title":"Бергер Юлия","user":{"login":"JuliBer","id":14885431,"avatar_url":"https://avatars.githubusercontent.com/u/14885431?v=3","gravatar_id":"","url":"https://api.github.com/users/JuliBer","html_url":"https://github.com/JuliBer","followers_url":"https://api.github.com/users/JuliBer/followers","following_url":"https://api.github.com/users/JuliBer/following{/other_user}","gists_url":"https://api.github.com/users/JuliBer/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliBer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliBer/subscriptions","organizations_url":"https://api.github.com/users/JuliBer/orgs","repos_url":"https://api.github.com/users/JuliBer/repos","events_url":"https://api.github.com/users/JuliBer/events{/privacy}","received_events_url":"https://api.github.com/users/JuliBer/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-30T16:23:13Z","updated_at":"2015-10-12T06:19:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"dabc8e9cfa5e03fd5921d65da8d0e874ac4b51db","assignee":{"login":"trixartem","id":2376007,"avatar_url":"https://avatars.githubusercontent.com/u/2376007?v=3","gravatar_id":"","url":"https://api.github.com/users/trixartem","html_url":"https://github.com/trixartem","followers_url":"https://api.github.com/users/trixartem/followers","following_url":"https://api.github.com/users/trixartem/following{/other_user}","gists_url":"https://api.github.com/users/trixartem/gists{/gist_id}","starred_url":"https://api.github.com/users/trixartem/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trixartem/subscriptions","organizations_url":"https://api.github.com/users/trixartem/orgs","repos_url":"https://api.github.com/users/trixartem/repos","events_url":"https://api.github.com/users/trixartem/events{/privacy}","received_events_url":"https://api.github.com/users/trixartem/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/33/commits","review_comments_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/33/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/33/comments","statuses_url":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/a32c91536d99408e4fe319b9f4cda852d83dba5d","head":{"label":"JuliBer:master","ref":"master","sha":"a32c91536d99408e4fe319b9f4cda852d83dba5d","user":{"login":"JuliBer","id":14885431,"avatar_url":"https://avatars.githubusercontent.com/u/14885431?v=3","gravatar_id":"","url":"https://api.github.com/users/JuliBer","html_url":"https://github.com/JuliBer","followers_url":"https://api.github.com/users/JuliBer/followers","following_url":"https://api.github.com/users/JuliBer/following{/other_user}","gists_url":"https://api.github.com/users/JuliBer/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliBer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliBer/subscriptions","organizations_url":"https://api.github.com/users/JuliBer/orgs","repos_url":"https://api.github.com/users/JuliBer/repos","events_url":"https://api.github.com/users/JuliBer/events{/privacy}","received_events_url":"https://api.github.com/users/JuliBer/received_events","type":"User","site_admin":false},"repo":{"id":43351052,"name":"verstka-tasks-1","full_name":"JuliBer/verstka-tasks-1","owner":{"login":"JuliBer","id":14885431,"avatar_url":"https://avatars.githubusercontent.com/u/14885431?v=3","gravatar_id":"","url":"https://api.github.com/users/JuliBer","html_url":"https://github.com/JuliBer","followers_url":"https://api.github.com/users/JuliBer/followers","following_url":"https://api.github.com/users/JuliBer/following{/other_user}","gists_url":"https://api.github.com/users/JuliBer/gists{/gist_id}","starred_url":"https://api.github.com/users/JuliBer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JuliBer/subscriptions","organizations_url":"https://api.github.com/users/JuliBer/orgs","repos_url":"https://api.github.com/users/JuliBer/repos","events_url":"https://api.github.com/users/JuliBer/events{/privacy}","received_events_url":"https://api.github.com/users/JuliBer/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/JuliBer/verstka-tasks-1","description":"Задача к лекции «HTML, I часть»","fork":true,"url":"https://api.github.com/repos/JuliBer/verstka-tasks-1","forks_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/forks","keys_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/teams","hooks_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/hooks","issue_events_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/issues/events{/number}","events_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/events","assignees_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/assignees{/user}","branches_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/branches{/branch}","tags_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/tags","blobs_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/statuses/{sha}","languages_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/languages","stargazers_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/stargazers","contributors_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/contributors","subscribers_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/subscribers","subscription_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/subscription","commits_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/contents/{+path}","compare_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/merges","archive_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/downloads","issues_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/issues{/number}","pulls_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/pulls{/number}","milestones_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/milestones{/number}","notifications_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/labels{/name}","releases_url":"https://api.github.com/repos/JuliBer/verstka-tasks-1/releases{/id}","created_at":"2015-09-29T07:13:03Z","updated_at":"2015-09-29T07:13:03Z","pushed_at":"2015-10-10T09:41:16Z","git_url":"git://github.com/JuliBer/verstka-tasks-1.git","ssh_url":"git@github.com:JuliBer/verstka-tasks-1.git","clone_url":"https://github.com/JuliBer/verstka-tasks-1.git","svn_url":"https://github.com/JuliBer/verstka-tasks-1","homepage":"","size":127,"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-10-07T14:13:10Z","pushed_at":"2015-10-12T00:36:02Z","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":2665,"stargazers_count":15,"watchers_count":15,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":112,"mirror_url":null,"open_issues_count":51,"forks":112,"open_issues":51,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/33"},"html":{"href":"https://github.com/urfu-2015/verstka-tasks-1/pull/33"},"issue":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/33"},"comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/issues/33/comments"},"review_comments":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/pulls/33/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/33/commits"},"statuses":{"href":"https://api.github.com/repos/urfu-2015/verstka-tasks-1/statuses/a32c91536d99408e4fe319b9f4cda852d83dba5d"}}}}