Из-за огромного количества разных браузеров веб-разработчикам часто приходится писать один и тот же код несколько раз. Особенно часто это происходит при создании CSS-правил.

После некоторых проблем с поддержкой проекта в разных браузерах я решил разобраться - почему между браузерами так много различий?

Из-за движков браузера;

Я узнал о двух типах движка - layout & javascript;

Основные браузеры: Chromium (Chrome), Mozilla Firefox, IE, Safari;

Компоновка двигателей:

  • Chrome - Webkit (до 27 вер.); Blink (после ver 27 - форк от Webkit)
  • Mozilla Firefox - Gecko
  • IE - Trident (Edge - EdgeHTML - форк от Trident)
  • Safari - WebKit от Apple (Webcore - на основе движка Konqueror KHTML)

При создании макета для разных браузеров мы часто видим различия на ранних этапах. В случае с JS все не так однозначно.

Самый распространенный пример - это класс Date в Chrome и Firefox.

Как показано на скриншотах, все методы (getDate, getMonth, getYear и т. Д.) Выводят одни и те же значения как в Chrome, так и в Firefox. Но если вы просто сравните выходы переменных, содержащих экземпляры класса Date, они будут разными.

Что это означает? Разные JS-движки.

Проведя небольшое исследование, я нашел следующую информацию о JS-движках:

  • Хром - V8
  • Mozilla Firefox - SpiderMonkey
  • IE - Чакра
  • Safari - WebKit от Apple (JavaScriptCore (на основе движка KDE JavaScript, названного KJS)

Каждый движок написан на определенном языке (C ++, Java и т. Д.)

Каждый движок означает реализацию определенной функциональности. Каждый функционал - это конкретная реализация алгоритма, помогающая достичь какой-то цели.

Почему результаты Chrome и Firefox отличаются? Потому что реализация класса Date в V8 и в SpiderMonkey не одинаковы. Скорее всего, разница только в формате вывода, а возможно, и в хранении объекта.

Глобально - разница в алгоритме. А именно - в алгоритме хранения данных или в алгоритме вывода данных.

Так что же такое алгоритм?

Алгоритм - это набор инструкций, описывающих порядок действий, которые необходимо выполнить для достижения определенного результата.

Давайте посмотрим на браузеры. Наиболее используемый тип - алгоритм сортировки.

В JS есть один метод, который отвечает за эту функциональность:

Array.sort ();

Итак, какие алгоритмы сортировки используют разные JS-движки?

  • V8 - Быстрая сортировка (iOS - Сортировка слиянием)
  • SpiderMonkey - сортировка слиянием
  • WebKit - сортировка слиянием
  • Чакра - К сожалению, я не нашел никакой информации об алгоритмах, используемых в реализации сортировки Чакры.

Эта информация может помочь, когда вам нужно знать эффективность Array.sort () с разными размерами данных.

К счастью, сегодня многие движки размещены на github. Таким образом, вы можете легко найти информацию о реализации методов в разных браузерах. Вам нужно будет прочитать код C ++ или Java (или, может быть, написанный на каком-то другом языке), но я надеюсь, что это все равно будет полезно.