The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

20.12.2013 13:26  Новые оптимизации в Firefox сократили разрыв в производительности JavaScript и компилируемых языков

Разработчики Mozilla сообщили о реализации в JavaScript-движке SpiderMonkey новой оптимизации операций с плавающей запятой (float32), которая позволила достигнуть нового уровня производительности web-приложений, использующих подмножество Asm.js. Тестирование производительности показало, что выполняемое в новой сборке Firefox JavaScript-приложение выполняется примерно в 1.5 раза медленнее, чем скомпилированная в машинный код реализация того же алгоритма на языке Си. До внесения оптимизации наблюдалось расхождение производительности в два раза.

Ускорение наблюдается и при выполнении обычного JavaScript-кода, особенно использующего специализированные вызовы Math.fround(), поддержка которых будет добавлена в Firefox 26. Тем не менее, наибольший эффект достигается при применении нового типа float32 в Asm.js, низкоуровневом подмножестве языка JavaScript со строгой типизацией, которое полностью совместимо с обычным JavaScript и может выполняться в любых браузерах. Если браузер не поддерживает Asm.js, то код выполняется как обычный JavaScript, а если поддерживает - включается дополнительный оптимизирующий модуль, учитывающий добавленные в код аннотации. Наличие информации о типах позволяет использовать не только JIT, но и предварительную AOT-компиляцию, выполняемую для всего кода до начала его выполнения и генерирующую более простой и эффективный машинный код. При этом, в отличие от JIT-компиляции, Asm.js обеспечивает предсказуемую производительность и не зависит от сборщика мусора.

В настоящее время Asm.js используется в web-приложениях, автоматически преобразованных в JavaScript с языков C/C++ при помощи таких инструментов, как Emscripten и Mandreel. Для более эффективного использования новых оптимизаций в компилятор Emscripten уже добавлена логика, направленная на более активное использование типа float32 вместо менее эффективного типа float64. При этом оптимизации пока не включены по умолчанию в Emscripten, так как ещё не решены некоторые сопутствующие проблемы, такие как увеличение размера итоговой программы и замедление в некоторых специфичных ситуациях.

