• Вы в браузере набрали адрес сайта, нажали Enter. Расскажите максимально подробно о технических процессах происходящих далее?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Действительно, уважаемый. Это слишком. Вряд ли я затрону все тонкости, но попробую наметить примерный путь:

    0) Пользователь вбивает в адресную строку браузера адрес сайта (нажимая клавиши на клавиатуре, которые замыкают определённую дорожку в матрице, по которой происходит определение нажатой клавиши, что через шину USB в какой-то момент передастся OS, где это поймает HID-драйвер и вызовет определённое прерывание, что OS передаст как событие/или_ещё_как в программу, которая вызовет соотвествующую функцию из API менеджера окон, которая изменит содержимое строки и в результате когда-то будет перерисован UI-элемент, а если нажат был Enter, то начнётся следующее).
    1) Браузер вытащит из input'а строку с запросом и посмотрит, похоже ли это на адрес. Если да, то добавит недостающие уточнения (например, http или file протокол, порт и подобные довольно стандартные вещи). Если нет - то скорее всего создаст запрос в поисковую систему, установленную по умолчанию (я более не буду опускаться до таких бессмысленных деталей, как вызовы API-функций, иначе я буду набирать это сообщение ОЧЕНЬ долго). В любом случае на выходе мы по сути получим URL, который надо загрузить. Протокол file:// мы рассматривать не будем, ftp далеко не везде есть, https:// на не хватит вечности, так что остановимся на http, который по сути есть tcp/ip по умолчанию на 80 порту с определённым форматом общения.
    2) Окей, url есть. Теперь нам нужен адрес, к которому обращаться. Так как http это tcp/ip - нам нужен ip адрес. Здесь нам помогают dns-сервера. Обычно, нормальный провайдер устанавливает у себя кэш-сервера dns, которые не обращаются по стопицот раз за vk.com к ответственному серверу com-зоны. Давайте не будем отвлекаться на то, как происходит там общение, если что - вот (вики тем хороша, что часто содержит внизу релевантные ссылки). Скажу лишь то, что на выходе мы получаем ip адрес(а).
    3) Имея адрес мы можем запросить страницу. Собственно, всё что после первого слэша - это как-бы параметры для http-сервера: какую именно страницу запрашивать, он всё же не телепат. Конечно, можно было бы немного схитрить и отправить читать про tcp/ip, но ведь существует и shared-hosting. Ограничемся лишь его упоминанием. Собственно, по полученному адресу отправляется GET запрос, который и обрабатывает сервер, находящийся по полученному IP-адресу.
    4) Сервер же, получив адрес, начинает распарсивать строку, медленно вытягивая нужные данные из баз-данных и настроек, выполняются сотни скриптов, иногда делается ещё не одна сотня различных запросов на другие сервера (здесь и разного вида метрики и разного вида HADOOP и т.д.). Пройдя сквозь скрипты и темплейторы в самом конце мы получаем html-страницу, готовую к употреблению. Её-то сервер и отправит в ответе (после заголовков, конечно).
    5) Вот и началось самое интересное. Получив html страницу браузер начинает жутко надругаться над CPU, HDD и GPU, попутно сжирая тонны RAM и мусоря в swap. Виной всему нереальные для полного соблюдения стандарты от небезызвестной w3c.org. Для облегчения многие делают костыли, вроде webkit, а некоторые и вовсе забивают на него и пилят свой стандарт с преферансом и картёжницами (впрочем, в последнее время становиться лучше). Здесь снова начинаются сотни вызовов API ОС, windows manager'а и прочих библиотек, вроде boost, qt или libpng. В ходе работы в RAM строится макет, по которому потом строится нечто вроде PDF (тоже сильно векторный), что, потом, обрабатываясь быстрыми шейдерами на GPU, выдаётся на экран. Опять же, многое пропущено, но вряд ли кому-либо, кроме парня в свитере с оленями, действительно интересно, как работает GDI, DirectX или OpenGL.
    6) Ах да, мы же забыли про тысячи js-скриптов, миллионы картинок и анимации с котиками, а также о таких дополнительных плюшках, как flash-player или java-weblets. В кратце, что js, то и flash и java - это виртуалка, со специальной архитектурой. Они, виртуалки, конечно разные (хотя flash и js довольно похожи, ещё бы - ECMAScript один и тот же). JS - самый интегрированный внутрь браузера, он же и самый медленный чисто визуально (ибо последние два имеют доступ к быстрому GPU), хотя самый быстрый в попугаях. Второй постепенно вымирает и представляет из себя, так же как и третий специальную shared-библиотеку, о которой браузер как-нибудь узнал и которой скармливает специальное содержимое помечанное специальным тегом html. Третий уже почти умер и встречается лишь изредка или в каком-нибудь энтерпрайзед со страшным legacy-базой. Ну здесь из сылок разве только гугл. Ибо сколько всего - даже не сообразишь. Да и вообще, эта тема ещё скучнее GDI, DirectX и OpenGL и к свитеру с оленями требуются ещё очки с толстенными стёклами, дающие стопицот к терпению и задроству над матаном. Если в кратце, то в случае JS, всё что было загружено в память и не думает выгружаться и формирует этакое дерево - DOM, над которым с помощью специального API и происходят модификации. При этом, перед тем как исполниться, весь JS-код компилируется, в нативный для VM байт-код. То же самое в общем-то и со вторым и третьим, разве только они не имеют доступа к DOM и организовать его - дело тех ещё костылей. Ах да, забыл ещё про Silverlight (или как оно там пишется), который сдох, не успев родиться. Так же как и Java, жив в серьёзном энтерпрайзе, не поскупившийся не "дешёвую" поддержку MS.
    7) Ну... А дальше пользователь нажимает на нужную гиперссылку и всё по новой.

    За кадром остались такие костыли, как ajax, websockets и прочая асинхронная ересь. С ней всё в миллионы раз сложнее. И к очкам со свитером потребуется ещё и... а чёрт их знает, что они там ещё носят. Ну да ладно, я искренне завидую тем парням (и девушкам), которые разбираются во всей этой машине. Целиком. Ибо это лишь верхушка айсберга. Разбавленная не лучшей памятью и ужасным гуглом.

    P.S. Не бейте сильно за грамматические и синтаксические ошибки. Спеллчекер приказал долго жить, да и 5 утра как никак.

    UPDATE
    На хабр выложили неплохой перевод дающий некоторое представление, как браузер ругается над памятью и процессором. Хотя и весьма поверхностное,
    Ответ написан
    26 комментариев
  • Сколько будет в среднем стоить создать приложение на Android?

    Spetros
    @Spetros
    IT-шник
    Конечная сумма зависит от степени детализации и проработанности ТЗ.
    Основной критерий: время - деньги.
    Ответ написан
    Комментировать
  • Чем отличается запуск без отладки от запуска с отладкой?

    EXL
    @EXL
    Энтузиаст
    Во-первых, компилятор всегда указывает на ошибки и неоднозначности.
    Во-вторых, не запуск с отладкой, а компиляция с отладочными символами.
    В режиме отладки в собранный исполнительный бинарник добавляются специальные символы, позволяющие посмотреть, в какой функции программа завершилась аварийно. Отладочный бинарник позволяет пройти по стеку вызовов функций, выполнить каждую инструкцию процессора или C/C++-строчку по-порядку. Поставить брекпойнт и.т.д.
    Подробнее тут
    Ответ написан
    1 комментарий
  • Как передать и получить переменные C++ по сети?

    Trrrrr
    @Trrrrr
    Что бы не думать что использовать json или xml, рекомендую посмотреть на boost::ptree.

    Это враппер над некоторыми стандартными форматами хранения данных.
    Вот небольшой туториал:
    www.boost.org/doc/libs/1_42_0/doc/html/boost_prope...
    вместо write_xml пишите write_json и можете использовать другой формат (хотя там есть ньюансы, но они тут не важны)
    Ответ написан
    Комментировать
  • Android: как получить доступную высоту?

    SolidlSnake
    @SolidlSnake
    Ваш дружелюбный сосед
    Возможно я скажу что-то не так, но...
    Ответ написан
    1 комментарий
  • Какую выбрать систему контроля версий для веб-разработки?

    @gro
    Я, конечно, SVN рекомендовать не буду, но причём тут "не хранит последнюю версию всех файлов сайта"?
    Ответ написан
    Комментировать
  • pt или px. Равны ли они?

    pt и px не равны, pt - пункт, px - пиксель
    а вообще вы кажется ошиблись в адресной строке браузера и вместо google.com зачем то набрали toster.ru
    Ответ написан
    Комментировать
  • Почему сайт с простейшими sql запросами "валит" VPS уже при 50 активных посетителей?

    @Masterme
    А я вот раньше ездил на автобусе и за 20 минут доезжал до работы. А неделю назад купил машину, так в ней в пробки попадаю, и едет она медленно. В сервисе сказали, что машина оптимизирована для езды, должно быть всё в порядке. Вот графики моих поездок на машине
    [картинка жпг]
    а вот на автобусе раньше
    [картинка жпг]
    Пожалуйста подскажите, в чём может быть проблема.
    Ответ написан
    2 комментария
  • Почему сайт с простейшими sql запросами "валит" VPS уже при 50 активных посетителей?

    @Masterme
    Действительно. Какой-то глупый VPS. Разве может LIKE '%...' тормозить?
    Ответ написан
    Комментировать
  • Как поменять ширину обьекта в нужную сторону?

    ScorpLeX
    @ScorpLeX
    3 одинаковый тупой вопрос, не надоело?
    http://htmlbook.ru/
    Ответ написан
    Комментировать
  • Задача для верстальщиков. Выравнивание по вертикали

    Webdesus
    @Webdesus
    Задайте height в 100% и все будет ок.)))
    body {background: #2c3e50;}
    div {
        height:100%;
      padding-top: calc(50% - 25px);
      height: 50px;
      width: 50px;
      margin: 0 auto;
    }
    Ответ написан
    4 комментария
  • Как сделать высоту секции в зависимости от высоты клиентской области браузера?

    CodeByZen
    @CodeByZen
    php, js, my/mssql, sqlite, html, css, it-consult
    http://api.jquery.com/height/

    или

    var winH=0; var winW=0;
    if (document.body && document.body.offsetWidth) {
     winW = document.body.offsetWidth;
     winH = document.body.offsetHeight;
    }
    if (document.compatMode=='CSS1Compat' &&
        document.documentElement &&
        document.documentElement.offsetWidth ) {
     winW = document.documentElement.offsetWidth;
     winH = document.documentElement.offsetHeight;
    }
    if (window.innerWidth && window.innerHeight) {
     winW = window.innerWidth;
     winH = window.innerHeight;
    }
    console.log(winH+'x'+winW);
    Ответ написан
    3 комментария
  • Не могу понять систему оценки стоимости разработки сайта

    @Masterme

    1. Составляется ТЗ, в котором по пунктам расписано, что нужно сделать и как оно должно в результате выглядеть и работать.
    2. ТЗ отдаётся на оценку кандидатам, они проставляют оценочное количество человеко-часов и ставку за час по каждому пункту
    3. Прибавляются прочие расходы, такие как покупка шаблонов или фотографий или движка сайта и т.д.
    Сумма 2 и 3 и будет ответом. Если пункт 1 вы выполнить сами не в состоянии (думаю, это так), то ещё и за него нужно будет заплатить.

    Ответ написан
    1 комментарий
  • Что за странные сообщения в ленте между постами на хабре?

    deMone
    @deMone
    Техдиректор — tech-director.ru

    НЛО прилетает и оставляет записи.

    Ответ написан
    Комментировать
  • Кто покупал через Pesoto? (Украина)

    @nicolausYes
    Промахнулся :(
    У них +26$ налога за технику, если магазин этого требует (склад расположен в таком штате). На сайте этого нет потому, что не все магазины требуют этот налог. Обещали в будущем перенести склад в другой штат.
    Ответ написан
    1 комментарий
  • Компьютер и Кошки. Ревнуют ли Вас кошки к компьютеру?

    mrakolice
    @mrakolice
    Мой кот вместе со мной играет в третьих героев. Бьет существ противника лапой. Так как бьет несильно (больше дотрагивается) и когтей не выпускает, считаю это приятным дополнением.
    Ответ написан
    Комментировать
  • Программно отключить использование одного ядра процессора для приложения

    @Sayonji
    Set affinity не помогает, возможно, потому что применяется уже после запуска. Можно попробовать сделать это до запуска.
    Play.bat:
    start /affinity 1 Scarface.exe
    Ответ написан
    1 комментарий
  • С чего начать программировать под Android?

    @nicolausYes
    Я в свое время начал с уроков на startandroid.ru. Но вскоре понял, что «отрывочные» знания мне ничего не дают. И решил писать сразу боевое приложение, было несколько идей. По ходу изучал Java (до этого программировал на С++ и C#), стыкался и решал реальные практические задачи. Через неделю-две ранее написанный код переписывал заново, либо переносил в отдельные потоки, со временем код становился лучше и лучше и приходило понимание :) Первое приложение, которое я опубликовал было написано за 2 месяца, вечерами после работы.

    Очень полезный ресурс – stackoverflow :)
    Ответ написан
    2 комментария