Полезные советы по оптимизации ASP-приложений


Оглавление (нажмите, чтобы открыть):

Оптимизация приложений ASP.NET. Приложения для iPhone и Andro >

У меня есть приложение ASP.NET(не MVC).

Я хотел бы создать версию, оптимизированную для браузеров на IPhone и на Android.

  • Возможно ли обнаружение IPhone/Android при доступе к сайту.
  • Есть ли какие-либо проблемы/советы по разработке ASP.NET для этих устройств.
    1 2
  • 31 окт 2020 2020-10-31 23:42:10
  • AJM

2 ответа

Webforms не подходит для мобильных устройств, он генерирует большие страницы, потому что viewstate. И вы не можете управлять рендерингом (еще немного .net4).

Вы можете обнаружить устройство, используя db возможностей, таких как WURFL (я рекомендую 51degrees) o возможно, используя некоторые, например https://detectmobilebrowser.com/

Я не знаю, что такое webapp, но вы можете создать новое приложение, возможно, используя MVC. Посмотрите этот ресурс.

  • 31 окт 2020 2020-10-31 23:42:12
  • fravelgue

Мы используем комбинацию .net webforms и jQuery mobile.

Для нашего viewstate это было довольно хорошо стерилизовано, так что только незначительные вещи идут к устройству.

Имейте в виду, что существует около 3 различных мобильных api. Каждый из них имеет свои недостатки. Вы можете изучить их.

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

Оптимизация ASP.NET приложений

Стоимость семинара — 10,000 рублей с человека.

Платить 10 косарей для того, чтобы поприсутствовать на бреднях Стасика? Это просто эпик фэйл!

Средние школы закрыть, учителей уволить. Они ведь прописным истинам учат. Так?

МСУ, hVosttСредние школы закрыть, учителей уволить. Они ведь прописным истинам учат. Так?

Какие средние школы, бро? Тут уровень ниже продлёнки

Эй люди, кто-то на такие смешные мероприятия ходит??

МСУ, hVosttСредние школы закрыть, учителей уволить. Они ведь прописным истинам учат. Так?

30 октября состоится «Пятая технологическая конференция Яндекса», так что Стасян в пролёте. 🙂

31 октября и 1 ноября HighLoad++Вот там есть чему поучиться 🙂

Это скорее место для знакомств. Считаю, компании должны отправлять своих перспективных сотрудников на такие тусовки.

А вообще было бы неплохо цикл статей от местных гуру увидеть.

Зря шумите. Во-первых, gandjustas не так уж плох, как может показаться по вашим замечаниям.

По WPF, WCF и EF уже есть. :-)зы: по Asp.Net и JS, надеюсь, в следующем году добавятся.

А вообще было бы неплохо цикл статей от местных гуру увидеть. Или скомпилированные статьи по темам, с учетом замечаний и правок остальных участников.

МСУ тоже может, но почему-то свой дар красноречия растрачивает на форумных троллей. Нет, чтобы на основе своего codearticles написать ряд статей.

Кто программирует, у того нет времени этим всем заниматься.

Кто программирует, у того нет времени этим всем заниматься.

Есть еще более важный аргумент, по сути мы здесь все конкуренты и инфа наш хлеб. Вылаживать действительно передовые, эффективные подходы никто не хочет, что логично. Есть так же NDA.

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

Что-то применил, что-то узнал, что-то написал — просто скопировал рецептик, чтобы в следующий раз заново не городить лисапед, когда всё забудешь.

Так что я лучше тут потроллю, как ты выразился 🙂

Топ-10 рекомендаций по визуальной оптимизации скриншотов

Визуальные элементы страницы — это лицо вашего продукта. Попадая на страницу приложения в App Store или Google Play пользователь, в первую очередь, обращает внимание на иконку и скриншоты.
И у него есть всего несколько секунд, чтобы принять решение о скачивании. Скриншоты влияют на конверсию в установку, поэтому менеджер отвечающий за поисковую оптимизацию, должен постоянно мониторить изменения и экспериментировать с визуальным рядом, добиваясь лучшей конверсии.

В этой статье мы собрали топ основных рекомендаций по ASO оптимизации скриншотов для обоих магазинов.

Четко следуйте требованиям

Базовое правило, работающее для Google Play и App Store — следовать их требованиям.
У обоих маркетов есть четкие рекомендации к размерам скриншотов, их допустимому количеству, а также по контенту, который можно размещать. Внимательно прочитайте рекомендации и требования, так вы избежите проблем при прохождении ревью.
Рекомендации для Google Play и App Store.

Количество скриншотов

В App Store вы можете разместить до 10 скриншотов на странице приложения для iPhone, iPad, Apple Watch и Apple TV.

В Google Play вы можете добавить до 8 скриншотов для каждого поддерживаемого типа устройства: смартфон, планшет (7 и 10 дюймов), Android TV и Wear OS от Google.

Наши рекомендации для обоих магазинов приложений:

Большинство пользователей скорее всего не будет просматривать все имеющиеся скриншоты. Поэтому, для размещения информации об основных преимуществах, используйте по максимуму 4-5 первых скриншотов. На остальные экраны поместите дополнительные элементы интерфейса и менее важную информацию.

Портретные или же ландшафтные?

App Store
Мы проанализировали топ 100 приложений для iPhonе, и заметили, что почти все приложения используют портретную ориентацию для своих страниц. Это объясняется тем, что большинство приложений имеет вертикальный интерфейс, поэтому вся промо информация идет в таком же формате. Плюс вертикальные скриншоты занимают меньше места. Вы можете поместить на них больше информации. Пользователю же не придется долго скроллить в бок.
Для игр разработчики чаще используют, как вертикальный, так и горизонтальный формат.

Google Play
В Google Play наблюдается похожая ситуация, издатели приложений предпочитаю использовать портретную ориентацию, а игровые разработчики размещают скриншоты, как в ландшафтной, так и в портретной ориентации.
Выбор типа скриншотов обусловлен самим интерфейсом и особенностями геймплея, вы можете показать больше деталей в ландшафтном режиме. Также игровые приложения используют дополнительную графику и размещают ссылки на видео.

Наши рекомендации для обоих магазинов приложений:
Рекомендуем вам изучить топ приложений из вашей ниши, посмотреть какие скриншоты используют конкуренты и, с учетом ориентации интерфейса вашего продукта, создать набор скриншотов. Для приложений в App Store и Google Play лучше использовать вертикальные скриншоты.
Для iPhonе и Android игр предпочтительнее делать горизонтальные скриншоты, если сам интерфейс имеет такой формат. Если же интерфейс игры вертикальный, то скриншоты также должны это отражать. Также помните, что поведение пользователей двух магазинов могут различаться, и лучше планировать разные наборы скриншотов, один для App Store, а другой для Google Play.

Преимущества выносите вперед

Так как размер экрана устройства ограничен, сначала пользователь видит только два скриншота. Поэтому главные возможности и преимущества важно отразить на первых двух экранах.
Мы проанализировали топ 100 бесплатных приложений для iPhone в США, и заметили тренд: основная информация о преимуществах и возможностях выносится или на первый скриншот, или на два первых скриншота, которые образуют единую композицию.

Выбор стиля приложения

Существует несколько стилей оформления скриншотов, которые используют издатели. Практически уже никто не использует просто скриншоты без дополнительной текстовой информации. Все стремятся выбрать наиболее эффективный способ донесения информации для потенциальной аудитории. Мы не будем расписывать все возможные варианты, которые используют разработчики. Но, отметим плюсы и минусы популярных вариантов, которые используются сейчас в App Store и Google Play.

Сплошной фон и устройство

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


Плюсы:
Такие скриншоты довольно просто сделать;
Они четко выделяют преимущества: одна функция на один экран.

Минусы:
Технически использование изображений устройств запрещено, и в Руководстве разработчика iTunes Connect говорится: «Не размещайте снимок экрана внутри изображения устройства Apple»;
Слишком много издателей уже используют такие скриншоты, вы можете потеряться на их фоне.

Панорамная галерея
Данная подача подразумевает продуманный единый визуальный ряд. Чаще всего два первых экрана объединены в одну композицию. На первый скриншот помещается информация об основных возможностях, а на втором раскрывается содержание приложения. Такая композиция раccчитана на то, что пользователи заинтересуется и будут листать дальше.

Источник: https://itunes.apple.com/us/app/wish-shopping-made-fun/id530621395
Источник: https://itunes.apple.com/us/app/yelp-food-services-around-me/ >

Плюсы:
Высокий уровень вовлечения со стороны пользователей.
Яркая подача информации.
Минусы
Требуется больше времени на разработку концепции.

Выделяйте преимущества продукта, а не его функции

Важная информация, вынесенная на первые скриншоты, не должна быть простым перечислением функций продукта. Вы должны донести до пользователя, что за преимущества он получит, используя ваше приложение. Выделяйте количество пользователей, которые уже доверяют вам. Отмечайте набор функций, которые он получит, скачав приложение. Также упоминайте явные достоинства своего продукта, по сравнению с аналогичными, уже существующими на рынке.

Отмечайте достижения

Ваши потенциальные клиенты хотят пользоваться лучшими и популярными продуктами. Дайте им такую возможность. Подчеркните свои достоинства: на скриншотах отметьте достижения, награды и премии, которые получило ваше приложение.

Источник: https://itunes.apple.com/us/app/calm/ >

Локализуйте графику под разные рынки

Все графические материалы нужно не просто локализовать, переведя на местный язык все надписи на скриншотах. Для всей графики необходимо сделать полную адаптацию под местный рынок. Такая адаптация называется культуризацией. Вы не просто переводите тексты, а также создаете графику с учетом особенностей местного рынка. Это может быть определенная цветовая гамма или фотографии с людьми другой национальности. Возможно, придется добавить символы или же фотографии людей заменить иллюстрациями. Все очень сильное зависит от культурных особенностей той страны, в которой вы планируете продвигать свой продукт.
На примере ниже видно, что издатель использует совершенно разные цветовые гаммы и изображения для своего приложения, один набор креативов эффективен для китайской аудитории, и уже совершенно другой используется в США.

Скриншоты Tik Tok в App Store для Китая

Источник: https://itunes.apple.com/cn/app/id1142110895

Скриншоты TikTok в App Store для США

Добавляйте видео

Добавление видео превью в App Store и промо видео для Google Play — это дополнительная возможность рассказать вашей аудитории о преимуществах приложения. Наглядно показать, как продукт можно использовать в повседневной жизни.

Добавленное видео может значительно повысить конверсию из просмотра страницы в установку. Согласно отчету Splitmetrics, добавление видео превью в App Store может повысить вовлечение и коэффициент конверсии на 16%, а согласно информации от StoreMaven, наличие видео на странице вашего приложения в магазине может повысить коэффициент конверсию на 20–35%

При планировании продвижения своих продуктов в App Store и Google Play, помните о различиях магазинов. Если в App Store у вас есть возможность добавлять видео превью, то в Google Play вы можете добавить только ссылку на видео, размещенную в YouTube.
При этом на страницу приложения должно быть обязательно добавлено специальное изображение.

Мы проанализировали топ 100 бесплатных приложений для iPhone: из 100 только 23 используют видео превью. В основном это приложения для онлайн покупок, доставки еды, фото и видео редакторы, а также стриминговые сервисы.

Из этого можно сделать выводы:

  • Не все издатели используют возможность показа функциональности своего приложения в динамике, и у вас есть возможность в App Store обратить на себя внимание.
  • Видео туториал уместен, в том случае, если у вас достаточно функций и контента внутри самого приложения.

Чтобы проверить гипотезу о влиянии видео на увеличение коэффициента конверсии, вам нужно будет сделать видео превью для вашего приложения и провести A/ B тестирование.

Проводите A/B тестирование

Когда нужно проводить тестирование новых скриншотов? В принципе каждый раз, когда вы планируете обновить их в App Store или в Google Play.

Но, особенно в тех случаях, когда вы полностью меняете концепцию своих графических материалов. Например, вы замечаете, что приложение имеет высокие места в топе поисковых запросов. У вас хорошая посещаемость страницы в магазине, но конверсия падает. В этом случае стоит проанализировать иконку и скриншоты, выдвинуть гипотезы и создать несколько наборов новых визуальных элементов. Затем запустить A/B тестирование. В итоге выбирать тот вариант, который показывает лучшую конверсию.

В Google Play консоле существует возможность проведения тестирования всех элементов страницы. Вы загружаете свой вариант в магазин и испытываете на живой аудитории. Затем проводите тестирование для другого набора. A/B тесты помогают проанализировать и выбрать те варианты, которые будут более эффективны в увеличении конверсии.

В App Store, к сожалению, не существует нативных инструментов для проведения таких тестов, но можно воспользоваться сторонними сервисами. Что касается подробной информации о самих инструментах, которые вы можете использовать для проведения A/B тестирования визуального оформления страниц. Вы можете посмотреть одну из наших прошлых статей “Что нужно ASOшнику помимо ASO платформы”.

Резюмируем

Эффектное оформление страницы приложения напрямую влияет на эффективность вашей ASO стратегии. Скриншоты влияют на принятие решения о скачивании или покупке продукта.
App Store и Google Play постоянно меняются, и, в связи с этим, обновляются требования к графическим материалам. Вы должны отслеживать эти изменения и, согласно им, менять иконки и скриншоты своего приложения.

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

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

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

Исследование производительности ASP.NET-приложений

Рубрика: 1. Информатика и кибернетика

Дата публикации: 03.07.2020

Статья просмотрена: 54 раза

Библиографическое описание:

Яськов А. Д. Исследование производительности ASP.NET-приложений [Текст] // Технические науки: проблемы и перспективы: материалы V Междунар. науч. конф. (г. Санкт-Петербург, июль 2020 г.). — СПб.: Свое издательство, 2020. — С. 22-25. — URL https://moluch.ru/conf/tech/archive/231/12744/ (дата обращения: 10.11.2020).

В данной работе рассматриваются, анализируются и систематизируются факторы, оказывающие влияние на производительность ASP.NET-приложений, описываются способы повышения производительности.

Ключевые слова: ASP.NET, производительность, веб-приложение, быстродействие

Сегодня в мире практически любой человек, использующий Интернет, сталкивается с веб-приложениями. При этом существует большое количество платформ, обеспечивающих создание и функционирование веб-приложений. ASP.NET, разработанная компанией Microsoft, является одной из наиболее популярных платформ.

ASP.NET представляет из себя часть технологии.NET, предназначенную для создания динамических HTML-страниц. Она позволяет писать мощные клиент-серверные веб-приложения. ASP.NET возникла в результате объединения более старой технологии ASP (active server pages) и.NET Framework. В ней содержатся готовые элементы управления, позволяющие быстро и качественно создавать готовые интерактивные интернет-сайты. Ключевое слово здесь — быстро. Также имеется возможность использовать сервисы других сайтов максимально понятно и прозрачно для пользователей.

Производительность любого веб-приложения можно рассматривать с двух сторон: с точки зрения конечного пользователя и с точки зрения сервера (или разработчика).

В первом случае пользователя интересует скорость реакции на его запрос, то есть время отклика приложения. Остальное его не интересует. При относительно малом времени отклика пользователя не будет возникать других вопросов к приложению, касающихся его производительности [1].

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

Подходы к повышению производительности можно условно разделить на три группы: уменьшение времени обработки страницы на стороне клиента, на стороне сервера и уменьшение объема передаваемых данных [2].

Чтобы уменьшить время обработки страницы на стороне клиента нужно придерживаться некоторых правил:

− Максимально использовать таблицы стилей CSS.

− Минимально использовать в странице разнообразные таблицы. В первую очередь те, в которых не заданы явным образом размеры ячеек. Использование таких таблиц, особенно совместно с фоновыми изображениями внутри ячеек приводит к тому, что при загрузке страницы браузер на стороне клиента сначала строит таблицу, самостоятельно высчитывая приемлемые размеры ячейки. Затем он пытается включить в построенную ячейку изображение, заданное для нее в качестве фонового. После чего может получиться так, что изображение не помещается внутри ячейки, так как при ее построении браузер не учитывал размеры изображения, которое предстояло в ней разместить. В этом случае браузер начнет перерисовывать таблицу заново, с нуля пересчитывая габариты ячеек, что негативно скажется на времени отображения страницы у пользователя. Это объясняется особенностями работы браузеров. Поэтому, если без таблицы обойтись нельзя, то лучше всегда задавать размеры ее ячеек самостоятельно.

− Максимально оптимизировать HTML.

− Максимально оптимизировать JavaScript. Соблюдение последних двух условий может позволить добиться существенного прироста в скорости загрузки страницы.

− Не использовать вставку внешних скриптов. Если отказаться от них полностью не представляется возможным, то хотя бы минимизировать их количество. Это требование, опять же, связано с особенностями работы браузеров. В случае, если в странице вставлены внешние скрипты, может возникнуть серьезная проблема. Сама страница может загрузиться очень быстро при соблюдении остальных правил, но использованный на ней внешний скрипт может обращаться к удаленному серверу, имеющему крайне высокое время ответа. В силу особенностей работы большинства браузеров, в этом случае страница не загрузится полностью до тех пор, пока не придет ответ от удаленного сервера, даже если элемент, с которым связан внешний скрипт, сам по себе является незначительным. К счастью, существует несколько способов обойти данную проблему, но лучше по возможности полностью отказаться от вставки внешних скриптов в веб-страницу.

Уменьшение объема передаваемых данных:

− Использование HTTP-сжатия. Это самое простое правило, так как для его соблюдения чаще всего не требуется дополнительных затрат времени. Большая часть современных браузеров и серверов поддерживает эту технологию, поэтому было бы не лишним ее использовать для уменьшения объема передаваемых от клиента к серверу и обратно данных.

− Использование идентичных URL-адресов для файлов. Здесь подразумевается, что в веб-приложении часто одни и те же файлы, например, файлы изображений, используются по несколько раз. Браузер, видя URL-адрес изображения впервые, загружает его и сохраняет в кэш. В случае, если ему встречается еще раз этот же адрес, браузер уже не загружает изображение снова с сервера, а использует сохраненную в кэше копию. Если же URL-адрес отличается от первого, то браузер загрузит изображение снова, тем самым создав дополнительную ненужную нагрузку на соединение. Это произойдет в любом случае, независимо от того, было ли ранее загружено идентичное изображение или нет. Браузер сравнивает только URL-адреса. Поэтому необходимо, чтобы у одних и тех же файлов адреса не отличались.

− Использование SSL только там, где это действительно необходимо. Любое шифрование почти всегда повышает объем передаваемых данных. Зачастую оно используется там, где не приносит пользы. Многие страницы и приложения не содержат никакой конфиденциальной или другой информации, которую следовало бы шифровать. Хотя во многих других случаях использование SSL оправданно. Необходимо стремиться к тому, чтобы шифрование применялось только в последних случаях.

− Использование AJAX. Плюсов использование этой технологии приносит очень много. AJAX позволяет передавать пользователю изначально только основную часть информации, а не весь ее объем. Затем, в процессе работы, передавать только те элементы и части страницы, которые действительно необходимо изменить. Это позволяет не передавать по сети всю страницу в полном объеме при каждом действии на стороне клиента.

− Использование клиентской валидации. Валидация на стороне сервера, особенно в случае заполнения разнообразных форм, ведет к увеличению объема передаваемых данных. Это связано с тем, что в подавляющем большинстве случаев пользователь не справляется с корректным заполнением всех полей на форме с первого раза. Но отправка данных осуществляется после каждого заполнение. Так как проверка на валидность осуществляется уже на стороне сервера. После чего пользователю приходит ответ о некорректности введенных данных, и операция повторяется. Если использовать клиентскую валидацию, то проверка на корректность будет происходить без обмена данными между клиентом и сервером. Хотя во многих случаях использование серверной валидации является необходимым в вопросах безопасности, поэтому в таких случаях следует использовать совместно клиентскую и серверную валидацию.

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

Уменьшение времени обработки страницы на стороне сервера:

Здесь правил больше всего, и их выполнение особенно важно, так как время обработки запроса сервером часто превышает время на других этапах работы веб-приложения [3].


− Максимальная оптимизация кода и использования ресурсов. Здесь комментарии не требуются. Чем быстрее будет происходить обработка запроса на сервере, там быстрее ответ будет приходить к клиенту.

− Оптимизация баз данных. Следует подумать о том, каким образом должна происходить работа клиента с базой данных на сервере. После открытия соединения с БД и выполнения необходимой операции следует незамедлительно закрывать соединение и не держать его открытым. Довольно популярно заблуждение, что многократные открытия и закрытия соединений с базой данных повышают нагрузку на сеть. Нужно понимать, что не всегда при операции открытия происходит физическое создание соединения. Существует некоторое количество соединений, которые могут переиспользоваться постоянно.

− Отключение неиспользуемых HTTPModule

− Оптимизация конфигурации ASP.NET. В большинстве случаев использования ASP.NET файлам конфигурации не уделяют должного внимания. Стандартная конфигурация ASP.NET универсальна — она удовлетворяет большинству требований, то в каждом конкретном отдельно взятом случае она не является оптимальной. Конфигурацию следует подстраивать уникально, в зависимости от функций.

− Буферизация вывода. При использовании ASP.NET эта функция включена автоматически, просто не стоит ее отключат ь. Она играет очень важную роль. Она позволяет накапливать информацию в буфере до момента ее отправки на сервер, а не отправлять каждый байт информации сразу после его появления. Это существенно разгружает соединение.

− Отключение автоматического обновления Profile. Это требование связано с тем, что при включенном обновлении с каждым обращением к странице происходит обновления профиля в базе данных. То есть каждое обращение к странице вызывает сохранение всех данных в базе данных, что является неоправданным, так как само по себе обращение к странице почти всегда не значит, что все данные в базе данных изменились. То есть обращению к веб-странице почти никогда не предшествует изменение всех данных в базе, но при включенном обновлении Profile за обращением к странице следует операция, необходимая только в случае серьезного изменения этих данных. Поэтому следует использовать ручное сохранение данных, которое можно будет использовать лишь тогда, когда это действительно необходимо. На этом можно сэкономить обращение к базе данных.

− Кэширование. Последние три свойства являются основными в этой группе. Кэширование — одно из них. В самом простом случае оно подразумевает сохранение копии данных на определенное время на стороне клиента. Это позволяет при большинстве запросов не выполнять загрузку данных с сервера по линии соединения, а загружать ее из кэша, что существенно снижает нагрузку на соединение. Все изменения, которые производятся со страницей, сохраняются именно в этой копии у клиента. Чаще всего кэширование производится на заданной временной промежуток. В этом случае первая операция, обращенная к странице, произошедшая по истечении этого промежутка времени, уже действительно загрузит страницу по сети, тем самым обновив ее копию в кэше, а все предыдущие операции будут работать лишь с этой копией. Причем в ASP.NET реализованы так называемые профили кэширования. Они позволяют заранее создать в файле web.config настройки кэширования, такие как время хранения копии и другие параметры, а затем лишь обращаться к этим профилям, не обозначая всех параметров. Однако, при использовании кэширования следует помнить об одном важном моменте. При использовании копии данных, сохраненных на стороне клиента, можно добиться повышения скорости работы веб-приложения, но, как только будет превышено определенное количество данных, хранящихся в кэше, произойдет серьезное падение производительности, так как память клиента имеет физические ограничения, и хранить на ней данных в полном объеме не получится. Поэтому при использовании кэширования следует соблюдать баланс между общим объемом информации и той частью, которая сохраняется в кэше клиента.

− Асинхронность. На веб-сервере платформы.NET Framework поддерживается пул потоков, которые используются для обслуживания запросов ASP.NET. При получении запроса, для его обработки из этого пула выделяется поток (thread). Если запрос обрабатывается синхронно, то поток, который обрабатывает запрос, блокируется на время обработки запроса. Такой поток не может обслуживать другой запрос. Это может не составлять проблемы, так как пул потоков можно сделать достаточно большим для вмещения множества заблокированных потоков. Однако, количество потоков в пуле ограничено. В больших приложениях, которые обрабатывают несколько одновременных запросов, которые выполняются длительное время, все доступные потоки могут быть заблокированы. Такая ситуация называется нехваткой потоков. При наступлении этой ситуации веб-сервер помещает запросы в очередь. После заполнения очереди запросов веб-сервер отклоняет запросы, возвращая код ошибки HTTP 503 (сервер перегружен). В приложениях, в которых может возникнуть нехватка потоков, можно настроить действия, которые обрабатываются асинхронно. Асинхронный запрос обрабатывается такое же количество времени, что и синхронный запрос. Например, если запрос выполняет сетевой вызов, который требует две секунды для выполнения, запрос будет обрабатываться две секунды, независимо от того, выполнен он синхронным или асинхронным способом. Однако, при асинхронном вызове сервер не заблокирован для ответов на другие запросы во время ожидания выполнения первого запроса. Поэтому асинхронные запросы предупреждают постановку запросов в очередь в ситуации, когда существует множество запросов, которые вызывают длительные по времени операции.

− Многопоточность. Это свойство позволяет достаточно просто и производительно реализовать процессы, не связанные с пользовательским интерфейсом, или требующие запуска по расписанию. Без использования многопоточности эти операции приводят к блокированию пользовательского интерфейса. Например, это может быть обращение к какому-то серверу в сети. В этом случае пользователю придется дожидаться момента, когда от этого сервера вернется ответ. Только тогда он сможет продолжить работа с приложением. Разумнее было бы предоставить в это время пользователю возможность выполнять какие-то другие действия или вообще отменить этот запрос. В любой ситуации, когда требуется ожидание, будь то запрос к базе данных, файлу или сети, может запускаться новый поток, позволяющий в это время решать другие задачи. Это и есть многопоточность. Она может быть реализована через обработку потоков одного и того же запроса разными процессорами или, что бывает чаще, разными ядрами одного процессора. При этом могут возникать определенные проблемы. Например, в случае, когда разные потоки пытаются одновременно получить доступ к одним и тем же данным. Поэтому при использовании многопоточности следует помнить о механизмах синхронизации потоков. В этом случае многопоточность оправдана и способна принести очень существенный вклад в повышение производительности приложения [4].

Оптимизация ASP.NET приложений

Расскажите друзьям о событии

Рекомендуемые события

Извините, регистрация закрыта. Возможно, на событие уже зарегистрировалось слишком много человек, либо истек срок регистрации. Подробности Вы можете узнать у организаторов события.

30 октября пройдет семинар по оптимизация ASP.NET приложений. В программе как клиентская, так и серверная оптимизация, а также введение в оптимизацию баз данных.