Примечательно, что по тестам разработчиков JavaScript-код, непосредственно манипулирующий 32-разрядными вычислениями с плавающей точкой, за счёт предкомпиляции выполняется с использованием движка SpiderMonkey иногда даже быстрее, чем те же вычисления в программе, полученной в результате компиляции в GCC или Clang. Общий уровень производительности Asm.js приближается к значениям, не сильно расходящимся с показателями на которое разные нативные компиляторы отличаются между собой (например, производительность clang и gcc в тестах box2d и copy расходится почти в два раза).

  1. Главная ссылка к новости (https://hacks.mozilla.org/2013...)
  2. OpenNews: Началось ограниченное бета-тестирование Duetto, компилятора из C++ в JavaScript
  3. OpenNews: Релиз Firefox 22 с поддержкой Asm.js
  4. OpenNews: Представлен ORBX.js - сравнимый с H.264 видеокодек, реализованный целиком на JavaScript
  5. OpenNews: Представлен Portable Native Client для запуска платформонезависимых C/C++ программ в браузере
  6. OpenNews: В Firefox 22 появится Asm.js, низкоуровневое высокопроизводительное подмножество JavaScript
Лицензия: CC-BY
Тип: К сведению
Ключевые слова: asm.js, javascript, firefox
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.4, meequz, 14:33, 20/12/2013 [ответить] [смотреть все]
  • +8 +/
    Сначала изобрели интерпретируемые языки, потом написали для них компиляторы, круто.
     
     
  • 2.33, Xasd, 15:59, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]
  • +1 +/
    компиляторы не для интерпретируемых языков же Emscripten -- это компилято... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.70, Аноним, 18:30, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    а чем оно является ... весь текст скрыт [показать]
     
     
  • 4.92, Аноним, 21:13, 20/12/2013 [^] [ответить] [смотреть все]  
  • –1 +/
    Метакодом ... весь текст скрыт [показать]
     
     
  • 5.99, Аноним, 21:17, 20/12/2013 [^] [ответить] [смотреть все]  
  • –5 +/
    > Метакодом.

    В воздухе повеяло метафизикой, торсионщиной и памятью воды...

     
  • 3.71, Аноним, 18:35, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Наоборот Компилятор преобразует компилируемый язык в ту или иную форму объектно... весь текст скрыт [показать]
     
     
  • 4.141, Xasd, 19:29, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    ну эт да можно и так выразиться ... весь текст скрыт [показать]
     
  • 2.118, Аноним, 12:56, 21/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ну так сначала создали себе проблемы, потом стали их героически решать Продолжа... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.148, Аноним, 19:59, 22/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Какая разница, как нормировать?
     
     
  • 4.150, Аноним, 11:31, 23/12/2013 [^] [ответить] [смотреть все]  
  • +1 +/
    Ну как какая Слабых бить проще Поэтому с нормальным компилером си они зарубить... весь текст скрыт [показать]
     
  • 1.5, pv47, 14:34, 20/12/2013 [ответить] [смотреть все]  
  • +11 +/
    Осталось ещё сократить разрыв в потреблении памяти.
     
     
  • 2.119, Аноним, 12:58, 21/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    И перестать мухлевать А то даже немолодой GCC 4 6 заметно обидел в бенчах шланг... весь текст скрыт [показать] [показать ветку]
     
  • 1.9, FSA, 14:41, 20/12/2013 [ответить] [смотреть все]  
  • +/
    > JavaScript-приложение выполняется примерно в 1.5 раза медленнее, чем скомпилированная в машинный код реализация того же алгоритма на языке Си

    Может всё-таки при написании алгоритма логичнее использовать особенности определённого языка?

     
     
  • 2.82, Lain_13, 20:33, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +4 +/
    Тут имеется в виду то, что берут один и тот же сорс, компилируют его в бинарник ... весь текст скрыт [показать] [показать ветку]
     
  • 1.11, Аноним, 14:45, 20/12/2013 [ответить] [смотреть все]  
  • –4 +/
    ассемблер в жабаскрипте ?
    это революционно
     
     
  • 2.13, Аноним, 14:54, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +6 +/
    нет, это баян.
     
  • 1.18, Аноним, 15:24, 20/12/2013 [ответить] [смотреть все]  
  • +/
    Это с учётом первого прогона asm.js?
     
  • 1.25, Xasd, 15:33, 20/12/2013 [ответить] [смотреть все]  
  • +4 +/
    то что AsmJs будут улучшать (в плане производительности) -- этого следовало ожидать.

    Nacl\PNacl становится всё менее и менее перспективным. гемороя куча при разработке web-программ, а производительность такая же как в AsmJs (кроме времени старта.. Nacl\PNacl быстрее стартует чем AsmJs). к тому же нет обратной совместимости с браузерами которые не умеют Nacl\PNacl.

    ну или Google может насильно заставить всех сесть за Nacl\PNacl , в случае если ему получится создать 90'процентную монополию с браузером Google Chrome. от этого конечно ни куда не деться :) ..

     
     
  • 2.57, Аноним, 17:15, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Не сможет Они удовлетворились 30 долей и начали затягивать гайки Дальше он по... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.134, Аноним, 16:38, 21/12/2013 [^] [ответить] [смотреть все]  
  • –2 +/
    А мозильщики с их австралопитекисом по какому пути пойдут ... весь текст скрыт [показать]
     
     
  • 4.155, Аноним, 19:49, 24/12/2013 [^] [ответить] [смотреть все]  
  • +/
    >А мозильщики с их австралопитекисом по какому пути пойдут?

    свободы и любви

     
  • 2.74, Crazy Alex, 19:25, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Не знаю, как в NaCl, но с asm js память вообще никак не освобождается до заверше... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.78, Xasd, 19:59, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    ды во многих C C программах так сделан прикладной манагер памяти ни чего ... весь текст скрыт [показать]
     
     
  • 4.80, Vkni, 20:27, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Операционная система Firefox под гипервизором Windows есть только в 32-х разрядн... весь текст скрыт [показать]
     
     
  • 5.83, Lain_13, 20:36, 20/12/2013 [^] [ответить] [смотреть все]  
  • +2 +/
    Тебе же внятно сказали 32-разрядными не пользоваться. Смени гипервизор. -_-
     
  • 4.84, Crazy Alex, 20:36, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Угу, понял Называется плевать на эффективность и деньги на ветер Мне этот по... весь текст скрыт [показать]
     
     
  • 5.101, Аноним, 21:20, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Вне браузера - да А после запихивания в браузер - еще отлаживать и отлаживать ... весь текст скрыт [показать]
     
     
  • 6.107, Crazy Alex, 23:29, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Ну вот в NaCl нет никаких проблем применять всё это отлаженное прямо сейчас.
     
     
  • 7.113, Аноним, 00:10, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    > Ну вот в $SOMETHING нет никаких проблем

    Замечательный аргумент.

     
     
  • 8.128, Аноним, 14:46, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    В Windows нет никаких проблем В Linux нет никаких проблем В OSS нет никаких пр... весь текст скрыт [показать]
     
  • 4.135, Аноним, 16:40, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    протри его свапом и замени Докупи еще памяти Докупи проц помощнее И все эт... весь текст скрыт [показать]
     
  • 3.120, Аноним, 13:00, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Там все обычно более-менее обычно Хотя pnacl смотрится наиболее логично для веб... весь текст скрыт [показать]
     
  • 2.133, Аноним, 16:37, 21/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Я и вижу - знакомые игроделы на него гамезу портанули А на asm js они клали с п... весь текст скрыт [показать] [показать ветку]
     
  • 1.26, Аноним, 15:33, 20/12/2013 [ответить] [смотреть все]  
  • +/
    Хм, отличное сравнение clang и gcc.
     
     
  • 2.59, Аноним, 17:18, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Причём старых версий, почему-то Хотя по моим тестам gcc с новыми версиями почем... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.72, Аноним, 18:36, 20/12/2013 [^] [ответить] [смотреть все]  
  • +1 +/
    Ну так на фоне более новых компиляторов, сабжевые достижения смотрятся не так вн... весь текст скрыт [показать]
     
  • 3.121, Аноним, 13:01, 21/12/2013 [^] [ответить] [смотреть все]  
  • +1 +/
    Расскажи это LTO-оптимизациям, например, которые только в новых компилерах появи... весь текст скрыт [показать]
     
  • 1.49, Аноним, 16:39, 20/12/2013 [ответить] [смотреть все]  
  • –1 +/
    Теперь на JS можно написать Кризис и Ассасина?
     
  • 1.53, Аноним, 17:00, 20/12/2013 [ответить] [смотреть все]  
  • +1 +/
    Не проще сразу Си компилятор с песочницей в браузеры встроить?
     
     
  • 2.60, Аноним, 17:18, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    > Не проще сразу Си компилятор с песочницей в браузеры встроить?

    Нет.

     
  • 2.75, Crazy Alex, 19:27, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Проще встроить песочницу NaCl - но мозилловцы легкие пути вообще не любят и не... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.79, Xasd, 20:26, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    фраза как я понимаю в сторону PDF js и Shumway всё это началось после того к... весь текст скрыт [показать]
     
     
  • 4.86, Lain_13, 20:41, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    А ещё их достал тот факт, что через эти славные плагины постоянно пролезает всяк... весь текст скрыт [показать]
     
  • 4.87, Crazy Alex, 20:43, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Насчет того, что браузером надо пользоваться для просмотра веб-страниц т е док... весь текст скрыт [показать]
     
     
  • 5.103, Xasd, 22:10, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    монструозность появляется только в том случае, если ты зашёл на web-сайт, которы... весь текст скрыт [показать]
     
     
  • 6.109, Crazy Alex, 23:39, 20/12/2013 [^] [ответить] [смотреть все]  
  • –1 +/
    К твоему сведению - если на сайте нет соответствующего контента то процесс с пла... весь текст скрыт [показать]
     
     
  • 7.115, angra, 02:19, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    А вот если хоть один сайт с таким контентом открыть, а потом закрыть, то процесс... весь текст скрыт [показать]
     
     
  • 8.127, Crazy Alex, 13:28, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Не замечал, обычно процесс убивается в пределах минуты Но если остаётся - вперё... весь текст скрыт [показать]
     
  • 7.117, Bx, 12:26, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Зато js загрузится, если захочет мастер и позволит клиент, а у него нет выбора ... весь текст скрыт [показать]
     
  • 4.122, Аноним, 13:16, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Как любитель читать даташиты могу сказать что меня совершенно не прет, когда дат... весь текст скрыт [показать]
     
     
  • 5.132, Xasd, 16:32, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    заметьте что ActiveX-элементы тоже исполняются мгновенно и без шума вентилятора... весь текст скрыт [показать]
     
     
  • 6.136, Аноним, 17:20, 21/12/2013 [^] [ответить] [смотреть все]  
  • –1 +/
    Но есть у них и баги 1 Хромая безопасноть Это выполняемый код, который вообще... весь текст скрыт [показать]
     
     
  • 7.138, Xasd, 18:18, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    1 сложный формат провоцирует на создание ошибки 2 не WEB-ориентированный ... весь текст скрыт [показать]
     
     
  • 8.142, Аноним, 13:56, 22/12/2013 [^] [ответить] [смотреть все]  
  • +/
    HTML и JS намного более сложные и фичастые чем какой-то несчастный PDF, так что ... весь текст скрыт [показать]
     
     
  • 9.145, Xasd, 15:53, 22/12/2013 [^] [ответить] [смотреть все]  
  • –1 +/
    прости, но я не могу сделать это для тебя -- ты же сказал что ты всё поотключал ... весь текст скрыт [показать]
     
     
  • 10.151, Аноним, 12:28, 23/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Более того - у меня получилось лучше чем у мозильщиков В дефолтной конфиге мози... весь текст скрыт [показать]
     
  • 7.149, Аноним, 20:12, 22/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Майнер на JS он не хочет, а майнер на PNaCl это завсегда пожалуйста ... весь текст скрыт [показать]
     
     
  • 8.152, Аноним, 12:29, 23/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Ну если его самолично инсталлировать надо - пусть будет, я не против ... весь текст скрыт [показать]
     
  • 1.68, Vkni, 18:20, 20/12/2013 [ответить] [смотреть все]  
  • +/
    Други, удалось ли кому-нибудь найти опции gcc/clang'а, использовавшиеся при компиляции? А-то ведь банальное -O0 замедляет код раза в пару раз по сравнению с -O2. ;-)
     
  • 1.81, iZEN, 20:28, 20/12/2013 [ответить] [смотреть все]  
  • –2 +/
    Разверну мысли по поводу уместности Java 8482 внутри браузера идею Java изв... весь текст скрыт [показать]
     
     
  • 2.88, Crazy Alex, 20:46, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Вот в таком варианте - угу, смотрится логично Тем более, что JVM байткод - не р... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.125, Аноним, 13:20, 21/12/2013 [^] [ответить] [смотреть все]  
  • +1 +/
    Мне тоже - и ограничений на ЯП в принципе нет, в отличие от жабы, и скорость как... весь текст скрыт [показать]
     
  • 2.104, Xasd, 22:25, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    да, кстате вот это действительно не понимаю зачем только теперь уже Google Ch... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.110, Crazy Alex, 23:47, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Они не встроились, потому что джава-апплеты - это, кроме тормозности, ещё и прос... весь текст скрыт [показать]
     
     
  • 4.116, Xasd, 04:12, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    да, была какаято новость что мол какието ребята сделали програмный карказ, в кот... весь текст скрыт [показать]
     
  • 4.126, Аноним, 13:22, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    А еще там взлетит любая SDLная гамеза с весьма приличной скоростью, например А ... весь текст скрыт [показать]
     
     
  • 5.137, Xasd, 17:49, 21/12/2013 [^] [ответить] [смотреть все]  
  • –1 +/
    вот только кроме игр технология окно-в-окне , или брайзер-в-браузере -- сде... весь текст скрыт [показать]
     
     
  • 6.143, Аноним, 14:53, 22/12/2013 [^] [ответить] [смотреть все]  
  • +/
    На основе такой технологии можно делать в принципе что угодно Кастомный кодек д... весь текст скрыт [показать]
     
     
  • 7.147, Xasd, 18:25, 22/12/2013 [^] [ответить] [смотреть все]  
  • +/
    если сделаешь этот PNaCl-кодек -- чтобы он показывал видеоклип прямо внутри комп... весь текст скрыт [показать]
     
     
  • 8.153, Аноним, 12:32, 23/12/2013 [^] [ответить] [смотреть все]  
  • +/
    С чего бы Я и заметил - знакомые игроделы в два счета портируют гамезы под хром... весь текст скрыт [показать]
     
  • 2.108, Аноним, 23:34, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    Если class файлы грузить по необходимости, получим целый спектр проблем в дополн... весь текст скрыт [показать] [показать ветку]
     
  • 2.123, anonymos, 13:17, 21/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    Изя, прекрати путать Java и JavaScript.
     
  • 1.85, Аноним, 20:37, 20/12/2013 [ответить] [смотреть все]  
  • –1 +/
    _один_ столбик стал чуточку короче, а пафоса-то столько нагнали
     
     
  • 2.97, Аноним, 21:16, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А ты открой 1024 закладки - и почувствуй, что называется, разницу ... весь текст скрыт [показать] [показать ветку]
     
  • 1.91, Int, 21:03, 20/12/2013 [ответить] [смотреть все]  
  • –1 +/
    А отзывчивость интерфейса с прокруткой как тормозила так и тормозит
     
  • 1.102, BrainFucker, 21:34, 20/12/2013 [ответить] [смотреть все]  
  • –1 +/
    Они лучше бы занялись оптимизацией той части, из-за которой браузер тормозит когда скрипты что-то модифицируют на страницах. Сложные математические операции редко где на сайтах выполняются, а свистоперделок полно.

    http://img22.imageshack.us/img22/6232/6314.png

     
     
  • 2.105, Xasd, 22:29, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    у тебя только одно ядро что ли или это так настроен htop не, не я знаю что ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.106, BrainFucker, 22:55, 20/12/2013 [^] [ответить] [смотреть все]  
  • –1 +/
    Одно.
     
     
  • 4.139, Xasd, 19:23, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    печально :(
     
     
  • 5.140, BrainFucker, 19:29, 21/12/2013 [^] [ответить] [смотреть все]  
  • –1 +/
    Нисколько Особой необходимости нет Компиляцией заниматься не приходится, видео... весь текст скрыт [показать]
     
  • 2.111, Crazy Alex, 23:49, 20/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    И что самое гадкое - никакого простого способа отследить, какая вкладка чудит, н... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.112, BrainFucker, 23:53, 20/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Дык, текущая же Если переключиться на другую, где нет свистоперделок, то грузит... весь текст скрыт [показать]
     
     
  • 4.114, Crazy Alex, 02:01, 21/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Нет, как ни странно, нет То есть я методом тыка иногда вылавливал проблемные вк... весь текст скрыт [показать]
     
  • 1.129, Аноним, 15:10, 21/12/2013 [ответить] [смотреть все]  
  • +/
    False Это an extraordinarily optimizable, low-level subset of JavaScript То ... весь текст скрыт [показать]
     
     
  • 2.130, Аноним, 15:40, 21/12/2013 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Правильно Поэтому вот здесь стоят кавычки ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.131, Аноним, 15:58, 21/12/2013 [^] [ответить] [смотреть все]  
  • –3 +/
    И что эти кавычки должны означать Переносный смысл В чем он тогда заключается ... весь текст скрыт [показать]
     
     
  • 4.144, Аноним, 14:55, 22/12/2013 [^] [ответить] [смотреть все]  
  • +/
    В том что гражданин сказал несколько абстрактно На самом деле он имел даже не т... весь текст скрыт [показать]
     
     
  • 5.146, Xasd, 16:33, 22/12/2013 [^] [ответить] [смотреть все]  
  • +/
    ну ок, Js в качестве IR -- плохо а Asm Js в качестве IR -- тоже плохо ведь As... весь текст скрыт [показать]
     
     
  • 6.154, Аноним, 12:35, 23/12/2013 [^] [ответить] [смотреть все]  
  • +/
    Ну вот видишь, ты сам это сказал Да, это - плохо Потому что вместо того чтобы ... весь текст скрыт [показать]
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor