Оптимизация производительности JavaScript через пользовательское выделение памяти функций

Перевод статьи Optimizing JavaScript Performance Through Custom Memory Allocation с любезного согласия Kevin Dangoor

Каннан Виджаян из компании Mozilla был заинтригован результатами запуска SunSpider, перенесенного на C++, asm.js и dalvik. В тесте “бинарные деревья”, asm.js показал себя самым быстрым на сегодняшний день. Непроверенная теория Каннана сводится к производительности выделения памяти:

В asm.js, скомпилированный C++ выполняется через типизированный массив JavaScript как “машинная память”. Машинная память выделяется один раз и затем используется для всей программы во время выполнения. Вызовы на malloc от asm.js не выполняют никаких системных вызовов. Это может быть причиной того, что расширенный с помощью asm.js JS-код, который компилируется в C++ лучше, чем в родной-компиляции C++, но эта гипотеза требует дальнейших исследований в работе функций для подтверждения.

В дискуссии на Hacker News были некоторые комментарии касательно производительности памяти в javascript. duaneb сказал:

Тот, кто реализовал распределитель памяти, знает, как дорого это может обходиться. Если у вас есть более простой алгоритм, который работает с вашими данными, выделите внушительный кусок кода или функции javascript и управляйте им самостоятельно.

Некоторые разработчики повторно используют объекты как способ избежать ненужных выделений. Статья была только-только опубликована на Smashing Magazine. Говоря о Emmet LiveStyle, автор рассказывает о том, как они повторно использовал объекты в целях экономии ассигнований. Другие подробности также содержатся в справочнике по javascript.

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

Обновление: Вячеслав Егоров послал мне ссылку на график Каннана, где содержатся данные о производительности движка JavaScript (см. также справочник javascript). В случае с бинарным деревом, реализация JavaScript дала самые быстрые показатели на сегодняшний день. Хотя возможно, C++ не был оптимально настроен.

Я не хочу слишком зацикливаться на тестах, потому что мой главный смысл не в том “asm.js быстрее, чем c++” (на самом деле, я даже не завожу разговор об этом). Моя точка зрения состоит в том, что существуют способы управления памятью в функциях JS, которые могут быть неочевидным способом улучшения отзывчивости.

Пожалуйста, оцените статью: 
No votes yet

Добавить комментарий

Не нашли ответ на свой вопрос? Возможно, вы найдете решение проблемы на нашем канале в Youtube! Здесь мы собрали небольшие, но эффективные инструкции. Смотрите и подписывайтесь на наш youtube-канал!

Смотреть на Youtube

Помощь: задайте вопрос

Вы робот? Оставьте это поле пустым, если вы не робот, а человек

Руководства и обзоры

1 Что нужно восстановить?

Видео

MP4, AVI и HD видео хранятся на телефоне и / или по ошибке удаляются вместе с фотографиями и другими медиафайлами.

Контакты

Номера телефонов друзей и знакомых из приложения «Контакты Android», журналы вызовов; Восстановление SIM-карты.

Фото

Удалены файлы JPG / PNG из Галереи Android; фото, загруженные на мобильный, файлы повреждены после восстановления.

Смс и сообщения

Чаты WhatsApp и Facebook, текстовые сообщения в соцсетях, информация на сим-карте

2 Где пропали файлы?

На sd-карте

Фотографии и документы хранятся на SD-картах. Часто на них случайно удаляются файлы

На телефоне

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

На USB флешке

Эти небольшие устройства хранения данных часто выходят из строя или на них появляются ошибки чтения.

На HDD или SSD

Несмотря на то, что настольные платформы становятся все менее популярными, проблема потери файлов всегда оставалась.