Расскажите друзьям о событии

Быстродействие — это Фича. Для веб-приложений и сайтов это важнейшая фича. Быстрые сайты получают более высокие места в поисковой выдаче. Быстрые веб-приложения улучат восприятие пользователями. Масштабируемые приложения требуют меньше ресурсов и более эффективны с экономической точки зрения. Для любого веб-программиста умение делать быстрые и масштабируемые приложения является критически важным.

Но оптимизация веб-приложений — это не один навык, а целый комплекс, который включает клиентскую оптимизацию, оптимизацию работы с данными, оптимизацию архитектуры и инфраструктуры приложений, а также умение проводить нагрузочное тестирование и выявлять слабые места. Для ASP.NET это важно вдвойне, так как много фреймворков и компонент могут скрывать проблему, и докопаться до сути очень непросто. Но это того стоит!

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

  1. Введение в оптимизацию ASP.NET приложений
    • Почему нужно заниматься оптимизацией
    • Архитектура ASP.NET приложений
    • Измерение производительности ASP.NET приложений
    • Инструменты для нагрузочного тестирования веб-приложений
    • Основные подходы оптимизации веб-приложений
  2. Оптимизация инфраструктуры
    • Настройка IIS
    • Оптимизация статического контента
  3. Кеширование динамического контента
    • HTTP-кеширование
    • Серверное кеширование
    • Варьирование кэша на сервере
    • Использование кэша ASP.NET
    • Интеграция кэша ASP.NET и распределенного кэша
  4. Оптимизация работы с данными
    • Оптимизация Linq запросов
    • Оптимизация работы с базой на примере SQL Server
    • Оптимизация записи в СУБД
  5. Клиентская оптимизация
    • Минимизация и бандлинг
    • Оптимизация динамических изображений
    • Оптимизация загрузки страницы
    • Оптимизация выполнения скриптов
    • Оптимизация CSS
  6. Оптимизация серверного кода
    • Оптимизация веб-форм
    • Оптимизация WebAPI
    • Оптимизация.NET кода

Как видите — программа очень плотная и все надо успеть за один день. Так что не будет времени переливать из пустого в порожнее. Полученные знания вы сможете сразу же применить в своих проектах.

Стоимость семинара — 10,000 рублей с человека.

Внимание: если ни один из предложенных способов вам не поможет вам увеличить скорость работы или масштабируемость, то вы можете вернуть деньги. Серьезно.

Регистрируйтесь прямо сейчас, количество мест ограничено.

Поисковая оптимизация приложений в сторах

Автор: Денис Шелков, Appfollow.io

ASO (App Store Optimisation) – по сути, это SEO для мобильных приложений, поисковая оптимизация приложений в сторах.

Также, как и классическое SEO, ASO требует постоянной и комплексной работы по оптимизации приложения. ASO не может рассматриваться в отрыве от продукта и в отрыве от остальных маркетинговых активностей, покупного трафика и проч. Необходимо постоянно учитывать все изменения, происходящие в сторах, и все изменения в популярности поисковых запросов.

ASO может влиять на разные метрики и на качество трафика. То есть, можно влиять на свою целевую аудиторию, а также пытаться охватить всю аудиторию в сторе, до которой получится дотянуться.

Составляющие ASO:

  1. Поисковая видимость

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

  1. Оптимизация конверсии

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

  1. Работа с платным трафиком

Работа с Apple Search Ads и Google AdWords

  1. Мобильное SEO

Сейчас приложения получают трафик не только из сторов, но и из внешних источников: из веб-поиска, с сайтов iTunes Connect и других сайтов, где размещены ссылки на приложение.

ASO в App Store и Google Play

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

Что оптимизируется:

App Store – название, подзаголовок, ключевые слова

Google Play – название, краткое описание, полное описание

Подсказки = запросы

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

Различия в поисковой выдаче

  • В результатах поиска App Storе есть кнопка «установить», позволяющая начать установку приложения прямо со страницы выдачи, в результатах поиска Google Play такой кнопки нет, она скрыта в выпадающем меню
  • Наличие скриншотов в App Storе. Это безусловный плюс, однако, текст на этих скриншотах по большей части нечитаемый, и этому факту нужно уделять особенное внимание при выборе расположения визуальных элементов на странице приложения.

Также можно посоветовать делать выбор не в пользу горизонтальных, а в пользу вертикальных скриншотов для App Storе, либо вместо скриншотов установить видео. В случае установки видео, оно должно запускаться автоматически и без звука. С помощью видео можно отлично показать основные функции и геймплей приложения.

В Google Play возможность демонстрации видео также присутствует, однако оно находится на странице самого приложения, а не в поиске.

Еще одним важным изменением выдачи с выходом iOS11 стало появление в поиске страницы разработчика, а также возможности подписки и покупки прямо со страницы выдачи.

Еще несколько ключевых различий на поиске:

  • Название в App Storе должно быть меньше или равно 30 символам, а в Google Play – 50.
  • В App Storе есть подзаголовок (30 символов), который отображается на поиске, а в Google Play есть краткое описание (80 символов), которое в поиске не отображается.

Страница приложения в App Storе и Google Play

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

В App Storе места для промо-баннера нет, в этом и заключается главное отличие. В App Storе, также как и в Google Play появилась возможность расположения на странице приложения промо-текста, с возможностью раскрытия. Отличия заключаются только в расположении блоков с промо-текстом на странице (в App Storе – посередине, в Google Play – внизу), а также тем, что в App Storе слова в этом описании никак не влияют на поиск, а в Google Play – учитываются поиском. Поэтому при создании страницы приложения в Google Play необходимо помещать в описание нужные ключевые слова, чтобы появиться по этим запросам в выдаче.

Рейтинг


Что касается рейтинга приложения, то главное, что нужно знать, что рейтинг в App Storе обнуляется при каждом обновлении версии. Если вдруг была выпущена неудачная версия и приложение схватило много негатива, эта практика становится очень полезной, так как при обновлении версии весь негатив будет удален.

Ответы на отзывы

Теперь эта функция есть и в App Storе, главное, что необходимо делать разработчикам, это отвечать на вопросы своих пользователей, давать необходимые объяснения и т.д. Кроме того, что это увеличивает лояльность уже имеющихся пользователей приложения, оно также показывает другим пользователям, что разработчику не все равно, ему важен фидбэк от пользователей и он учитывает его для того, чтобы сделать свой продукт еще лучше.

ASO Эффективность

Предположим, что все действия по оптимизации приложения уже проделаны, как оценить эффективность всех приложенных усилий?

Для начала нужно обозначить вопросы, по которым продвигается приложение, и посмотреть, как изменились позиции, после проведения всех работ по ASO:

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

Однако, можно оценить суммарный эффект от ASO в консолях магазинов приложений — App Analytics (iTunes Connect) и User Acquisition (Google Play Console) — сравнив показатели «до» и «после»:

Кроме того в Ap Store и в Google Play можно посмотреть органический трафик из поиска, отмечая его уменьшение или увеличение после проведенных работ.

Показатели, которые нужно сравнивать после оптимизации:

  1. Количественные показатели:
  • установки
  • просмотры
  • показы (только в App Store)
  • конверсии в магазине приложений
  1. Качественные показатели:
  • процент удалений приложения
  • возвращаемость пользователей
  • повторные покупки

ASO-оптимизация приложений

Что такое ASO-оптимизация

ASO (App Store Optimization) — это эффективный канал привлечения пользователей. Оптимизация позволяет поднять приложение в топ App Store и Google Play, увеличить органические установки и количество заинтересованных юзеров.

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

Что вы получите после ASO-оптимизации?

Стоимость продвижения мобильных приложений

Менеджер свяжется
c вами в ближайшее время

Состав работ

Сбор семантического ядра

Разработка стратегии продвижения

Текстовая оптимизация

Визуальная оптимизация

Работа с отзывами и конверсией

Поддержка продвижения

Подбираем ключевые запросы, соответствующие тематике игры или приложения, и составляем семантическое ядро для каждой локальной версии приложения.

Готовое семантическое ядро

Подбор ключевых слов с помощью сервиса Яндекс.Вордстат

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

Оценка позиций приложения в поисковой выдаче App Store и Google Play в динамике и список действий, необходимых для ASO-оптимизации приложения.

На основе семантического ядра оптимизируем название, составляем описание и подбираем ключевые слова для приложения, чтобы они были релевантны поисковым запросам и соответствовали требованиям сторов.

Техническое задание для копирайтеров.

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

4 варианта иконки и 1 коллекция из 5 скриншотов.

Анализируем приложение, оцениваем текущие ASO-показатели и сравниваем показатель конверсии со средними по категории. Отслеживаем текущий рейтинг и изучаем отзывы пользователей.

Рост конверсии и объема трафика.

Отслеживаем позиции приложения в поисковой выдаче App Store и Google Play и разрабатываем рекомендации по улучшению видимости. Корректируем список ключевых слов и стратегию продвижения. Работаем с отзывами и установками. При необходимости для анализа эффективности и проверки различных гипотез проводим A/B тесты.

Динамика позиций приложения в поисковой выдаче App Store и Google Play с начала проекта и рекомендации по дальнейшему продвижению. Результаты A/B тестов.

Компания РА Своя Линия (Сеть клиник лазерной косметологии и пластической хирургии ЛИНЛАЙН, насчитывающая более 30 филиалов в России и за рубежом) выражает признательность рекламному агентству «Ашманов и партнеры» за успешную работу по увеличению числа лидов с контекстной рекламы во всех регионах присутствия.

Компания «Ашманов и партнеры» в лице команды проекта проявила себя как профессиональный, внимательный к клиенту, добросовестный и проактивный подрядчик. Специалисты агентства показали себя экспертами в области реализации и аналитики кампании контекстной рекламы.

Мы готовы рекомендовать агентство «Ашманов и партнеры» как надежного партнера, заинтересованного в развитии бизнеса своих заказчиков.

Трошкин Александр Георгиевич

Генеральный директор АО «Линлайн»

Компания Love-Piano (ИП Тимофеев Игорь Михайлович) выражает признательность рекламному агентству «Ашманов и партнеры» за успешную работу по ведению контекстной рекламной кампании и благодарит за профессиональный подход к реализации запланированной стратегии продвижения. Компания «Ашманов и партнеры» проявила себя как внимательный к клиенту, добросовестный и выполняющий свои задачи на высшем уровне подрядчик.

Также выражаем отдельную благодарность менеджеру по работе с клиентами Глушкову Александру за чуткое отношение к нашему проекту, скорость выполнения поставленных задач, проактивность и структурность в работе.

Будем рады дальнейшему и плодотворному сотрудничеству и уверены в том, что эксперты из «Ашманов и партнеры» помогут нам еще повысить эффективность нашего бизнеса.

Тимофеев Игорь Михайлович

Основатель компании Love-Piano

В качестве подрядчика для привлечения заинтересованных пользователей на сайт мы выбрали агентство «Ашманов и партнеры», которое предложило оптимальные условия и комплексный подход к продвижению.


Специалисты «Ашманов и партнеры» профессионально подошли к решению наших задач: внимательно изучили специфику нашего бизнеса, провели конкурентное исследование, выполнили комплексный аудит нашего сайта, устранили на нем технические ошибки, разработали и внедрили стратегию продвижения, которая уже доказала свою эффективность.

Сотрудничество с «Ашманов и партнеры» позволило нам привлекать на сайт втрое больше целевых посетителей из поисковых систем. При этом на сайте больше нет сезонного падения трафика, свойственного нашей отрасли. Особенно хотим отметить регулярные подробные отчеты, наглядно показывающие результаты предпринимаемых действий.

Мы планируем продолжить совместную работу с «Ашманов и партнеры» и рекомендуем это агентство как профессионального, исполнительного подрядчика, который внимательно относится к пожеланиям клиентов.

Воробьев Валерий Анатольевич

ООО «МК «Семейный доктор» выражает благодарность компании «Ашманов и партнеры» за плодотворное сотрудничество, целью которого является продвижение нашего сайта.

За время сотрудничества организация проявила себя надежным, профессиональным и ответственным партнером.

Особую благодарность хочется выразить менеджеру — Ирине Булгаковой, которая внимательно, ответственно и своевременно выполняет свои обязанности.

Надеемся, что вы не измените выбранной политике общения с клиентами и надолго останетесь надежным и достойным доверия партнером.

ООО «Лечебно-диагностический центр на Вернадского» в лице генерального директора Казакова Ильи Владимировича, выражает признательность компании «Ашманов и партнеры» за успешную работу по ведению рекламной кампании и благодарит за профессиональный подход к реализации разработанной ими стратегии продвижения.

Рассчитываем на дальнейшее плодотворное сотрудничество и уверены в том, что эксперты из «Ашманов и партнеры» помогут нам еще больше повысить эффективность нашего бизнеса.

Казаков Илья Владимирович

Компания ООО «УК МОСЦВЕТТОРГ» выражает признательность компании «Ашманов и партнеры» за плодотворное сотрудничество в рамках контракта по ведению контекстной рекламы. Специалисты агентства показали себя настоящими профессионалами, успешно и своевременного решали все поставленные задачи.

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

Ториков Андрей Александрович

Мы сотрудничаем с компанией «Ашманов и партнеры» с января 2020 года. Эксперты компании провели поисковый аудит нашего сайта и разработали рекомендации по устранению технических недочетов на сайте.

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

