2 сентября 2008 года Google выпустил Chrome. Вместе с браузером - 38-страничный комикс от Scott McCloud с объяснением архитектурных решений. Google объяснял браузер через комикс. Это говорило о многом.
V8 - JavaScript-движок Chrome - был написан с нуля командой Lars Bak из Дании. Те же люди строили JIT-компиляторы для Smalltalk и Java в 90-х.
Firefox 3 на SunSpider benchmark: 3800мс. Chrome beta: 380мс. Тот же код, та же машина, в десять раз быстрее.
Казахстанские разработчики следили за этим через блоги и Хабрахабр. Числа казались нереальными.
V8: JIT-компиляция в деталях
// Почему V8 быстрее? Компиляция в машинный код при первом выполнении.
// Firefox 3 (SpiderMonkey) интерпретировал байткод.
// V8 генерировал нативный код под конкретный процессор.
// Hidden Classes - ключевая оптимизация V8:
// Стандартный паттерн создания объектов:
function Product(name, price, stock) {
this.name = name;
this.price = price;
this.stock = stock;
}
var p1 = new Product('Телефон', 50000, 10);
var p2 = new Product('Планшет', 80000, 5);
// p1 и p2 разделяют Hidden Class C3: {name, price, stock}
// Доступ к свойствам = фиксированный offset в памяти → C++-скорость
// Антипаттерн - разрушает оптимизацию:
var p3 = new Product('Ноутбук', 150000, 3);
p3.discount = 10; // Новый Hidden Class для p3 - деоптимизация
// V8 не может инлайнить доступ к p3.price так же эффективно
// Практическое правило для 2008 года:
// Создавайте все свойства объекта в конструкторе, в одном порядке.
// Не добавляйте свойства динамически после создания.
// Benchmark для наглядности:
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
// Firefox 3: ~2500мс для fibonacci(40)
// Chrome beta: ~240мс для fibonacci(40)
Гонка браузеров: реакция на V8
// SunSpider 0.9 - стандарт 2008-2010
// Результаты конец 2008:
// IE 7: ~5700мс - Microsoft не имел JIT
// Firefox 3: ~3800мс - SpiderMonkey, интерпретатор
// Safari 3: ~1700мс - JavaScriptCore, без JIT
// Opera 9.6: ~1900мс - Carakan (JIT) ещё не вышел
// Chrome 0.2: ~380мс - V8, JIT с первого дня
// Реакция индустрии за 12 месяцев:
// Firefox 3.5 (июнь 2009): TraceMonkey JIT → 1036мс (-73%)
// Safari 4 (февраль 2009): Squirrelfish Extreme → 396мс (-77%)
// Opera 10 (сентябрь 2009): Carakan JIT → ~400мс
// IE 8 (март 2009): нет JIT → 4700мс (всё ещё отстаёт)
// Итог: к концу 2009 браузеры были в 3-8 раз быстрее чем год назад.
// JavaScript стал достаточно быстрым для сложных клиентских приложений.
Process-per-tab: изоляция вкладок
Chrome 2008: каждая вкладка = отдельный процесс ОС
Для разработчиков-пользователей Казнета это означало:
- Зависшая вкладка не убивала браузер
- Вкладки не делили память
Для разработчиков-программистов:
- Нельзя рассчитывать на глобальное состояние браузера
- Каждая вкладка = изолированный JS heap
До Chrome: если один сайт вешал JavaScript → браузер висел весь.
После Chrome: только эта вкладка. Остальные работают.
Это сделало web-приложения значительно надёжнее в восприятии пользователей.
DevTools: профайлер для казахстанских разработчиков
// Chrome DevTools 2008 - инструменты разработчика нового уровня
// CPU Profiler показывал где тратится время:
// Раньше: console.time() / console.timeEnd() вручную везде
// Типичная находка профайлера:
// Казахстанский каталог товаров - медленный рендеринг
// Проблема (не видна без профайлера):
function renderCatalog(products) {
for (var i = 0; i < products.length; i++) {
var div = document.createElement('div');
div.className = 'product-card';
div.innerHTML = '<h3>' + products[i].name + '</h3>';
document.getElementById('catalog').appendChild(div);
// reflow на КАЖДОЙ итерации - 100 товаров = 100 reflow
}
}
// Решение (находится за 5 минут с профайлером):
function renderCatalogFast(products) {
var frag = document.createDocumentFragment();
for (var i = 0; i < products.length; i++) {
var div = document.createElement('div');
div.className = 'product-card';
div.innerHTML = '<h3>' + products[i].name + '</h3>';
frag.appendChild(div); // нет reflow
}
document.getElementById('catalog').appendChild(frag); // один reflow
// Результат: 100 товаров рендерятся в 10x быстрее
}
Chrome в Казахстане: 2008-2010
В Казахстане Chrome распространился быстро среди технически грамотных пользователей. IE 6 и 7 оставались доминирующими в корпоративном секторе (обновления заблокированы IT-политиками), но в молодёжной и технической аудитории - Chrome занял долю за 1-2 года.
К 2010 году казахстанские разработчики должны были тестировать в Chrome, Firefox, IE 7/8, а также Safari и Opera (значительная доля пользователей).
Chrome изменил что было возможным: сложные веб-приложения, которые раньше были медленными, стали быстрыми. Google Docs, сложные дашборды, real-time обновления - всё это стало реалистичным для Казнета.