Движок JavaScript: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
м Бот: удаление шаблона {{не переведено}}
Нет описания правки
Метки: через визуальный редактор с мобильного устройства из мобильной версии
 
(не показаны 22 промежуточные версии 16 участников)
Строка 5: Строка 5:
До 2008-2009 гг. '''движок JavaScript''' (называемый также '''интерпретатор JavaScript''' и '''реализация JavaScript''') реализовывался как [[интерпретатор]], считывающий и исполняющий [[исходный код]] на JavaScript.
До 2008-2009 гг. '''движок JavaScript''' (называемый также '''интерпретатор JavaScript''' и '''реализация JavaScript''') реализовывался как [[интерпретатор]], считывающий и исполняющий [[исходный код]] на JavaScript.


Первый движок JavaScript создан [[Айх, Брендан|Бренданом Айхом]] в [[Netscape Communications]] для браузера [[Netscape Navigator]]. Движок получил кодовое имя [[SpiderMonkey]] и был реализован на [[Си (язык программирования)|языке программирования Си]]. Впоследствии он обновлялся и в отношении него была достигнута совместимость с третьей редакцией спецификации ECMA-262. Движок JavaScript [[Rhino]] написан преимущественно Норрисом Бойдом ({{lang-en|Norris Boyd}} (тоже из Netscape) и представляет собой реализацию JavaScript на языке программирования [[Java]]. Как и SpiderMonkey, Rhino совместим с третьей редакцией спецификации ECMA-262. С данной спецификацией также совместимы Nitro из Apple Safari, V8 из [[Google Chrome]] и TraceMonkey из Mozilla Firefox 3.5.
Первый движок JavaScript создан [[Айх, Брендан|Бренданом Айхом]] в [[Netscape Communications]] для браузера [[Netscape Navigator]]. Движок получил кодовое имя [[SpiderMonkey]] и был реализован на языке программирования Си. Впоследствии он обновлялся и в отношении него была достигнута совместимость с третьей редакцией спецификации ECMA-262. Движок JavaScript [[Rhino]] написан преимущественно Норрисом Бойдом ({{lang-en|Norris Boyd}} (тоже из Netscape) и представляет собой реализацию JavaScript на языке программирования [[Java]]. Как и SpiderMonkey, Rhino совместим с третьей редакцией спецификации ECMA-262. С данной спецификацией также совместимы Nitro из Apple Safari, V8 из [[Google Chrome]] и TraceMonkey из Mozilla Firefox 3.5.


Наиболее распространённой средой исполнения JavaScript является браузер. Как правило браузеры предоставляют открытый [[API]] для создания объектов среды исполнения ({{lang-en|host objects}}), предоставляющих возможность работы с [[Document Object Model|DOM]] в JavaScript.
Наиболее распространённой средой исполнения JavaScript является браузер. Как правило, браузеры предоставляют открытый [[API]] для создания объектов среды исполнения ({{lang-en|host objects}}), предоставляющих возможность работы с [[Document Object Model|DOM]] в JavaScript.


Другой распространненой средой исполнения JavaScript является [[веб-сервер]]. Веб-сервер, поддерживающий JavaScript, предоставляет объекты среды исполнения, представляющие [[HTTP]]-запрос и HTTP-ответ. Манипулируя этими объектами, программа на JavaScript может динамически генерировать страницы. Например, технология [[Active Server Pages|ASP]] для веб-сервера [[IIS]] позволяет реализовывать серверную часть в том числе и на языке программирования [[JScript]] (реализация JavaScript от компании Microsoft). Другой пример это веб-сервер {{не переведено|есть=:en:Jaxer|надо=Jaxer}}, предоставляющий помимо объектов традиционных для серверов еще и объекты традиционные для браузеров. Преимуществом такого подхода является то, что один и тот же код может быть разделён между сервером и клиентом.
Другой распространённой средой исполнения JavaScript является [[веб-сервер]]. Веб-сервер, поддерживающий JavaScript, предоставляет объекты среды исполнения, представляющие [[HTTP]]-запрос и HTTP-ответ. Манипулируя этими объектами, программа на JavaScript может динамически генерировать страницы. Например, технология [[Active Server Pages|ASP]] для веб-сервера [[IIS]] позволяет реализовывать серверную часть в том числе и на языке программирования [[JScript]] (реализация JavaScript от компании Microsoft). Другой пример - это веб-сервер {{не переведено|Jaxer||en|Jaxer}}, предоставляющий помимо объектов, традиционных для серверов, еще и объекты, традиционные для браузеров. Преимуществом такого подхода является то, что один и тот же код может быть разделён между сервером и клиентом.


== Движки JavaScript ==
== Движки JavaScript ==
Строка 23: Строка 23:


=== Другие ===
=== Другие ===
* {{не переведено|есть=:en:KDE's JavaScript engine|надо=KJS}} — ECMAScript/JavaScript-движок среды рабочего стола [[KDE]], изначально разработанный {{не переведено|есть=:en:Harri Porten|надо=Портен, Гарри|текст=Гарри Портеном}} для браузера [[Konqueror]]
* {{не переведено|KJS||en|KDE's JavaScript engine}} — ECMAScript/JavaScript-движок среды рабочего стола [[KDE]], изначально разработанный {{не переведено|Портен, Гарри|Гарри Портеном|en|Harri Porten}} для браузера [[Konqueror]]
* {{не переведено|есть=:en:Narcissus (JavaScript engine)|надо=Narcissus (движок JavaScript)|текст=Narcissus}} — движок JavaScript с открытым исходным кодом, написанный Бренданом Айхом также на JavaScript'е
* {{не переведено|Narcissus (движок JavaScript)|Narcissus|en|Narcissus (JavaScript engine)}} — движок JavaScript с открытым исходным кодом, написанный Бренданом Айхом также на JavaScript'е
* [[Tamarin]] от [[Adobe Systems]]
* [[Tamarin]] от [[Adobe Systems]]
* Nitro (изначально [[SquirrelFish]]) — движок JavaScript в [[Safari 4]]
* Nitro (изначально [[SquirrelFish]]) — движок JavaScript в [[Safari 4]]
* [[Chakra (движок JavaScript)|Chakra]] в [[Internet Explorer 9]]<ref>{{cite web
* [[Chakra (движок JavaScript)|Chakra]] в [[Internet Explorer 9]]<ref>{{cite web
| last = Oiaga
|last = Oiaga
| first = Marius
|first = Marius
| date = 2010-03-20
|date = 2010-03-20
| url = http://news.softpedia.com/news/Internet-Explorer-9-Beta-Next-New-IE9-Builds-Every-8-Weeks-138013.shtml
|url = http://news.softpedia.com/news/Internet-Explorer-9-Beta-Next-New-IE9-Builds-Every-8-Weeks-138013.shtml
| title = Internet Explorer 9 Beta Next – New IE9 Builds Every 8 Weeks
|title = Internet Explorer 9 Beta Next – New IE9 Builds Every 8 Weeks
| work = softpedia.com
|work = softpedia.com
| publisher = SoftNews NET SRL
|publisher = SoftNews NET SR
| accessdate = 2010-06-30
|accessdate = 2010-06-30
| lang = en
|lang = en
| archiveurl = http://www.webcitation.org/67KMEkgUi
|archiveurl = https://www.webcitation.org/67KMEkgUi?url=http://news.softpedia.com/news/Internet-Explorer-9-Beta-Next-New-IE9-Builds-Every-8-Weeks-138013.shtml
| archivedate = 2012-05-01
|archivedate = 2012-05-01
}}</ref>.
}}</ref>.
* [[Presto (Opera)#Движки на JavaScript|Carakan]] от [[Opera Software]], используется в [[Opera]], начиная с версии 10.50.
* [[Presto (Opera)#Движки на JavaScript|Carakan]] от [[Opera Software]], используется в [[Opera]], начиная с версии 10.55


=== Эволюция производительности ===
=== Эволюция производительности ===
В [[Mozilla Firefox 3.5|Firefox 3.5]] (выпущен 30 июня 2009 года) используется техника оптимизации, предполагающая «в некоторых случаях улучшение производительности в 20-40 раз»<ref>{{cite web
В [[Mozilla Firefox 3.5|Firefox 3.5]] (выпущен 30 июня 2009 года) используется техника оптимизации, предполагающая «в некоторых случаях улучшение производительности в 20-40 раз»<ref>{{cite web
| last = Ryan
|last = Ryan
| first = Paul
|first = Paul
| date = 2008-08-22
|date = 2008-08-22
| url = http://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html
|url = https://arstechnica.com/news.ars/post/20080822-firefox-to-get-massive-javascript-performance-boost.html
| title = Firefox to get massive JavaScript performance boost
|title = Firefox to get massive JavaScript performance boost
| work = arstechnica.com
|work = arstechnica.com
| publisher = Ars Technica © 2010 Condé Nast Digital
|publisher = Ars Technica © 2010 Condé Nast Digital
| accessdate = 2010-06-30
|accessdate = 2010-06-30
| lang = en
|lang = en
| archiveurl = http://www.webcitation.org/67KMFkpng
|archiveurl = https://www.webcitation.org/67KMFkpng?url=http://arstechnica.com/open-source/news/2008/08/firefox-to-get-massive-javascript-performance-boost.ars
| archivedate = 2012-05-01
|archivedate = 2012-05-01
}}</ref>.
}}</ref>.


2 июня 2008 года команда разработчиков WebKit представила SquirrelFish<ref>{{cite web|first=Geoffrey|last=Garen|title=Announcing SquirrelFish|url=http://webkit.org/blog/189/announcing-squirrelfish/|date=2008-06-02|accessdate=2008-06-30|archiveurl=http://www.webcitation.org/67KMGLp7V|archivedate=2012-05-01}}</ref> — новый движок JavaScript, в котором достигалось значительное улучшение скорости интерпретирования скриптов браузером Safari<ref>{{cite web|first=Vygantas|last=Lipskas|title=Apple Safari 4|url=http://www.favbrowser.com/apple-safari-4/|date=2008-06-11|accessdate=2008-06-30|archiveurl=http://www.webcitation.org/67KMGw5ko|archivedate=2012-05-01}}</ref>. Этот движок был одной из новых возможностей Safari 4. Тестовая версия появилась 11 июня 2008 года; в итоге движок был переименован в Nitro.
2 июня 2008 года команда разработчиков WebKit представила SquirrelFish<ref>{{cite web|first=Geoffrey|last=Garen|title=Announcing SquirrelFish|url=http://webkit.org/blog/189/announcing-squirrelfish/|date=2008-06-02|accessdate=2008-06-30|archiveurl=https://www.webcitation.org/67KMGLp7V?url=http://www.webkit.org/blog/189/announcing-squirrelfish/|archivedate=2012-05-01}}</ref> — новый движок JavaScript, в котором достигалось значительное повышение скорости интерпретирования скриптов браузером Safari<ref>{{cite web|first=Vygantas|last=Lipskas|title=Apple Safari 4|url=http://www.favbrowser.com/apple-safari-4/|date=2008-06-11|accessdate=2008-06-30|archiveurl=https://www.webcitation.org/67KMGw5ko?url=http://www.favbrowser.com/apple-safari-4/|archivedate=2012-05-01}}</ref>. Этот движок был одной из новых возможностей Safari 4. Тестовая версия появилась 11 июня 2008 года; в итоге движок был переименован в Nitro.


С тех пор началась гонка разработчиков браузеров по увеличению скорости движков JavaScript. С 2008 года пальму первенства в ней удерживает [[Google Chrome]]: это подтверждает множество независимых экспериментов<ref>{{cite web|url=http://news.cnet.com/8301-1001_3-10030888-92.html|title=Speed test: Google Chrome beats Firefox, IE, Safari|author=Stephen Shankland|work=cnet.com Business Tech|date=2008-09-02|publisher={{не переведено|есть=:en:CNET News|надо=CNET News}}|accessdate=2010-06-28|archiveurl=http://www.webcitation.org/67KMHWqXu|archivedate=2012-05-01}}</ref><ref>{{cite web
С тех пор началась гонка разработчиков браузеров по увеличению скорости движков JavaScript. С 2008 года пальму первенства в ней удерживает [[Google Chrome]]: это подтверждает множество независимых экспериментов<ref>{{cite web|url=http://news.cnet.com/8301-1001_3-10030888-92.html|title=Speed test: Google Chrome beats Firefox, IE, Safari|author=Stephen Shankland|work=cnet.com Business Tech|date=2008-09-02|publisher={{не переведено|CNET News||en|CNET News}}|accessdate=2010-06-28|archiveurl=https://www.webcitation.org/67KMHWqXu?url=http://news.cnet.com/8301-1001_3-10030888-92.html|archivedate=2012-05-01}}</ref><ref>{{cite web
| last = Riemann
|last = Riemann
| first = Link
|first = Link
| date = 2009-07-03
|date = 2009-07-03
| url = http://www.pcgameshardware.com/aid,687738/Big-browser-comparison-test-Internet-Explorer-vs-Firefox-Opera-Safari-and-Chrome-Update-Firefox-35-Final/Practice/
|url = http://www.pcgameshardware.com/aid,687738/Big-browser-comparison-test-Internet-Explorer-vs-Firefox-Opera-Safari-and-Chrome-Update-Firefox-35-Final/Practice/
| title = Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome - Update: Firefox 3.5 Final
|title = Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome - Update: Firefox 3.5 Final
| work = PC Games Hardware
|work = PC Games Hardware
| publisher = Computec Media AG
|publisher = Computec Media AG
| accessdate = 2010-06-30
|accessdate = 2010-06-30
| lang = en
|lang = en
| archiveurl = http://www.webcitation.org/67KMIRyMC
|archiveurl = https://www.webcitation.org/67KMIRyMC?url=http://www.pcgameshardware.com/aid,687738/Big-browser-comparison-test-Internet-Explorer-vs-Firefox-Opera-Safari-and-Chrome-Update-Firefox-35-Final/Practice/
| archivedate = 2012-05-01
|archivedate = 2012-05-01
}}</ref><ref>{{cite web
}}</ref><ref>{{cite web
| last = Purdy
|last = Purdy
| first = Kevin
|first = Kevin
| date = 2009-11-06
|date = 2009-11-06
| url = http://lifehacker.com/5286869/lifehacker-speed-tests-safari-4-chrome-2-and-more
|url = http://lifehacker.com/5286869/lifehacker-speed-tests-safari-4-chrome-2-and-more
| title = Lifehacker Speed Tests: Safari 4, Chrome 2, and More
|title = Lifehacker Speed Tests: Safari 4, Chrome 2, and More
| publisher = Lifehacker
|publisher = Lifehacker
| accessdate = 2010-06-30
|accessdate = 2010-06-30
| lang = en
|lang = en
| archiveurl = http://www.webcitation.org/67KML6P01
|archiveurl = https://www.webcitation.org/67KML6P01?url=http://lifehacker.com/5286869/lifehacker-speed-tests-safari-4-chrome-2-and-more
| archivedate = 2012-05-01
|archivedate = 2012-05-01
}}</ref>. С появлением Squirrelfish Extreme от разработчиков WebKit и [[Tracemonkey]] от Mozilla, производительность JavaScript в Google Chrome перестала расцениваться как самая высокая<ref>{{cite web
}}</ref>. С появлением Squirrelfish Extreme от разработчиков WebKit и [[Tracemonkey]] от Mozilla производительность JavaScript в Google Chrome перестала расцениваться как самая высокая<ref>{{cite web
| author = Stephen Shankland, CNET News.com
|author = Stephen Shankland, CNET News.com
| date = 2008-11-03
|date = 2008-11-03
| url = http://www.builderau.com.au/news/soa/Third-Chrome-beta-another-notch-faster/0,339028227,339292979,00.htm?feed=pt_performance
|url = http://www.builderau.com.au/news/soa/Third-Chrome-beta-another-notch-faster/0,339028227,339292979,00.htm?feed=pt_performance
| title = Third Chrome beta another notch faster
|title = Third Chrome beta another notch faster
| publisher = Builder AU
|publisher = Builder AU
| accessdate = 2010-06-30
|accessdate = 2010-06-30
| lang = en
|lang = en
| archiveurl = http://www.webcitation.org/67KMLuhXt
|archiveurl = https://www.webcitation.org/67KMLuhXt?url=http://news.cnet.com/third-chrome-beta-another-notch-faster/
| archivedate = 2012-05-01
|archivedate = 2012-05-01
}}</ref><ref>[http://www.builderau.com.au/news/soa/Step-aside-Chrome-for-Squirrelfish-Extreme/0,339028227,339292128,00.htm?feed=pt_performance Step aside, Chrome, for Squirrelfish Extreme — News], Builder AU</ref><ref>{{cite web
}}</ref><ref>[http://www.builderau.com.au/news/soa/Step-aside-Chrome-for-Squirrelfish-Extreme/0,339028227,339292128,00.htm?feed=pt_performance Step aside, Chrome, for Squirrelfish Extreme — News] {{Wayback|url=http://www.builderau.com.au/news/soa/Step-aside-Chrome-for-Squirrelfish-Extreme/0,339028227,339292128,00.htm?feed=pt_performance |date=20091006214858 }}, Builder AU</ref><ref>{{cite web
| last = Ying
|last = Ying
| first = Charles
|first = Charles
| date = 2008-09-19
|date = 2008-09-19
| url = http://www.satine.org/archives/2008/09/19/squirrelfish-extreme-fastest-javascript-engine-yet/
|url = http://www.satine.org/archives/2008/09/19/squirrelfish-extreme-fastest-javascript-engine-yet/
| title = SquirrelFish Extreme: Fastest JavaScript Engine Yet
|title = SquirrelFish Extreme: Fastest JavaScript Engine Yet
| accessdate = 2010-06-30
|accessdate = 2010-06-30
| lang = en
|lang = en
| archiveurl = http://www.webcitation.org/67KMMhbGA
|archiveurl = https://www.webcitation.org/67KMMhbGA?url=http://www.satine.org/archives/2008/09/19/squirrelfish-extreme-fastest-javascript-engine-yet/
| archivedate = 2012-05-01
|archivedate = 2012-05-01
}}</ref><ref>{{cite web
}}</ref><ref>{{cite web
| last = Shankland
|last = Shankland
| first = Stephen
|first = Stephen
| date = 2008-09-03
|date = 2008-09-03
| url = http://news.cnet.com/8301-1001_3-10031278-92.html
|url = http://news.cnet.com/8301-1001_3-10031278-92.html
| title = Firefox counters Google's browser speed test
|title = Firefox counters Google's browser speed test
| publisher = {{не переведено|есть=:en:CNET News|надо=CNET News}}
|publisher = {{не переведено|CNET News||en|CNET News}}
| accessdate = 2010-06-30
|accessdate = 2010-06-30
| lang = en
|lang = en
|archiveurl=http://www.webcitation.org/67KMNJo0Z|archivedate=2012-05-01}}</ref>. Однако датское подразделение Google разработало [[V8 (движок JavaScript)|движок JavaScript V8]], со значительно увеличенной производительностью JavaScript в Google Chrome 2.
|archiveurl = https://www.webcitation.org/67KMNJo0Z?url=http://news.cnet.com/8301-1001_3-10031278-92.html
|archivedate = 2012-05-01
}}</ref>. Однако датское подразделение Google разработало [[V8 (движок JavaScript)|движок JavaScript V8]] со значительно увеличенной производительностью JavaScript в Google Chrome 2.


Как правило, браузер имеет [[браузерный движок]], занимающийся отрисовкой страниц, и движок JavaScript, что упрощает тестирование, переиспользование или использование в других проектах. Например, Caracan используется с Presto, Nitro с WebKit, Rhino и SpiderMonkey с Gecko, KJS с KHTML, по умолчанию, ни с одним из браузерных движков не используется. Иногда возможны другие комбинации, например, V8 с WebKit в Google Chrome. Движок JavaScript позволяет разработчикам получить доступ к функциональности (работа с сетью, с DOM, с внешними событиями, с HTML5 video, canvas, storage), необходимой для управлением веб-браузером.
Как правило, браузер имеет [[браузерный движок]], занимающийся отрисовкой страниц, и движок JavaScript, что упрощает тестирование, переиспользование или использование в других проектах. Например, Caracan используется с Presto, Nitro с WebKit, SpiderMonkey с Gecko, KJS с KHTML, Rhino по умолчанию ни с одним из браузерных движков не используется. Иногда возможны другие комбинации, например, V8 с WebKit в Google Chrome. Движок JavaScript позволяет разработчикам получить доступ к функциональности (работа с сетью, с DOM, с внешними событиями, с HTML5 video, canvas, storage), необходимой для управления веб-браузером.


Sunspider — {{не переведено|есть=:en:Browser speed test|нужно=инструмент тестирования производительности браузера}}, используемый для измерения производительности движков JavaScript в более чем дюжине тестов, каждый из которых заточен на отдельную часть языка JavaScript. Sunspider не предназначен для тестирования возможностей, связанных с чем-то помимо вычислений (HTML, CSS, работа с сетью).
Sunspider — {{не переведено|инструмент тестирования производительности браузера||en|Browser speed test}}, используемый для измерения производительности движков JavaScript в более чем дюжине тестов, каждый из которых заточен на отдельную часть языка JavaScript. Sunspider не предназначен для тестирования возможностей, связанных с чем-то помимо вычислений (HTML, CSS, работа с сетью).


== Реализации ==
== Реализации ==
JavaScript — диалект [[ECMAScript]], поддерживаемый многими приложениями, в частности, браузерами. Диалекты иногда включают расширения языка или [[Стандартная библиотека|стандартную библиотеку]] и соответствующие {{abbr|API|Интерфейс программирования приложений|2}}, такие как [[Document Object Model]] от [[Консорциум Всемирной паутины|W3C]]. Это означает, что приложения, написанные для одного диалекта могут быть несовместимы с другим, если только они не используют общее подмножество поддерживаемых возможностей и API.
JavaScript — диалект [[ECMAScript]], поддерживаемый многими приложениями, в частности, браузерами. Диалекты иногда включают расширения языка или [[Стандартная библиотека|стандартную библиотеку]] и соответствующие {{abbr|API|Интерфейс программирования приложений|2}}, такие как [[Document Object Model]] от [[Консорциум Всемирной паутины|W3C]]. Это означает, что приложения, написанные для одного диалекта, могут быть несовместимы с другими, если только они не используют общее подмножество поддерживаемых возможностей и API.


Нет чёткой разницы между диалектом и реализацией. Диалект языка — это вариация языка с существенными особенностями в то время как реализация языка/диалекта выполняет программу, написанную на этом диалекте.
Нет чёткой разницы между диалектом и реализацией. Диалект языка — это вариация языка с существенными особенностями в то время как реализация языка/диалекта выполняет программу, написанную на этом диалекте.
Строка 137: Строка 139:
|-
|-
|[[Opera]]
|[[Opera]]
|ECMAScript с некоторыми расширениями [[JavaScript]] 1.5<br />и [[JScript]]<ref>{{cite web|url=http://www.opera.com/docs/specs/#ecmascript|title=Web specifications support in Opera Presto|work=Opera.com|publisher=Opera Software ASA|accessdate=2010-06-28|archiveurl=http://www.webcitation.org/5w4GdPQS2|archivedate=2011-01-28}}</ref>
|ECMAScript с некоторыми расширениями [[JavaScript]] 1.5<br />и [[JScript]]<ref>{{cite web|url=http://www.opera.com/docs/specs/#ecmascript|title=Web specifications support in Opera Presto|work=Opera.com|publisher=Opera Software ASA|accessdate=2010-06-28|archiveurl=https://www.webcitation.org/5w4GdPQS2?url=http://www.opera.com/docs/specs/#ecmascript|archivedate=2011-01-28}}</ref>
|ECMA-262, редакция 5.1
|ECMA-262, редакция 5.1
|-
|-
Строка 152: Строка 154:
|ECMA-262, редакция 3
|ECMA-262, редакция 3
|-
|-
|{{не переведено|есть=:en:Max/MSP|надо=Max/MSP}}
|{{не переведено|Max/MSP||en|Max/MSP}}
|[[JavaScript]] 1.5
|[[JavaScript]] 1.5
|ECMA-262, редакция 3
|ECMA-262, редакция 3
|-
|-
|{{не переведено|есть=:en:Fresco (web browser)|надо=Fresco (браузер)|текст=ANT Galio 3}}
|{{не переведено|Fresco (браузер)|ANT Galio 3|en|Fresco (web browser)}}
|[[JavaScript]] 1.5 с расширениями [[Rich Media Access Interface|RMAI]]
|[[JavaScript]] 1.5 с расширениями [[Rich Media Access Interface|RMAI]]
|ECMA-262, редакция 3
|ECMA-262, редакция 3
Строка 167: Строка 169:
* [http://www.speed-battle.com Speed-Battle] — онлайн-тест скорости выполнения JavaScript в браузерах
* [http://www.speed-battle.com Speed-Battle] — онлайн-тест скорости выполнения JavaScript в браузерах


{{JavaScript}}

{{ECMAScript}}
{{ECMAScript}}

{{DEFAULTSORT:Javascript Engine}}
[[Категория:JavaScript]]
[[Категория:Движки JavaScript]]
[[Категория:Браузеры]]

Текущая версия от 22:22, 17 августа 2023

Движок JavaScript — специализированная программа, обрабатывающая JavaScript, в частности, в браузерах.

До 2008-2009 гг. движок JavaScript (называемый также интерпретатор JavaScript и реализация JavaScript) реализовывался как интерпретатор, считывающий и исполняющий исходный код на JavaScript.

Первый движок JavaScript создан Бренданом Айхом в Netscape Communications для браузера Netscape Navigator. Движок получил кодовое имя SpiderMonkey и был реализован на языке программирования Си. Впоследствии он обновлялся и в отношении него была достигнута совместимость с третьей редакцией спецификации ECMA-262. Движок JavaScript Rhino написан преимущественно Норрисом Бойдом (англ. Norris Boyd (тоже из Netscape) и представляет собой реализацию JavaScript на языке программирования Java. Как и SpiderMonkey, Rhino совместим с третьей редакцией спецификации ECMA-262. С данной спецификацией также совместимы Nitro из Apple Safari, V8 из Google Chrome и TraceMonkey из Mozilla Firefox 3.5.

Наиболее распространённой средой исполнения JavaScript является браузер. Как правило, браузеры предоставляют открытый API для создания объектов среды исполнения (англ. host objects), предоставляющих возможность работы с DOM в JavaScript.

Другой распространённой средой исполнения JavaScript является веб-сервер. Веб-сервер, поддерживающий JavaScript, предоставляет объекты среды исполнения, представляющие HTTP-запрос и HTTP-ответ. Манипулируя этими объектами, программа на JavaScript может динамически генерировать страницы. Например, технология ASP для веб-сервера IIS позволяет реализовывать серверную часть в том числе и на языке программирования JScript (реализация JavaScript от компании Microsoft). Другой пример - это веб-сервер Jaxer[англ.], предоставляющий помимо объектов, традиционных для серверов, еще и объекты, традиционные для браузеров. Преимуществом такого подхода является то, что один и тот же код может быть разделён между сервером и клиентом.

Движки JavaScript

[править | править код]

Основные движки JavaScript:

  • V8 — движок JavaScript с открытым исходным кодом, разрабатываемый датским отделением компании Google. Используется в браузерах на основе Chromium, а также в Maxthon 3.

Эволюция производительности

[править | править код]

В Firefox 3.5 (выпущен 30 июня 2009 года) используется техника оптимизации, предполагающая «в некоторых случаях улучшение производительности в 20-40 раз»[2].

2 июня 2008 года команда разработчиков WebKit представила SquirrelFish[3] — новый движок JavaScript, в котором достигалось значительное повышение скорости интерпретирования скриптов браузером Safari[4]. Этот движок был одной из новых возможностей Safari 4. Тестовая версия появилась 11 июня 2008 года; в итоге движок был переименован в Nitro.

С тех пор началась гонка разработчиков браузеров по увеличению скорости движков JavaScript. С 2008 года пальму первенства в ней удерживает Google Chrome: это подтверждает множество независимых экспериментов[5][6][7]. С появлением Squirrelfish Extreme от разработчиков WebKit и Tracemonkey от Mozilla производительность JavaScript в Google Chrome перестала расцениваться как самая высокая[8][9][10][11]. Однако датское подразделение Google разработало движок JavaScript V8 со значительно увеличенной производительностью JavaScript в Google Chrome 2.

Как правило, браузер имеет браузерный движок, занимающийся отрисовкой страниц, и движок JavaScript, что упрощает тестирование, переиспользование или использование в других проектах. Например, Caracan используется с Presto, Nitro с WebKit, SpiderMonkey с Gecko, KJS с KHTML, Rhino по умолчанию ни с одним из браузерных движков не используется. Иногда возможны другие комбинации, например, V8 с WebKit в Google Chrome. Движок JavaScript позволяет разработчикам получить доступ к функциональности (работа с сетью, с DOM, с внешними событиями, с HTML5 video, canvas, storage), необходимой для управления веб-браузером.

Sunspider — инструмент тестирования производительности браузера[англ.], используемый для измерения производительности движков JavaScript в более чем дюжине тестов, каждый из которых заточен на отдельную часть языка JavaScript. Sunspider не предназначен для тестирования возможностей, связанных с чем-то помимо вычислений (HTML, CSS, работа с сетью).

Реализации

[править | править код]

JavaScript — диалект ECMAScript, поддерживаемый многими приложениями, в частности, браузерами. Диалекты иногда включают расширения языка или стандартную библиотеку и соответствующие API, такие как Document Object Model от W3C. Это означает, что приложения, написанные для одного диалекта, могут быть несовместимы с другими, если только они не используют общее подмножество поддерживаемых возможностей и API.

Нет чёткой разницы между диалектом и реализацией. Диалект языка — это вариация языка с существенными особенностями в то время как реализация языка/диалекта выполняет программу, написанную на этом диалекте.

Приложение Диалект и последняя версия Редакция ECMAScript
Google Chrome, движок V8 JavaScript ECMA-262, редакция 5
Mozilla Firefox, Gecko, SpiderMonkey и Rhino JavaScript 1.8.1 ECMA-262, редакция 5
Opera ECMAScript с некоторыми расширениями JavaScript 1.5
и JScript[12]
ECMA-262, редакция 5.1
KHTML layout engine, Konqueror из KDE и Safari от Apple JavaScript 1.5 ECMA-262, редакция 3
Adobe Acrobat JavaScript 1.5 ECMA-262, редакция 3
Платформа OpenLaszlo JavaScript 1.4 ECMA-262, редакция 3
Max/MSP[англ.] JavaScript 1.5 ECMA-262, редакция 3
ANT Galio 3[англ.] JavaScript 1.5 с расширениями RMAI ECMA-262, редакция 3

Примечания

[править | править код]
  1. Oiaga, Marius. Internet Explorer 9 Beta Next – New IE9 Builds Every 8 Weeks (англ.). softpedia.com. SoftNews NET SR (20 марта 2010). Дата обращения: 30 июня 2010. Архивировано 1 мая 2012 года.
  2. Ryan, Paul. Firefox to get massive JavaScript performance boost (англ.). arstechnica.com. Ars Technica © 2010 Condé Nast Digital (22 августа 2008). Дата обращения: 30 июня 2010. Архивировано 1 мая 2012 года.
  3. Garen, Geoffrey. Announcing SquirrelFish (2 июня 2008). Дата обращения: 30 июня 2008. Архивировано 1 мая 2012 года.
  4. Lipskas, Vygantas. Apple Safari 4 (11 июня 2008). Дата обращения: 30 июня 2008. Архивировано 1 мая 2012 года.
  5. Stephen Shankland. Speed test: Google Chrome beats Firefox, IE, Safari. cnet.com Business Tech. CNET News[англ.] (2 сентября 2008). Дата обращения: 28 июня 2010. Архивировано 1 мая 2012 года.
  6. Riemann, Link. Big browser comparison test: Internet Explorer vs. Firefox, Opera, Safari and Chrome - Update: Firefox 3.5 Final (англ.). PC Games Hardware. Computec Media AG (3 июля 2009). Дата обращения: 30 июня 2010. Архивировано 1 мая 2012 года.
  7. Purdy, Kevin. Lifehacker Speed Tests: Safari 4, Chrome 2, and More (англ.). Lifehacker (6 ноября 2009). Дата обращения: 30 июня 2010. Архивировано 1 мая 2012 года.
  8. Stephen Shankland, CNET News.com. Third Chrome beta another notch faster (англ.). Builder AU (3 ноября 2008). Дата обращения: 30 июня 2010. Архивировано 1 мая 2012 года.
  9. Step aside, Chrome, for Squirrelfish Extreme — News Архивная копия от 6 октября 2009 на Wayback Machine, Builder AU
  10. Ying, Charles. SquirrelFish Extreme: Fastest JavaScript Engine Yet (англ.) (19 сентября 2008). Дата обращения: 30 июня 2010. Архивировано 1 мая 2012 года.
  11. Shankland, Stephen. Firefox counters Google's browser speed test (англ.). CNET News[англ.] (3 сентября 2008). Дата обращения: 30 июня 2010. Архивировано 1 мая 2012 года.
  12. Web specifications support in Opera Presto. Opera.com. Opera Software ASA. Дата обращения: 28 июня 2010. Архивировано 28 января 2011 года.
  • Speed-Battle — онлайн-тест скорости выполнения JavaScript в браузерах