Кроме того, специалисты «Ашманов и партнеры» провели конкурентный анализ, а также разработали прототипы и макеты страниц нового сайта с учетом современных требований к юзабилити и поисковому продвижению.

В настоящее время «Ашманов и партнеры» ведет весь комплекс работ по поисковому продвижению нашего сайта. Рекомендуем компанию как ответственного подрядчика, который системно подходит к решению задач, вникает в специфику бизнеса и оперативно реагирует на пожелания.

Директор по связям с общественностью и информационной политике Группа ПОЛИПЛАСТИК

С компанией «Ашманов и партнеры Санкт-Петербург» Банк «Санкт-Петербург» сотрудничает с 2014 года. За время сотрудничества мы наблюдаем положительную динамику в продвижении сайта: количество переходов из поисковых систем увеличилось в 2 раза, видимость по тематическим запросам выросла более чем в 4 раза. Команда «Ашманов и партнеры» продемонстрировала профессионализм и ответственность в решении поставленных задач! Мы уверены в дальнейшем плодотворном сотрудничестве! Также выражаем благодарность ведущему менеджеру Ивановой Дарье за пунктуальность, аккуратность в работе, проактивных подход и личную заинтересованность в высоких результатах.

Вице-президент, директор Диджитал департамента ПАО «Банк «Санкт-Петербург»

Компания «Зодчий» в лице заместителя генерального директора по маркетингу и рекламе Груниной И.В. выражает признательность компании «Ашманов и партнеры» за эффективное продвижение в поисковых системах и ведение комплексной рекламной кампании.

Специалисты «Ашманов и партнеры» продемонстрировали высокий профессионализм в планировании и реализации продвижения нашей компании и слаженную работу всей проектной группы.

Отдельно благодарим менеджеров проекта Алана Догузова и Романа Чередника, специалиста по медийной рекламе Николая Сизова, специалиста по контекстной рекламе Кирилла Федорова, специалистов по SMM Владислава Синчугова и Ивана Гойдышева, аналитика Тимура Конопацкого.

Надеемся на дальнейшее плодотворное сотрудничество и готовы рекомендовать «Ашманов и партнеры» как надежного подрядчика.

Заместитель генерального директора по маркетингу и рекламе ООО «Зодчий.ру»

Сотрудничество с компанией «Ашманов и партнеры» было необходимо для дальнейшего развития сайта ИД «Коммерсантъ»: всестороннего аудита существующих версий сайта, поиска слабых мест и разработки рекомендаций по улучшению каждой из версий сайта. Среди возможных подрядчиков компания «Ашманов и партнеры» обладала наиболее внушительным опытом комплексной работы над крупными интернет-проектами с большой аудиторией.

Специалисты агентства провели поисковый аудит, юзабилити-аудит, юзабилити-тестирование страниц сайта, анализ конкурентов и анализ мобильной версии сайта. По итогам комплексного аудита был разработан комплекс мероприятий, в процессе внедрения сотрудники продолжали консультировать специалистов ИД «Коммерсантъ» по необходимым изменениям на сайте.

Надеемся на дальнейшее плодотворное сотрудничество с компанией «Ашманов и партнеры».

Выражаем особую признательность менеджеру Ольге Сокольской за внимательное отношение к нашим пожеланиям, профессионализм, оперативность и понимание особенностей работы крупного медийного проекта.

Директор по информационно-цифровым платформам АО КоммерсантЪ

Сотрудничаю с компанией «Ашманов и партнеры» уже много лет, работая в разных организациях. Компания на рынке СЕО появилась одной из первых и за эти годы зарекомендовала себя, как команда профессионалов, чьи услуги, конечно, не дешевы, но они того стоят.

Подкупает ответственность компании «Ашманов и партнеры» перед клиентами, стремление совершенствоваться самим и помогать совершенствоваться нам.

Последний из совместных проектов с компанией «Ашманов и партнеры» — запуск сайта после редизайна. Очень важным моментом было то, что разработка структуры и дизайна сайта шла параллельно с проработкой специалистами компании наших действий в плане оптимизации. Это дало возможность минимизировать риски при запуске нового сайта и сохранить хорошие позиции.

Отдельно хочу отметить работу нашего аккаунт-менеджера, Денисова Павла, который не только ведет наш проект в режиме он-лайн, но и всегда готов предложить новые решения для улучшения нашей работы и помочь в их воплощении.

Репутация компании «Ашманов и партнеры» говорит сама за себя. И я смело могу рекомендовать ее, как надежного и заслуживающего внимания партнера.

Бренд-менеджер ООО «Ренамакс»

После смены дизайна на сайте vedomosti.ru мы захотели: 1) выяснить, с какими проблемами столкнулись наши читатели; 2) увеличить поисковый трафик. За консультацией обратились в компанию «Ашманов и партнеры».

Специалисты «Ашманов и партнеры» провели поисковый и юзабилити-аудит нового сайта и его мобильной версии, а затем разработали подробные рекомендации по устранению ошибок. Кроме того, они протестировали все аспекты работы мобильного приложения нашего издания и разработали отдельные рекомендации по исправлению ошибок и улучшению навигации и удобства пользователей.

Мы довольны сотрудничеством с компанией «Ашманов и партнеры» и рекомендуем их как внимательного, исполнительного подрядчика. Отдельно благодарим менеджера Ольгу Сокольскую, которая четко контролировала работы по аудиту и разработке рекомендаций, а также оперативно и обстоятельно отвечала на все наши вопросы.

Прозоров Глеб Борисович

Генеральный директор АО «Бизнес Ньюс Медиа»

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

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

По каждому этапу эксперты из «Ашманов и партнеры» предоставили подробные, наглядные отчеты и разработали рекомендации. Каждой задаче,которую необходимо решить, они назначили приоритетность, а затем предложили общую стратегию поискового продвижения. Ознакомившись с предложенной стратегией, мы быстро разобрались, на чем сконцентрировать наши дальнейшие усилия в первую очередь, чтобы получить наибольшую отдачу от вложенных усилий.

Благодарим специалистов компании «Ашманов и партнеры» за профессиональный и ответственный подход к решению задачи.

Заместитель руководителя отдела рекламы АвтоГЕРМЕС-Запад

Компания СОЮЗСПЕЦОДЕЖДА выражает благодарность всем сотрудникам ООО «Ашманов и партнеры» за профессиональную работу.

Специалисты компании регулярно проводят большой комплекс мероприятий по продвижению нашего сайта в поисковых системах.

После трех месяцев совместной работы наш сайт закрепился на первых местах по многим ключевым для нас запросам, увеличилось число посетителей из поисковых систем и выросли продажи. Специалисты компании провели полный SEO-аудит нашего сайта. По итогам аудита они разработали рекомендации по улучшению коммерческой составляющей сайта, а также предложили варианты переработки ключевых странице нашего интернет-магазина. Главная страница сайта и формы обратной связи стали понятнее и удобнее, мы стали лучше понимать объективную конкурентоспособность нашего интернет-магазина. Кроме этого, мы получили ценные рекомендации по улучшению обработки заказов. Вместе со специалистами «Ашманов и партнеры» мы разработали и начали внедрять стратегию регионального продвижения сайта.

Благодаря работе специалистов ООО «Ашманов и партнеры» мы делаем наш сайт более удобным для наших клиентов и эта работа продолжается.

Гамшеев Юрий Викторович

Генеральный директор Союзспецодежда-Центр

Компания ООО «Антэк» благодарит агентство «Ашманов и партнеры» за профессионализм и ответственный подход к решению поставленных задач. Специалисты агентства показали себя экспертами в области стратегического планирования и реализации кампаний контекстной рекламы, быстро отвечали на все наши вопросы и обучали наших сотрудников.

Надеемся на дальнейшее плодотворное сотрудничество и готовы порекомендовать компанию «Ашманов и партнеры» как надежного партнера, заинтересованного в развитии бизнеса своих заказчиков.

Завражин Денис Викторович

Компания «Дёке Экстружн» плодотворно сотрудничает с компанией «Ашманов и партнеры» с 2009 года. Благодарим специалистов компании за качественную работу, оперативное решение всех возникающих вопросов и обучение контекстной рекламе.

Рекомендуем «Ашманов и партнеры» как надежного и ответственного партнера, заинтересованного в многостороннем развитии бизнеса своих клиентов.

Чернова Елена Павловна

Проведенная рекламная кампания создала требуемый медийный эффект, как результат — мы получили приток новой аудитории на сайт. Благодаря реализованным дополнительным бонусным объемам и оптимизированной закупке, средние стоимостные показатели по отдельным площадкам удалось снизить на 15–25% от изначально запланированных.

Мы очень рады, что обратились к коллегам из «Ашманов и партнеры» за помощью. Им удалось успешно справиться с поставленной задачей и реализовать нашу кампанию.

Рекомендации по повышению производительности ASP.NET Core ASP.NET Core Performance Best Practices

В этой статье приводятся рекомендации по обеспечению оптимальной производительности с помощью ASP.NET Core. This article provides guidelines for performance best practices with ASP.NET Core.


Агрессивный кэш Cache aggressively

Кэширование рассматривается в нескольких частях этого документа. Caching is discussed in several parts of this document. Для получения дополнительной информации см. Кэширование ответов в ASP.NET Core. For more information, see Кэширование ответов в ASP.NET Core.

Общие сведения о путях к горячему коду Understand hot code paths

В этом документе путь к горячему коду определяется как часто называемый путь к коду и где возникает большая часть времени выполнения. In this document, a hot code path is defined as a code path that is frequently called and where much of the execution time occurs. Пути с горячим кодом обычно ограничивают масштаб и производительность приложения и обсуждаются в нескольких частях этого документа. Hot code paths typically limit app scale-out and performance and are discussed in several parts of this document.

Избегайте блокирующих вызовов Avoid blocking calls

ASP.NET Core приложения предназначены для одновременной обработки нескольких запросов. ASP.NET Core apps should be designed to process many requests simultaneously. Асинхронные интерфейсы API позволяют небольшому пулу потоков работать с тысячами одновременных запросов, не дожидаясь блокировки вызовов. Asynchronous APIs allow a small pool of threads to handle thousands of concurrent requests by not waiting on blocking calls. Вместо ожидания завершения длительной синхронной задачи поток может работать с другим запросом. Rather than waiting on a long-running synchronous task to complete, the thread can work on another request.

Распространенная проблема производительности в ASP.NET Core приложениях — блокировка вызовов, которые могут быть асинхронными. A common performance problem in ASP.NET Core apps is blocking calls that could be asynchronous. Многие синхронные блокирующие вызовы ведут к нехватке пула потоков и снижению времени отклика. Many synchronous blocking calls lead to Thread Pool starvation and degraded response times.

Не выполнять: Do not:

  • Блокировать асинхронное выполнение путем вызова Task. Wait или Task. Result. Block asynchronous execution by calling Task.Wait or Task.Result.
  • Получение блокировок в общих путях кода. Acquire locks in common code paths. ASP.NET Core приложения являются наиболее производительными при разработке архитектуры для параллельного выполнения кода. ASP.NET Core apps are most performant when architected to run code in parallel.

Выполнитеследующие действия. Do:

  • Сделайте неактивные пути к коду асинхронными. Make hot code paths asynchronous.
  • Асинхронный вызов API-интерфейсов доступа к данным и долгосрочных операций. Call data access and long-running operations APIs asynchronously.
  • Выполнение асинхронных действий контроллера/Razor Page. Make controller/Razor Page actions asynchronous. Весь стек вызовов является асинхронным, чтобы воспользоваться преимуществами шаблонов async/await . The entire call stack is asynchronous in order to benefit from async/await patterns.

Профилировщик, например PerfView, можно использовать для поиска потоков, часто добавляемых в пул потоков. A profiler, such as PerfView, can be used to find threads frequently added to the Thread Pool. Событие Microsoft-Windows-DotNETRuntime/ThreadPoolWorkerThread/Start указывает поток, добавленный в пул потоков. The Microsoft-Windows-DotNETRuntime/ThreadPoolWorkerThread/Start event indicates a thread added to the thread pool.

Сведение к минимальному выделению больших объектов Minimize large object allocations

Сборщик мусора .NET Core управляет выделением и освобождением памяти автоматически в ASP.NET Core приложениях. The .NET Core garbage collector manages allocation and release of memory automatically in ASP.NET Core apps. Автоматическая сборка мусора обычно означает, что разработчикам не нужно беспокоиться о том, как или когда освобождается память. Automatic garbage collection generally means that developers don’t need to worry about how or when memory is freed. Тем не менее очистка объектов, на которые нет ссылок, занимает время ЦП, поэтому разработчики должны максимально сокращать выделение объектов в путях горячего кода. However, cleaning up unreferenced objects takes CPU time, so developers should minimize allocating objects in hot code paths. Сборка мусора особенно затратна на большие объекты (> 85 КБайт). Garbage collection is especially expensive on large objects (> 85 K bytes). Большие объекты хранятся в куче больших объектов и для очистки требуется полная сборка мусора (поколение 2). Large objects are stored on the large object heap and require a full (generation 2) garbage collection to clean up. В отличие от коллекций поколений 0 и поколения 1, сборка поколения 2 требует временной приостановки выполнения приложения. Unlike generation 0 and generation 1 collections, a generation 2 collection requires a temporary suspension of app execution. Частое выделение и освобождение больших объектов могут привести к нестабильной производительности. Frequent allocation and de-allocation of large objects can cause inconsistent performance.

  • Рассмотрите возможность кэширования больших объектов, которые часто используются. Do consider caching large objects that are frequently used. Кэширование больших объектов предотвращает дорогостоящее выделение памяти. Caching large objects prevents expensive allocations.
  • Сделайте буферы пула, используя ArrayPool для хранения больших массивов. Do pool buffers by using an ArrayPool to store large arrays.
  • Не выделяйте большое количество кратковременных больших объектов в пути горячего кода. Do not allocate many, short-lived large objects on hot code paths.

Проблемы с памятью, например предшествующие, можно диагностировать путем просмотра статистики сборщика мусора (GC) в PerfView и изучения: Memory issues, such as the preceding, can be diagnosed by reviewing garbage collection (GC) stats in PerfView and examining:

  • Время остановки сборки мусора. Garbage collection pause time.
  • Процент времени процессора, затраченный на сборку мусора. What percentage of the processor time is spent in garbage collection.
  • Количество сборок мусора, которые являются поколением 0, 1 и 2. How many garbage collections are generation 0, 1, and 2.

Дополнительные сведения см. в разделе сбор мусора и производительность. For more information, see Garbage Collection and Performance.

Оптимизация доступа к данным Optimize Data Access

Взаимодействие с хранилищем данных и другими удаленными службами часто является наиболее медленной частью ASP.NET Core приложения. Interactions with a data store and other remote services are often the slowest parts of an ASP.NET Core app. Эффективное чтение и запись данных крайне важно для обеспечения высокой производительности. Reading and writing data efficiently is critical for good performance.

  • Вызывайте все API доступа к данным в асинхронном режиме. Do call all data access APIs asynchronously.
  • Не извлекать больше данных, чем требуется. Do not retrieve more data than is necessary. Напишите запросы, возвращающие только те данные, которые необходимы для текущего HTTP-запроса. Write queries to return just the data that’s necessary for the current HTTP request.
  • Рассмотрите возможность кэширования часто используемых данных, полученных из базы данных или удаленной службы, если это приемлемо для более неактуальных данных. Do consider caching frequently accessed data retrieved from a database or remote service if slightly out-of-date data is acceptable. В зависимости от сценария используйте MemoryCache или DistributedCache. Depending on the scenario, use a MemoryCache or a DistributedCache. Для получения дополнительной информации см. Кэширование ответов в ASP.NET Core. For more information, see Кэширование ответов в ASP.NET Core.
  • Сократите круговые обходов сети. Do minimize network round trips. Целью является получение необходимых данных в одном вызове, а не в нескольких вызовах. The goal is to retrieve the required data in a single call rather than several calls.
  • Не используйте запросы без отслеживания в Entity Framework Core при доступе к данным в целях только для чтения. Do use no-tracking queries in Entity Framework Core when accessing data for read-only purposes. EF Core могут более эффективно возвращать результаты запросов без отслеживания. EF Core can return the results of no-tracking queries more efficiently.
  • Выполните фильтрацию и агрегирование запросов LINQ (например, с помощью .Where , .Select или инструкций .Sum ), чтобы фильтрация выполнялась базой данных. Do filter and aggregate LINQ queries (with .Where , .Select , or .Sum statements, for example) so that the filtering is performed by the database.
  • Учтите, что EF Core разрешает некоторые операторы запросов на клиенте, что может привести к неэффективному выполнению запроса. Do consider that EF Core resolves some query operators on the client, which may lead to inefficient query execution. Дополнительные сведения см. в статье проблемы с производительностью оценки клиента. For more information, see Client evaluation performance issues.
  • Не Используйте проекции запросов к коллекциям, что может привести к выполнению запросов SQL N + 1. Do not use projection queries on collections, which can result in executing «N + 1» SQL queries. Дополнительные сведения см. в разделе Оптимизация коррелированных вложенных запросов. For more information, see Optimization of correlated subqueries.

Методы, которые могут повысить производительность в крупномасштабных приложениях, см. в статье Высокая производительность . See EF High Performance for approaches that may improve performance in high-scale apps:

Мы рекомендуем оценить влияние предыдущих высокопроизводительных подходов перед фиксацией базы кода. We recommend measuring the impact of the preceding high-performance approaches before committing the code base. Дополнительная сложность скомпилированных запросов может не отнять повышение производительности. The additional complexity of compiled queries may not justify the performance improvement.

Проблемы запросов можно обнаружить, просмотрев время, затраченное на доступ к данным с помощью Application Insights или с помощью средств профилирования. Query issues can be detected by reviewing the time spent accessing data with Application Insights or with profiling tools. В большинстве баз данных также доступна статистика, касающаяся часто выполняемых запросов. Most databases also make statistics available concerning frequently executed queries.

HTTP-соединения пула с Хттпклиентфактори Pool HTTP connections with HttpClientFactory

Хотя HttpClient реализует интерфейс IDisposable , он предназначен для повторного использования. Although HttpClient implements the IDisposable interface, it’s designed for reuse. Закрытые экземпляры HttpClient оставлять сокеты открытыми в TIME_WAIT состоянии в течение короткого периода времени. Closed HttpClient instances leave sockets open in the TIME_WAIT state for a short period of time. Если часто используется путь кода, который создает и уничтожает объекты HttpClient , приложение может вычерпать доступные сокеты. If a code path that creates and disposes of HttpClient objects is frequently used, the app may exhaust available sockets. Хттпклиентфактори был представлен в ASP.NET Core 2,1 в качестве решения этой проблемы. HttpClientFactory was introduced in ASP.NET Core 2.1 as a solution to this problem. Он обрабатывает подключения по протоколу HTTP для оптимизации производительности и надежности. It handles pooling HTTP connections to optimize performance and reliability.

  • Не Создавайте и удаляйте экземпляры HttpClient напрямую. Do not create and dispose of HttpClient instances directly.
  • Используйтехттпклиентфактори для получения экземпляров HttpClient . Do use HttpClientFactory to retrieve HttpClient instances. Дополнительные сведения см. в статье Использование хттпклиентфактори для реализации устойчивых HTTP-запросов. For more information, see Use HttpClientFactory to implement resilient HTTP requests.

Быстрое отслеживание общих путей кода Keep common code paths fast

Необходимо, чтобы весь код был быстрым, часто называемым путями кода, наиболее критичным для оптимизации: You want all of your code to be fast, frequently called code paths are the most critical to optimize:

  • Компоненты по промежуточного слоя в конвейере обработки запросов приложения, особенно по промежуточного слоя выполняются на раннем этапе конвейера. Middleware components in the app’s request processing pipeline, especially middleware run early in the pipeline. Эти компоненты сильно влияют на производительность. These components have a large impact on performance.
  • Код, который выполняется для каждого запроса или несколько раз для каждого запроса. Code that’s executed for every request or multiple times per request. Например, пользовательское ведение журнала, обработчики авторизации или инициализацию временных служб. For example, custom logging, authorization handlers, or initialization of transient services.
  • Не используйте пользовательские компоненты промежуточного слоя с долго выполняющимися задачами. Do not use custom middleware components with long-running tasks.
  • Используйте средства профилирования производительности, такие как Visual Studio средства диагностики или PerfView), для указания путей использования горячих кодов. Do use performance profiling tools, such as Visual Studio Diagnostic Tools or PerfView), to identify hot code paths.

Выполнение длительных задач за пределами HTTP-запросов Complete long-running Tasks outside of HTTP requests

Большинство запросов к ASP.NET Core приложению могут обрабатываться контроллером или моделью страницы, вызывающими необходимые службы и возвращающими ответ HTTP. Most requests to an ASP.NET Core app can be handled by a controller or page model calling necessary services and returning an HTTP response. Для некоторых запросов, в которых задействованы длительные задачи, лучше сделать весь процесс «запрос-ответ» асинхронным. For some requests that involve long-running tasks, it’s better to make the entire request-response process asynchronous.

  • Не дожидаться завершения длительных задач в рамках обычной обработки HTTP-запросов. Do not wait for long-running tasks to complete as part of ordinary HTTP request processing.
  • Рассмотрите возможность обработки долго выполняющихся запросов с помощью фоновых служб или вне процесса с помощью функции Azure. Do consider handling long-running requests with background services or out of process with an Azure Function. Завершение работы вне процесса особенно полезно для ресурсоемких задач. Completing work out-of-process is especially beneficial for CPU-intensive tasks.
  • Используйте параметры связи в режиме реального времени, такие как SignalR, для асинхронной связи с клиентами. Do use real-time communication options, such as SignalR, to communicate with clients asynchronously.

Ресурсы клиента уменьшение Minify client assets

ASP.NET Core приложения с комплексными внешними интерфейсами часто обслуживают множество файлов JavaScript, CSS или изображений. ASP.NET Core apps with complex front-ends frequently serve many JavaScript, CSS, or image files. Производительность запросов начальной загрузки можно улучшить следующим образом. Performance of initial load requests can be improved by:

  • Объединение, объединяющее несколько файлов в один. Bundling, which combines multiple files into one.
  • Минификация, что сокращает размер файлов, удаляя пробелы и комментарии. Minifying, which reduces the size of files by removing whitespace and comments.
  • Используйтевстроенную поддержку ASP.NET Core для объединения и Минификация клиентских ресурсов. Do use ASP.NET Core’s built-in support for bundling and minifying client assets.
  • Ознакомьтесь с другими сторонними инструментами, такими как веб- пакет, для комплексного управления клиентскими ресурсами. Do consider other third-party tools, such as Webpack, for complex client asset management.

Сжатие ответов Compress responses

Уменьшение размера ответа обычно значительно увеличивает скорость реагирования приложения. Reducing the size of the response usually increases the responsiveness of an app, often dramatically. Одним из способов уменьшения размера полезных данных является сжатие ответов приложения. One way to reduce payload sizes is to compress an app’s responses. Дополнительные сведения см. в разделе сжатие ответов. For more information, see Response compression.

Использование последней версии ASP.NET Core Use the latest ASP.NET Core release

Каждый новый выпуск ASP.NET Core включает улучшения производительности. Each new release of ASP.NET Core includes performance improvements. Оптимизация в .NET Core и ASP.NET Core означает, что более новые версии обычно более эффективны старые версии. Optimizations in .NET Core and ASP.NET Core mean that newer versions generally outperform older versions. Например, в .NET Core 2,1 добавлена поддержка скомпилированных регулярных выражений и выиграли из Span . For example, .NET Core 2.1 added support for compiled regular expressions and benefitted from Span . В ASP.NET Core 2,2 добавлена поддержка HTTP/2. ASP.NET Core 2.2 added support for HTTP/2. ASP.NET Core 3,0 добавляет множество улучшений , которые уменьшают использование памяти и увеличивают пропускную способность. ASP.NET Core 3.0 adds many improvements that reduce memory usage and improve throughput. Если производительность является приоритетной, рассмотрите возможность обновления до текущей версии ASP.NET Core. If performance is a priority, consider upgrading to the current version of ASP.NET Core.

Уменьшение числа исключений Minimize exceptions

Исключения должны быть редкими. Exceptions should be rare. Создание и перехват исключений происходит очень долго относительно других шаблонов потока кода. Throwing and catching exceptions is slow relative to other code flow patterns. Поэтому исключения не должны использоваться для управления нормальным выполнением программы. Because of this, exceptions shouldn’t be used to control normal program flow.

  • Не используйте генерацию или перехват исключений в качестве средства обычного потока программы, особенно в путях горячего кода. Do not use throwing or catching exceptions as a means of normal program flow, especially in hot code paths.
  • Включите в приложение логику для обнаружения и обработки условий, вызывающих исключение. Do include logic in the app to detect and handle conditions that would cause an exception.
  • Вызывайте или перехватите исключения для необычных или непредвиденных условий. Do throw or catch exceptions for unusual or unexpected conditions.

Средства диагностики приложений, такие как Application Insights, могут помочь в определении распространенных исключений в приложении, которое может повлиять на производительность. App diagnostic tools, such as Application Insights, can help to identify common exceptions in an app that may affect performance.

Производительность и надежность Performance and reliability

Следующие разделы содержат советы по повышению производительности и известным проблемам надежности и решениям. The following sections provide performance tips and known reliability problems and solutions.

Избегайте синхронного чтения или записи в тексте HttpRequest/HttpResponse Avoid synchronous read or write on HttpRequest/HttpResponse body

Все операции ввода-вывода в ASP.NET Core являются асинхронными. All IO in ASP.NET Core is asynchronous. Серверы реализуют интерфейс Stream , который имеет как синхронные, так и асинхронные перегрузки. Servers implement the Stream interface, which has both synchronous and asynchronous overloads. Асинхронные объекты должны быть предпочтительнее, чтобы избежать блокирования потоков пула потоков. The asynchronous ones should be preferred to avoid blocking thread pool threads. Блокировка потоков может привести к нехватке пула потоков. Blocking threads can lead to thread pool starvation.

Не Выменяйте это: В следующем примере используется ReadToEnd. Do not do this: The following example uses the ReadToEnd. Он блокирует текущий поток для ожидания результата. It blocks the current thread to wait for the result. Это пример синхронизации через Async. This is an example of sync over async.


В приведенном выше коде Get синхронно считывает весь текст HTTP-запроса в память. In the preceding code, Get synchronously reads the entire HTTP request body into memory. Если клиент медленно отправляется, приложение выполняет синхронизацию асинхронно. If the client is slowly uploading, the app is doing sync over async. Приложение выполняет синхронизацию асинхронно, так как Kestrel не поддерживает синхронные операции чтения. The app does sync over async because Kestrel does NOT support synchronous reads.

Выполните следующие действия. В следующем примере используется ReadToEndAsync и не блокируется поток при чтении. Do this: The following example uses ReadToEndAsync and does not block the thread while reading.

Приведенный выше код асинхронно считывает весь текст HTTP-запроса в память. The preceding code asynchronously reads the entire HTTP request body into memory.

Если запрос имеет большой размер, чтение всего текста HTTP-запроса в память может привести к нехватке памяти. If the request is large, reading the entire HTTP request body into memory could lead to an out of memory (OOM) condition. Сбой может привести к отказу в обслуживании. OOM can result in a Denial Of Service. Дополнительные сведения см. в разделе избежание считывания текста большого запроса или тела ответа в память в этом документе. For more information, see Avoid reading large request bodies or response bodies into memory in this document.

Выполните следующие действия. Следующий пример полностью асинхронно использует текст запроса без буферизации: Do this: The following example is fully asynchronous using a non buffered request body:

Приведенный выше код асинхронно десериализует текст запроса в C# объект. The preceding code asynchronously de-serializes the request body into a C# object.

Предпочитать Реадформасинк по запросу. Form Prefer ReadFormAsync over Request.Form

Используйте HttpContext.Request.ReadFormAsync вместо HttpContext.Request.Form . Use HttpContext.Request.ReadFormAsync instead of HttpContext.Request.Form . HttpContext.Request.Form может быть безопасно прочитана только со следующими условиями: HttpContext.Request.Form can be safely read only with the following conditions:

  • Форма была считана вызовом ReadFormAsync и The form has been read by a call to ReadFormAsync , and
  • Кэшированное значение формы считывается с помощью HttpContext.Request.Form The cached form value is being read using HttpContext.Request.Form

Не Выменяйте это: В следующем примере используется HttpContext.Request.Form . Do not do this: The following example uses HttpContext.Request.Form . HttpContext.Request.Form использует синхронизацию асинхронно и может привести к нехватке пула потоков. HttpContext.Request.Form uses sync over async and can lead to thread pool starvation.

Выполните следующие действия. В следующем примере HttpContext.Request.ReadFormAsync используется для асинхронного чтения текста формы. Do this: The following example uses HttpContext.Request.ReadFormAsync to read the form body asynchronously.

Избегайте считывания текста крупного запроса или тела ответа в память Avoid reading large request bodies or response bodies into memory

В .NET каждое выделение объектов, превышающее 85 КБ, заканчивается в куче больших объектов (LOH). In .NET, every object allocation greater than 85 KB ends up in the large object heap (LOH). Большие объекты являются ресурсоемкими двумя способами: Large objects are expensive in two ways:

  • Стоимость выделения высока, так как память для вновь выделенного большого объекта должна быть сброшена. The allocation cost is high because the memory for a newly allocated large object has to be cleared. Среда CLR гарантирует, что память для всех вновь выделяемых объектов будет сброшена. The CLR guarantees that memory for all newly allocated objects is cleared.
  • LOH собирается вместе с остальной частью кучи. LOH is collected with the rest of the heap. Для LOH требуется полная сборка мусора или коллекция Gen2. LOH requires a full garbage collection or Gen2 collection.

Эта запись блога кратко описывает проблему: This blog post describes the problem succinctly:

При выделении большого объекта он помечается как объект Gen 2. When a large object is allocated, it’s marked as Gen 2 object. Не Gen 0 как для небольших объектов. Not Gen 0 as for small objects. Последствия в том, что если в LOH исчерпана память, сборщик мусора очищает всю управляемую кучу, а не только LOH. The consequences are that if you run out of memory in LOH, GC cleans up the whole managed heap, not only LOH. Он очищает Gen 0, Gen 1 и Gen 2, включая LOH. So it cleans up Gen 0, Gen 1 and Gen 2 including LOH. Это называется полной сборкой мусора и является наиболее длительным сбором мусора. This is called full garbage collection and is the most time-consuming garbage collection. Для многих приложений это может быть приемлемым. For many applications, it can be acceptable. Но определенно не для высокопроизводительных веб-серверов, где несколько больших буферов памяти требуются для обработки среднего веб-запроса (чтение из сокета, распаковка, декодирование JSON & больше). But definitely not for high-performance web servers, where few big memory buffers are needed to handle an average web request (read from a socket, decompress, decode JSON & more).

Простое хранение большого запроса или текста ответа в одном byte[] или string : Naively storing a large request or response body into a single byte[] or string :

  • Может привести к быстрому запуску пространства в LOH. May result in quickly running out of space in the LOH.
  • Может вызвать проблемы с производительностью приложения из-за выполнения полных GC. May cause performance issues for the app because of full GCs running.

Работа с синхронным интерфейсом API обработки данных Working with a synchronous data processing API

При использовании сериализатора или отмены сериализатора, поддерживающего только синхронные операции чтения и записи (например, JSON.NET): When using a serializer/de-serializer that only supports synchronous reads and writes (for example, JSON.NET):

  • Асинхронная буферизация данных в память перед их передачей в сериализатор/de-сериализатор. Buffer the data into memory asynchronously before passing it into the serializer/de-serializer.

Если запрос большой, это может привести к нехватке памяти («нехватки»). If the request is large, it could lead to an out of memory (OOM) condition. Сбой может привести к отказу в обслуживании. OOM can result in a Denial Of Service. Дополнительные сведения см. в разделе избежание считывания текста большого запроса или тела ответа в память в этом документе. For more information, see Avoid reading large request bodies or response bodies into memory in this document.

ASP.NET Core 3,0 по умолчанию использует System.Text.Json для сериализации JSON. ASP.NET Core 3.0 uses System.Text.Json by default for JSON serialization. System.Text.Json. System.Text.Json:

  • асинхронно считывает и записывает JSON; Reads and writes JSON asynchronously.
  • оптимизирован для текста UTF-8; Is optimized for UTF-8 text.
  • предоставляет более высокую производительность, чем Newtonsoft.Json . Typically higher performance than Newtonsoft.Json .

Не хранить Ихттпконтекстакцессор. HttpContext в поле Do not store IHttpContextAccessor.HttpContext in a field

Ихттпконтекстакцессор. HttpContext возвращает HttpContext активного запроса при доступе из потока запроса. The IHttpContextAccessor.HttpContext returns the HttpContext of the active request when accessed from the request thread. IHttpContextAccessor.HttpContext не должны храниться в поле или переменной. The IHttpContextAccessor.HttpContext should not be stored in a field or variable.

Не Выменяйте это: В следующем примере HttpContext сохраняется в поле, а затем попытается использовать его позже. Do not do this: The following example stores the HttpContext in a field, and then attempts to use it later.

В приведенном выше коде часто записывается значение null или неверный HttpContext в конструкторе. The preceding code frequently captures a null or incorrect HttpContext in the constructor.

Выполните следующие действия. Следующий пример: Do this: The following example:

  • Хранит IHttpContextAccessor в поле. Stores the IHttpContextAccessor in a field.
  • Использует поле HttpContext в нужное время и проверяет наличие null . Uses the HttpContext field at the correct time and checks for null .

Не обращаться к HttpContext из нескольких потоков Do not access HttpContext from multiple threads

HttpContext не является потокобезопасным. HttpContext is NOT thread-safe. Параллельный доступ к HttpContext из нескольких потоков может привести к неопределенному поведению, такому как зависание, сбои и повреждение данных. Accessing HttpContext from multiple threads in parallel can result in undefined behavior such as hangs, crashes, and data corruption.

Не Выменяйте это: В следующем примере выполняется три параллельных запроса и записывается путь к входящему запросу до и после исходящего HTTP-запроса. Do not do this: The following example makes three parallel requests and logs the incoming request path before and after the outgoing HTTP request. Доступ к пути запроса осуществляется из нескольких потоков, которые могут быть параллельными. The request path is accessed from multiple threads, potentially in parallel.

Выполните следующие действия. В следующем примере все данные из входящего запроса копируются перед выполнением трех параллельных запросов. Do this: The following example copies all data from the incoming request before making the three parallel requests.

Не используйте HttpContext после завершения запроса Do not use the HttpContext after the request is complete

HttpContext допустимо только при условии, что в конвейере ASP.NET Core есть активный HTTP-запрос. HttpContext is only valid as long as there is an active HTTP request in the ASP.NET Core pipeline. Весь конвейер ASP.NET Core является асинхронной цепочкой делегатов, выполняющих каждый запрос. The entire ASP.NET Core pipeline is an asynchronous chain of delegates that executes every request. После завершения Task , возвращенного из этой цепочки, HttpContext перезапускается. When the Task returned from this chain completes, the HttpContext is recycled.

Не Выменяйте это: В следующем примере используется async void , который делает HTTP-запрос завершенным при достижении первого await : Do not do this: The following example uses async void which makes the HTTP request complete when the first await is reached:

  • Это всегда является неправильной практикой в ASP.NET Core приложениях. Which is ALWAYS a bad practice in ASP.NET Core apps.
  • Обращается к HttpResponse после завершения HTTP-запроса. Accesses the HttpResponse after the HTTP request is complete.
  • Завершается сбоем процесса. Crashes the process.

Выполните следующие действия. В следующем примере возвращается Task платформе, поэтому HTTP-запрос не завершается до завершения действия. Do this: The following example returns a Task to the framework so the HTTP request doesn’t complete until the action completes.

Не захватывать HttpContext в фоновых потоках Do not capture the HttpContext in background threads

Не Выменяйте это: В следующем примере показано закрытие HttpContext из свойства Controller . Do not do this: The following example shows a closure is capturing the HttpContext from the Controller property. Это неплохая практика, поскольку рабочий элемент может: This is a bad practice because the work item could:

  • Выполнение за пределами области запроса. Run outside of the request scope.
  • Попытка прочитать неправильный HttpContext . Attempt to read the wrong HttpContext .

Выполните следующие действия. Следующий пример: Do this: The following example:

  • Копирует данные, необходимые в фоновой задаче, во время запроса. Copies the data required in the background task during the request.
  • Не ссылается на что-либо из контроллера. Doesn’t reference anything from the controller.

Фоновые задачи должны быть реализованы как размещенные службы. Background tasks should be implemented as hosted services. Дополнительные сведения см. в статье Background tasks with hosted services in ASP.NET Core (Фоновые задачи с размещенными службами в ASP.NET Core). For more information, see Background tasks with hosted services.

Не захватывать службы, внедренные в контроллеры в фоновых потоках Do not capture services injected into the controllers on background threads

Не Выменяйте это: В следующем примере показано закрытие DbContext из параметра действия Controller . Do not do this: The following example shows a closure is capturing the DbContext from the Controller action parameter. Это неплохой подход. This is a bad practice. Рабочий элемент может выполняться вне области запроса. The work item could run outside of the request scope. ContosoDbContext ограничивается запросом, что приводит к ObjectDisposedException . The ContosoDbContext is scoped to the request, resulting in an ObjectDisposedException .

Выполните следующие действия. Следующий пример: Do this: The following example:

  • Внедряет IServiceScopeFactory, чтобы создать область в фоновом рабочем элементе. Injects an IServiceScopeFactory in order to create a scope in the background work item. IServiceScopeFactory является Singleton-классом. IServiceScopeFactory is a singleton.
  • Создает новую область внедрения зависимостей в фоновом потоке. Creates a new dependency injection scope in the background thread.
  • Не ссылается на что-либо из контроллера. Doesn’t reference anything from the controller.
  • Не захватывает ContosoDbContext из входящего запроса. Doesn’t capture the ContosoDbContext from the incoming request.

Выделенный ниже код: The following highlighted code:

  • Создает область в течение времени существования фоновой операции и разрешает службы из нее. Creates a scope for the lifetime of the background operation and resolves services from it.
  • Использует ContosoDbContext из правильной области действия. Uses ContosoDbContext from the correct scope.

Не изменяйте код состояния или заголовки после начала текста ответа Do not modify the status code or headers after the response body has started


ASP.NET Core не замещает текст HTTP-ответа. ASP.NET Core does not buffer the HTTP response body. При первом написании ответа: The first time the response is written:

  • Заголовки отправляются клиенту вместе с этим фрагментом текста. The headers are sent along with that chunk of the body to the client.
  • Больше нельзя изменять заголовки ответа. It’s no longer possible to change response headers.

Не Выменяйте это: Следующий код пытается добавить заголовки ответа после того, как ответ уже запущен: Do not do this: The following code tries to add response headers after the response has already started:

В приведенном выше коде context.Response.Headers[«test»] = «test value»; выдаст исключение, если next() записал в ответ. In the preceding code, context.Response.Headers[«test»] = «test value»; will throw an exception if next() has written to the response.

Выполните следующие действия. В следующем примере проверяется, начался ли HTTP-ответ перед изменением заголовков. Do this: The following example checks if the HTTP response has started before modifying the headers.

Выполните следующие действия. В следующем примере используется HttpResponse.OnStarting для установки заголовков перед очисткой заголовков ответа клиенту. Do this: The following example uses HttpResponse.OnStarting to set the headers before the response headers are flushed to the client.

Проверка того, что ответ не запущен, позволяет регистрировать обратный вызов, который будет вызываться непосредственно перед заголовком ответа. Checking if the response has not started allows registering a callback that will be invoked just before response headers are written. Проверяется, не начался ли ответ: Checking if the response has not started:

  • Предоставляет возможность добавлять или переопределять заголовки по времени. Provides the ability to append or override headers just in time.
  • Не требует знания следующего по промежуточного слоя в конвейере. Doesn’t require knowledge of the next middleware in the pipeline.

Не вызывайте Next (), если вы уже начали записывать в текст ответа. Do not call next() if you have already started writing to the response body

Компоненты должны вызываться, только если они могут обрабатывать ответ и управлять им. Components only expect to be called if it’s possible for them to handle and manipulate the response.

Оптимизация приложений ASP.NET. Приложения для iPhone и Andro >

У меня есть приложение ASP.NET(не MVC).

Я хотел бы создать версию, оптимизированную для браузеров на IPhone и на Android.

  • Возможно ли обнаружение IPhone/Android при доступе к сайту.
  • Есть ли какие-либо проблемы/советы по разработке ASP.NET для этих устройств.
    2 2
  • 31 окт 2020 2020-10-31 23:42:10
  • AJM

2 ответа

Webforms не подходит для мобильных устройств, он генерирует большие страницы, потому что viewstate. И вы не можете управлять рендерингом (еще немного .net4).

Вы можете обнаружить устройство, используя db возможностей, таких как WURFL (я рекомендую 51degrees) o возможно, используя некоторые, например https://detectmobilebrowser.com/

Я не знаю, что такое webapp, но вы можете создать новое приложение, возможно, используя MVC. Посмотрите этот ресурс.

  • 31 окт 2020 2020-10-31 23:42:12
  • fravelgue

Мы используем комбинацию .net webforms и jQuery mobile.

Для нашего viewstate это было довольно хорошо стерилизовано, так что только незначительные вещи идут к устройству.

Имейте в виду, что существует около 3 различных мобильных api. Каждый из них имеет свои недостатки. Вы можете изучить их.

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

Полезные советы по оптимизации и настройке Windows.

Windows, добавление страниц памяти: в качестве основной ОС на моем компьютере установлена Windows 98. В последнее время часто стала возникать следующая ошибка: «There are no spare stack pages. It may be necessary to increase the setting of «MinSPs» in System.ini

Если внимательно прочитать данное сообщение об ошибке, то будет совершенно логично предположить, что необходимо увеличить значение параметра «MinSPs» в файле System.ini. Единственная проблема — отсутствие данной секции в файле System.ini. Итак, поясняем: все, что от вас требуется в данной ситуации, это добавить в файл System.ini, в секцию «[386Enh]», строку «MinSPs=4». При повторном возникновении ошибки попробуйте увеличить значение данного параметра с шагом 4. Вообще же, данная ошибка означает, что в стеке используемом 32-разрядными драйверами устройств, отсутствуют свободные страницы, то есть произошло переполнение стека. Как правило, это происходит из-за того, что каждому драйверу устройства выделяется под стек одна страница памяти объемом 4 кбайт. Соответственно, для некоторых драйверов этого может оказаться недостаточно, поэтому для каждого установленного драйвера системой резервируются еще две страницы. Если же и эти страницы оказываются занятыми, то выдается приведенное выше сообщение. После этого Windows может продолжить нормально функционировать, но работа самого драйвера может быть нарушена.

Windows, использование фала hosts: Мне необходимо запретить пользователям моего компьютера доступ к определенным страницам в Интернете. Но при этом я хочу, чтобы у пользователя создавалась иллюзия, что таких страниц просто не существует или же на сервере.

Есть множество путей решения данной задачи. Один из них — совершить небольшие манипуляции с файлом: C:WINDOWS system32driversetchosts (для ОС семейства NT) или C:WINDOWShosts (для ОС семейства 9x). Все дело в том, что при подключении к Интернету компьютер перед обращением к DNS-серверу прежде всего обращается к этому файлу. Соответственно, можно добавить в него строки вида: xxx.xxx.xxx.xxx www.mysite.ru, в которых: xxx.xxx.xxx.xxx — произвольный IP-адрес; www.mysite.ru — адрес сайта, доступ к которому нужно запретить, например: 127.0.0.1 mail.ru Теперь операционная система при обращении к данному узлу Интернета будет искать сайт mail.ru на локальном адресе и, разумеется, не найдет. Вследствие чего пользователю будет выдано стандартное сообщение о том, что запрошенный сервер не найден. Единственный минус подобной защиты — ее слишком легко обойти. Достаточно лишь будет в строке ввода адреса сайта указывать не имя, а сразу его IP-адрес, узнать который в большинстве случаев не проблема.

Windows, удаление символа ярлыка: Во время длительной работы за компьютером мне начинает немного мешать символ ярлыка, находящийся на иконках (в левом нижнем углу). Подскажите, можно ли как-то от него избавиться?

Да, причем сделать это можно достаточно легко. От вас потребуется лишь немного изменить два параметра в реестре вашей операционной системы:
HKEY_LOCAL_MACHINESOFTWARE Classeslnkfile — отвечает за ярлыки Windows-программ.

HKEY_LOCAL_MACHINESOFTWARE Classespiffile — отвечает за ярлыки DOS-программ.
Если параметр «IsShortcut» имеет значение 1, то на ярлыке присутствуют стрелки. Удаление этого параметра либо изменение его значения на 0 отключает стрелки на ярлыках.

Windows, установка приоритетов: Так как мне приходится постоянно работать с множеством самых различных приложений, то производительность системы играет для меня не самую последнюю роль. Не могли бы вы подсказать, где именно в системе можно задавать приоритет?

Как многим хорошо известно, фоновые приложения в операционной системе Windows изначально имеют достаточно низкий приоритет. В том случае, если вам вдруг потребуется его немного изменить, создайте в реестре по адресу HKEY_LOCAL_MACHINESystem C u r r e n t C o n t r o l S e t C o n t r o l PriorityControl параметр вида «dword» с именем «Win32PrioritySeparation». В качестве значения полученного ключа уста новите цифру от 0 до 2:

0 — фоновые и обычные процессы будут иметь одинаковый приоритет;
1 — фоновые процессы будут иметь немного меньший приоритет;
2 — фоновые процессы будут иметь значительно меньший приоритет.

Windows XP. Выбор папок для сохранения: Когда мы сохраняем какой-либо документ в Microsoft Word и Проводнике, нам на выбор в левой половине окна сохранения предлагается несколько возможных вариантов — Рабочий стол, «Мой компьютер», «Мои документы» и т. д.

Для этой цели лучше всего воспользоваться бесплатной программой для настройки интерфейса Tweak UI. Она разработана корпорацией Microsoft и входит в пакет PowerToys, который можно скачать по адресу www.microsoft.com/windowsxp/ pro/downloads/powertoys.asp. Запускаем Tweak UI из меню «Пуск» или из Панели управления и в левой части окна выбираем пункт «Common Dialogs –> Places Bar». Отмечаем пункт «Custom places bar» и просто выбираем подходящие места для сохранения файлов. Можно выбрать новые места для сохранения из вариантов, предложенных системой, а также прописать собственный вариант, указав полный путь к какой-либо папке. Таким образом, меняется список папок в Проводнике. Что же касается приложений Microsoft Office, здесь, насколько нам известно, не существует специальных программ-настройщиков, поэтому придется прибегнуть к ручному редактированию реестра. Приведем пример для Microsoft Office 2003. Для других версий он также должен работать, только нужно будет поменять номер версии. Создадим REG-файл по следующей схеме: БикЮREGEDIT4

[HKEY_CURRENT_USERSoftwareMicrosoftOffice11.0CommonOpen FindPlaces] «ItemSize»=dword:00000000

[HKEY_CURRENT_USERSoftwareMicrosoft O f f i c e 1 1 . 0 C o m m o n O p e n FindPlacesUserDefinedPlacesPlace1] «Name»=«Work»

«Path»=«C:Documents and Settings UserМои документыWork» «SortAscending»=dword:00000001 «Index»=dword:00000000
Затем экспортируем данные из этого файла в реестр.

Теперь запускаем любую программу из пакета Microsoft Office, вызываем диалог сохранения файла и в числе папок по умолчанию увидим ту, что мы только что указали в REG-файле. Если нужно создать еще несколько папок, просто отредактируем наш REG-файл, заменив «Place1» на «Place2», «Place3» и т. д. и укажем названия других папок и пути к ним. Таким способом можно добавить до пяти кнопок. Их количество можно увеличить до десяти, если скрыть установленные по умолчанию. Просто добавим к REG-файлу следующие строки:

[HKEY_CURRENT_USERSoftwareMicrosoft O f f i c e 1 1 . 0 C o m m o n O p e n FindPlacesStandardPlacesRecent] «Show»=dword:00000000

Значение «Recent» относится к папке «Недавно открытые документы». Чтобы скрыть «Мои документы», замените в примере слово «Recent» на слово «MyDocuments», Desktop означает Рабочий стол, MyComputer — это, соответственно, «Мой компьютер», а Publishing — «Сетевое окружение». Если вы хотите вновь включить показ этих кнопок, просто измените значение параметра Show на dword:00000001.

Windows XP. Уменьшение Windows XP: Я обратил внимание, что Windows XP занимает очень много места на винчестере. Причем этот размер постоянно увеличивается. Не хотелось бы только из-за этого покупать новый жесткий диск. Нет ли каких-либо способов уменьшить размер Windows XP?

Чтобы уменьшить размер Windows XP, можно предпринять следующее:

После установки всего оборудования можно спокойно удалить директорию C:WindowsDriver Cachei386 (70–100 Мбайт). Единственное неудобство заключается в том, что при установке нового оборудования система всегда будет запрашивать дистрибутивный диск Windows XP.

Если вы уверены в своих действиях и не боитесь системных сбоев — можно смело отключать функцию «Восстановление системы». Ведь для создания контрольных точек восстановления тоже требуется определенное место, и немалое. Это позволит вам освободить несколько сотен мегабайт.

И еще одну папку можно удалить — C:Windowssystem32dllcache (здесь хранятся и отсюда восстанавливаются в случае повреждения важные системные файлы). По умолчанию размер этой папки равен 400 Мбайт. Однако его можно изменить через реестр. Находим ветвь HKEY_LOCAL_MACHINESOFTWA R E M i c r o s o f t W i n d o w s NTCurrentVersionWinlogon и там меняем указанное в байтах значение параметра SFCQuota .

Еще можно посоветовать отказаться от «спящего режима», который при выключении компьютера сбрасывает содержимое оперативной памяти на жесткий диск в файл hiberfil.sys, а при включении снова загружает этот файл в оперативную память. Для того чтобы не возникла такая ситуация, когда не удастся сбросить содержимое памяти из-за отсутствия места на жестком диске, служба «Спящий режим» устанавливает размер файла hiberfil.sys равным объему оперативной памяти. При современных объемах ОЗУ hiberfil.sys занимает достаточно большое место на диске. Если попытаться просто удалить файл hiberfil.sys, при последующей загрузке система создаст его вновь. Так что советуем просто отключить «спящий режим» («Панель управле- ния –> Электропитание»).

Не стоит забывать и о традиционных способах уменьшения размера Windows XP, таких как регулярная очистка от временных файлов, удаление кеша браузера, а также BAK-файлов, создаваемых различными программами. Иногда помогает и удаление лишних DLL-библиотек с помощью специальных утилит. Но здесь следует быть очень внимательным, так как некоторые приложения, запускаемые непосредственно с CD или DVD-диска оставляют в системе свои DLL, в то время как программа, которая их использует, размещается на другом носителе. В таких случаях не удаляйте якобы «бесхозные» DLL сразу, а помещайте их в специальную папку — а вдруг хозяин найдется.

Windows. отключение автозапуска: Я читал, что каким-то способом можно отключить автозапуск компакт-дисков в Windows.

В различных ОС семейства Windows это делается по-разному. В качестве примера приведем два способа отключения службы автозапуска в Windows 2000. Первый способ заключается в редактировании реестра системы. Вам необходимо присвоить значение «0» параметру «Autorun», который располагается по адресу HKEY_LOCAL_MACHINESYSTEM CurrentControlSetServicesCdrom. Эту же операцию следует повторить с параметром «Autorun» по адресу HKLMSYSTEMControlSet002Services Cdrom. Второй способ — выберите меню «Пуск — Выполнить», укажите в командной строке gpedit.msc, а далее «Конфигурация компьютера — Административные шаблоны — Система». В появившемся окне дважды щелкните на параметре «Отключить автозапуск».

Windows XP. Зависание при выключении: По какой-то причине при выключении Windows XP после прохождения ею какихлибо тестов на производительность, требующих полной отдачи как от процессора, так и от всей системы в целом, компьютер зависает.

Все дело в том, что после обработки больших объемов данных система освобождает SWAP (файл подкачки), сохраняет результаты и при этом не забывает сохранять также конфигурацию текущего пользователя. При таком режиме работы часть процессов может перестать выгружаться автоматически, что и приводит в итоге к зависанию системы. В качестве одного из вариантов решения этой проблемы можно попытаться установить в настройках Windows автоматическое завершение зависших процессов, а также уменьшить время ожидания системы на отклик. Также можно посоветовать очищать оперативную память с помощью специальной утилиты, например MemFree.

Windows. Запуск Windows Installer: При старте ОС в момент загрузки изображения Рабочего стола и различных программных модулей на пару секунд открывается окно «Windows Installer», правда, без каких-либо последующих действий. Подскажите, с чем это может быть связано?

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

Но перед тем как приступать к данному процессу, не забудьте создать резервную копию реестра системы. Кроме того, ни в коем случае не удаляйте параметр, указывающий на ctfmon.exe — программу, которая отвечает за языковую панель.

Windows Update: Сохранение обновлений. Для обновления системы я использую службу Windows Update. Проблема заключается в том, что мне необходимо сохранять все полученные пакеты обновлений, а Windows их, судя по всему, удаляет.

Для начала хотелось бы сказать несколько слов о самой Windows Update. Скачанные с помощью данной службы обновления действительно удаляются сразу же после завершения установки. При этом у пользователя нет возможности работать с ними после переустановки системы или на другом компьютере. Для сохранения обновлений можно порекомендовать специальную утилиту WUTool (https://soft.mail.ru/program_page. php?grp=9340), которая сама загрузит и установит все необходимые заплатки, после чего сохранит полученные пакеты в отдельную директорию. Начиная с версии 1.16 программа поддерживает операционную систему Windows XP с пакетом обновлений Service Pack 2.

Windows: Ускорение загрузки. В последнее время установленная на моем домашнем компьютере Windows XP стала загружаться намного медленнее. С чем может быть связано такое поведение ОС?

То, что со временем операционная система начинает загружаться медленнее, — общеизвестный и естественный процесс. Единственное, что можно порекомендовать в данной ситуации, — почистить список служб, запускающихся одновременно с системой. Как правило, среди четырех-пяти системных можно обнаружить около десяти тех, которые были созданы различными программами, в то или иное время установленными пользователем. Чтобы отредактировать данный список, войдите в меню «Пуск — Выполнить» и наберите в строке ввода команду «msconfig». Перед вами появится утилита, позволяющая убирать из автозагрузки все ненужные компоненты. Если же это не помогло, попробуйте прибегнуть к помощи специальной утилиты BootVis-Tool
https://download.microsoft. com/. /BootVis-Tool.exe от Microsoft, которая призвана ускорить за- грузку системы. Однако использовать данную программу вам придется на свой страх и риск, так как Microsoft позиционирует пакет в первую очередь для тестеров и независимых разработчиков программного обеспечения.

Windows: Изменение приоритета приложений. Расскажите, пожалуйста, каким образом можно запускать DOS-приложения с более низким приоритетом, нежели у остальных программ?

Очевидно, речь идет о таких операционных системах как Windows 2000 или Windows XP (так как в Windows 98 попросту нет такого понятия как приоритет). По сути, нет особой разницы, используете вы именно DOS-приложение или нет, ведь выполнение приложения, так или иначе, происходит в окружении Windows. Первый способ уменьшить приоритет запущенного приложения — нажать сочетание клавиш «Ctrl+Atl+Del», после этого выбрать раздел «Task Manager», найти в появившемся списке процессов необходимый вам, щелкнуть по нему правой клавишей мыши и затем выставить ему желаемый приоритет. Также можно указать приоритет процесса непосредственно при его запуске. Для этого воспользуйтесь командной строкой, в которой наберите: «START название_приложения/LOW» (в качестве значений можно также указывать NORMAL, HIGH или REALTIME). В случае частого использования этой функции предлагаем вам следующий вариант. Создадим где-либо командный файл low.bat, в который впишем следующие строки:

echo off start /low %1

После того как файл будет создан, поместите его в директорию «SendTo» профиля пользователя. Теперь, чтобы запустить программу с более низким приоритетом, достаточно лишь переслать ее на этот файл с помощью контекстного меню, которое появляется при нажатии правой клавиши мыши по любому объекту. Здесь стоит лишь напомнить, что пересылать надо именно исполняемый файл, а не его ярлык.

Windows: Удаление файлов. С помощью мастера «Установка/удаление программ» я удалил игру из системы. Однако папку, оставшуюся после удаления программы, стереть не удается — постоянно выдается следующие сообщение: «Не удается удалить файл.»

Для начала стоит проверить диск на наличие ошибок. Например, с помощью встроенной в Windows утилиты дефрагментации. Если ошибок не обнаружено, попробуйте зайти в эту папку и удалить оставшиеся там файлы — возможно, какой-то из них используется системой. Если это действительно так, то удаление объекта будет возможно после перезагрузки.

Windows: Назначение SWAP – файла. Расскажите, пожалуйста, что представляет собой SWAP-файл и для каких целей он нужен операционной системе?

Дело в том, что в некоторые моменты операционной системе может не хватить оперативной памяти для выполнения указанного пользователем действия. В этом случае она выгружает одну из запущенных программ в специально отведенное место на жестком диске, которое, по сути, и является SWAP-файлом (или файлом подкачки). Для того чтобы изменить свойства данного объекта, зайдите в «Панель управления — Система», выберите «Быстродействие — Виртуальная память» или же, если вы работаете в Windows XP — «Дополнительно — Быстродействие — Параметры — Дополнительно — Виртуальная память». Рекомендуется выставлять одинаковый максимальный и минимальный размер файла. Также стоит учесть, что объем файла подкачки в идеальном случае должен быть в два раза больше, нежели объем установленной в компьютере оперативной памяти. То есть, если в ком- пьютере установлено 256 Мбайт памяти, размер файла подкачки должен быть равен 512 Мбайт. Кроме того, сейчас все больше пользователей устанавливают на свою машину несколько операционных систем семейства Windows. В этом случае было бы неплохо использовать один и тот же файл подкачки для всех систем. Чтобы заставить Windows 9x использовать SWAP- файл старшей ОС, в файл System.ini (в раздел [386Enh]) необходимо добавить следующую запись:
PagingFile=имя_файла_подкачки
Где имя_файла_подкачки — полный путь к SWAP-файлу старшей операционной системы. После выполнения данной операции вы можете удалить старый файл Win386.swp, расположенный по умолчанию в корне диска С. Разумеется, можно сделать и обратную процедуру, то есть заставить Windows XP работать с файлом подкачки Windows 9x. Для этого потребуется немного изменить ключ PagingFiles в разделе реестра по адресу HKEY_LOCAL_MACHINESYSTEM CurrentControlSetControlSession ManagerMemory Management. Данный ключ содержит размеры и имена файлов подкачки на разных дисках. Например, если Windows 98 установлена на диске C, а Windows 2000 или XP — на D, то вместо D:Pagefile.Sys необходимо вписать имя C:Win386.swp.

Windows: Скорость скачивания. После установки Service Pack 2 резко упала скорость скачивания из пиринговых сетей. C чем это может быть связано?

Для предотвращения вирусных эпидемий в новом пакете обновлений для Windows XP Microsoft ввела ограничение на количество одновременных соединений TCP/IP. Можно спорить об эффективности такого решения, но у конечного пользователя это ограничение может вызвать проблемы. Проявиться это может, например, при активном использовании программ для работы с пиринговыми сетями. Основные симптомы — медленная скорость скачивания и навигации по Интернету. Если в журнале сообщений Windows («Control Panel — Administrative Tools — Event Viewer») вы видите события с ID 4226, то вам, возможно, необходимо увеличить количество допустимых соединений. Сделать это можно с помощью специальной заплатки, которую можно скачать с сайта www.lvllord.de или воспользовавшись утилитой xp-AntiSpy версии 3.9 (www.xp-antispy.org). Для последней в пункте меню «Special — Connection limit» вы можете выставить любое число одновременных сессий, однако помните, что при этом ваша система потенциально подвергается большей опасности.

Windows 2003 Server: Изменение стандартной темы.

Что можно предпринять, если первоначальный вид операционной системы Windows 2003 Server меня не очень устраивает – слишком уж он беден и некрасив? Я больше тяготею к интерфейсам наподобие Windows XP. Нужно помнить, что данная ОС создавалась не для домашних пользователей, а в первую очередь для обслуживания мощных серверов, где вид Рабочего стола – отнюдь не самое главное, скорее наоборот: различные украшения бывают слишком ресурсоемкими. Однако вид данной системы можно преобразовать, немного приблизив его к стилю версии XP. В первую очередь для этого необходимо включить службу «Themes». Чтобы это сделать, нужно зайти в службы («Control Panel — Administrative Tools — Services») и дважды щелкнуть на строке «Themes». В появившемся окне выберите тип запуска «Automatic» (Автоматически) и перезагрузите компьютер. Затем зайдите в свойства экрана (щелчок правой клавишей мыши на Рабочем столе, затем пункт меню «Свойства»), на вкладке «Themes» выберите вместо Windows Classic тему Windows XP. Теперь Рабочий стол и все окна приложений будут иметь столь знакомый вам стиль. В дополнение можно обратиться к разделу «Control Panel — System» и на вкладке «Advanced», в разделе «Visual Effects», настроить различные дополнительные визуальные эффекты.

Windows: Удаление обновлений
После установки на компьютер пакета обновлений Service Pack 2 Windows перестала загружаться. Причем как в безопасном режиме, так и в режиме последней удачной загрузки. Скажите, как мне теперь поступить и что я мог сделать неправильно?

Скорее всего, вы все сделали верно, просто иногда случается так, что установленное вами обновление (Service Pack или просто очередная заплатка — не столь важно) может оказаться не совместимым с определенным системным компонентом. Рецепт по решению проблемы весьма прост — загрузиться с установочного диска Windows, выбрав в установщике пункт «Recovery Console» и следуя инструкциям, появляющимся на экране. Перейдите в корневой каталог системы (C:winnt) и выберите одну из следующих директорий: $NtService PackUninstall$ — для удаления пакета Service Pack; $NtUninstallKBXXXXXX$ или $NtUninstallQXXXXXX$ — для удаления заплатки, где XXXXXX — ее идентификационный номер. Внутри каждого из этих каталогов находится вложенный подкаталог с именем «spuninst», в котором можно обнаружить командный файл spuninst.bat. Запустите его командой:
batch spuninst.bat
Это поможет заменить исходными версиями те файлы, которые были изменены пакетом обновлений или заплаткой. Если после этого система также не подает признаков жизни, то, скорее всего, поврежден сам реестр. Если же все прошло успешно, то вам остается только перейти в безопасный режим и через пункт панели управления «Установка и удаление программ» удалить из системы ненужную заплатку или пакет обновлений.

Windows: Быстрый вызов приложений
Расскажите, каким образом в ОС Windows можно назначать клавиши быстрого вызова некоторых приложений? Есть ли какие-то стандартные системные средства для этого?

Существует один простой и достаточно известный способ это сделать. Создайте ярлык для нужной программы (если она запускается часто, то ярлык наверняка уже есть на Рабочем столе). Зайдите в свойства ярлыка, щелкнув по нему правой клавишей мыши. В появившемся ок- не свойств перейдите на вкладку «Ярлык», поместите курсор в поле «Быстрый вызов». Нажмите любую клавишу на клавиатуре, после чего в данном поле отобразится сочетание кнопок («Alt+Ctrl+нажатая клавиша»), при нажатии которых будет вызываться выбранная программа. Для того чтобы очистить это поле, нажмите клавишу «Delete». Но помните: если вы вдруг установите одинаковые сочетания клавиш для двух или более ярлыков, запускаться будет тот, что был создан позднее. То есть более ранние установки попросту отменяются, поэтому вам придется сделать их заново — даже если вы удалите конфликтующий ярлык.

Windows: Сглаживание шрифтов
Всю свою жизнь я проработал перед монитором c электронно-лучевой трубкой, однако некоторое время назад был вынужден сменить его на LCD-дисплей. Проблема заключается в том, что мне режут глаза слишком четкие шрифты на новом мониторе. Можно ли каким-то способом вернуть тот их вид, к которому я привык на старом мониторе?

Да, к примеру, воспользовавшись технологией сглаживания шрифтов Clear Type, поддержка которой есть в опера- ционной системе Microsoft Windows XP. Чтобы включить ее, щелкните правой клавишей мыши на Рабочем столе, выберите пункт «Properties». В появившемся окне перейдите на закладку «Appearance», после чего выберите в ней пункт «Effects». В поле «Use the following method to smooth edges of screen fonts» установите значение «ClearType». Нажмите «ОК», а затем «Apply». Теперь все шрифты на новом LCD-мониторе выглядят так же, как и на обычном ЭЛТ.

Windows: Советы при входе в систему
Мне необходимо, чтобы при включении компьютера Windows выдавала некоторую статическую информацию пользователю. Расскажите, какие средства мне для этого необходимо использовать?

К примеру, вы можете изменить советы, появляющиеся при входе в Windows. Вместо них можно использовать что угодно — цитаты, шутки или список типа «Что делать?». Для этого откройте реестр операционной системы по адресу: HKEY_LOCAL_MACHINESOFTWARE MicrosoftWindowsCurrentVersionExplorerTips. Чтобы создать новый совет, выберите меню «Правка p Создать p Строковый параметр» и задайте имя нового параметра числом, равным количеству существующих параметров плюс один. Теперь дважды щелкните на созданном вами параметре и введите любой нужный вам текст. Чтобы удалить совет, просто выделите необходимый параметр и нажмите клавишу «Delete».

Оцените статью:

Мастер Йода рекомендует:  Настройка плагина W3 Total Cache расширенные настройки минимизации кода

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