Текст: Zhijun (веб-интерфейс Hujiang)
Данная статья является оригинальной, просьба указывать автора и источник для перепечатки
В использованииReact Native
В разработке мы умело принимаемJavaScript
Способ отправки запроса заключается в отправке запроса на сервер, но процесс обработки этого запроса фактически такой же, как и обработкаWeb
Процесс отправки запросов в приложениях отличается. Потому что целью обработки этого запроса является не браузер, а нативная операционная система, встроенная в приложение.
обработкаReact Native
Запрос разделен на две части: одна частьJavaScript
среда выполнения, а другая часть встроенаJavaScript
изNative
(то есть роднойAndroid
а такжеIOS
) рабочая среда.React Native
Существует три встроенных способа отправки сетевых запросов:fetch
, XMLHttpRequest
а такжеWebSocket
. ноReact Native
Операционная среда и рабочая среда веб-приложения различаются, поэтому для расширения среды выполнения необходимо использовать настраиваемые функции на уровне собственного приложения.JavaScript
сделан сетевой запрос.
Метод и процесс отправки запроса
Что касается часто используемых объектов сетевых запросов: XMLHttpRequest (XHR), Fetch и WebSocket, учащиеся, знакомые с фронтенд-разработкой, должны быть очень хорошо знакомы.XHR
Это наиболее часто используемый способ отправки запросов в веб-разработке.Fetch
а такжеWebsocket
Он также является восходящей звездой и используется во многих современных веб-приложениях. Но когдаReact Native
, использование этих объектов отличается от использования веб-приложения. Когда вы вызываете сетевой запрос на уровне JS, он фактически проходит через два процесса, чтобы достичь реальной стороны сервера. Так же, как показывает баннер заголовка.
XMLHttpRequest (XHR)
существуетReact Native
середина,XMLHttpRequest(XHR)
Состоит из двух частей: «front-end» и «back-end». Фронтенд отвечает заJavaScript
Взаимодействие, бэкэнд отвечает за конвертацию на нативной платформеJavaScript
Отправленный запрос является собственным запросом собственной системы.
Серверная часть здесь на самом деле представляет собой унифицированный уровень API, абстрагированный поверх нативной платформы, что делаетJavaScript
Уровень может вызывать сетевой модуль исходной системы. НапримерIOS
встроенныйURLSessionмодули иAndroid
внизOKHTTPмодуль.
Fetch
В современных веб-браузерахFetch
API предоставляет иXHR
Почти тот же функционал, ноFetch
Предоставляет более простой и эффективный способ асинхронного извлечения ресурсов по сети, одновременно манипулируяRequest
а такжеResponse
объект для повторного использования запросов.
Но когдаReact Native
, чтобы быть совместимым с различиями между двумя платформами, зависимость отXMLHttpRequest
изFetch Polyfillдля реализации этого объекта запроса. Это означает, что мы не можемFetch
Объект как практическийReact Native
объект ниже. Например, используйте этот объект для отправки двоичных данных. Конечно, вы можете использовать сторонние библиотеки, такие какreact-native-fetch-blobдля достижения соответствующей функции.
Websocket
Websocket
В качестве нового протокола связи он использует метод полнодуплексной связи для связи с сетевой технологией сервера.
существуетReact Native
середина,Websocket
не является отдельным запросом, аXMLHttpRequest(XHR)
Он же состоит из двух частей: «front-end» (фронт-энд) и «back-end» (бэк-энд). Фронтенд отвечает заJavaScript
Взаимодействие, бэкэнд отвечает за конвертацию на нативной платформеJavaScript
Отправленный запрос является собственным запросом собственной системы. Разрабатывается самостоятельно в IOSNSStream, в то время как в Android этоOKHTTPмодуль.
Просмотр сетевых запросов в React Native
существуетReact Native
В разработке можно пройтиChrome Developer Tools (CDT)
изSources
Отладка в панелиjavascript
Часть кода, включая точки останова, выходную информацию, отладку точек останова и т. д.javascript
Информация, необходимая для отладки. Однако не хватает толькосетевой запросотладка трассировки. Мы не можем сделать это, как веб-разработку, черезCDT
в сетевой панели (Network
) для просмотра информации о сетевых запросах приложения.
Отладка сетевых запросов с помощью прокси
Хотя нет возможности пройтиCDT
Посмотрите на сетевой запрос приложения, но мы можем пройтиFiddler
,CharlesProxy
а такжеWireshark
Подождите, пока программное обеспечение настроит прокси-сервер для просмотра трассировки и отладки сетевых запросов. используется здесьFiddler
действовать как агент.
-
Первый набор
Fiddler
Порт прокси: Откройте Filddler -> Tool -> Options -> Connects, заполните соответствующий номер порта в порту прослушивания, -
На отладочной машине
Android
илиIOS
Установите прокси в симуляторе эмулятора: Найдите сетевые настройки на отлаживаемой машине и установите прокси-адрес подключенного в данный момент WIFI. -
Обновите приложение, в
fiddler
Просмотрите сетевые запросы в (подсказка: щелкните правой кнопкой мыши, откройте в новой вкладке, чтобы просмотреть четкие изображения):
В прокси-приложении мы можем просматривать заголовки запросов, возвращаемые заголовки, возвращаемые результаты и другую связанную сетевую информацию. Конечно, запрос также может быть перехвачен соответствующим прокси-программным обеспечением и отправлен после сброса.
использоватьReactotronотладка сети
Описанный выше метод просмотра и отслеживания сетевых запросов путем установки прокси-сервера является мощным, но фактическая операция несколько сложна, а стоимость начала работы относительно высока. используяReactotron
, информация о конфигурации отладки может быть интегрирована в приложение, удобно иметь одну и ту же конфигурацию отладки в разных средах разработки, а стоимость конфигурации разработки сохраняется.
Reactotron
Он состоит из двух частей: одна — отладочное приложение, а другая — конфигурация отладки.
- Приложения отладки имеют другую операционную системуВерсия установки с графическим интерфейсом. Конечно, если вы привыкли использовать командную строку, вы также можете использовать
NPM
Установитьreactotron-cli
npm install -g reactotron-cli
- Установите конфигурацию отладки:
在你的`React Native`应用中安装`reactotron-react-native`
```
npm i --save-dev reactotron-react-native
```
然后,在你的应用的添加配置文件,定制调试内容:
```
import Reactotron, {
trackGlobalErrors,
openInEditor,
overlay,
asyncStorage,
networking
} from 'reactotron-react-native'
Reactotron
.configure({
name: 'xxx' // 调试的名称
})
.use(trackGlobalErrors()) // 设置监听全局错误
.use(openInEditor()) // 设置在编辑器中打开错误
.use(overlay()) // 设置图片遮盖图片(用于UI还原度对比)
.use(asyncStorage()) // 设置异步存储调试
.use(networking()) // 设置网络调试
.connect() // 连接应用(必须)
```
然后在你的应用的入口文件中引入这个配置文件。然后重新启动应用。当然,还可以使用正则表达式过滤请求的`contentType`的类型和要忽略的请求的`url`,见下面的配置:
```
.use(networking({
ignoreContentTypes: /^(image)\/.*$/i, // 设置reactotron要忽略的文件类型
ignoreUrls: /\/(logs|symbolicate)$/, // 设置reactotron要忽略的url请求路径
}))
```
![reactotron设置](https://raw.githubusercontent.com/yandan66/blogs/master/source/_posts/20171124/reactotron_02.png)
![reactotron设置](https://raw.githubusercontent.com/yandan66/blogs/master/source/_posts/20171124/reactotron_03.png)
![reactotron结果](https://gitlab.yeshj.com/hujiang-f2e/fun-book/raw/5f6236238c0e51a085d3be32b349436c5e3dad73/%E9%97%A8%E6%88%B7%E7%BA%BF/image/ezgif.com-resize.gif)
reactotron
Отладка сети — только одна из его функций, а есть много других мощных функций. Если вам интересно, вы можете проверить егоДокументация.
Отладка сети с помощью сетевой панели инструментов разработчика Chrome
React Native
Среди интерфейсов, выставляемых по умолчанию, нет прямогоChrome Developer Tools
Чтобы просмотреть метод сетевого запроса, проверьте исходный код RN Libraries/Core/InitializeCore.js, комментарий гласит:
Устанавливает свойство объекта. Если свойство с таким именем существует, это замените его, но сохраните конфигурацию дескриптора. По умолчанию свойство будет заменен ленивым геттером. * Исходное значение свойства будет сохранено как original[PropertyName], поэтому что при необходимости его можно восстановить.Например, если вы хотите проложить маршрут сетевые запросы через DevTools (для их трассировки): * global.XMLHttpRequest = global.originalXMLHttpRequest; * @видетьGitHub.com/Facebook/Горячие…
Специально реализовано вXHRInterceptor.jsсередина. оригинальныйXMLHttpRequest
был переписан какoriginalXMLHttpRequest
, так что вChrome
показать вnetwork
просто заменитьXMLHttpRequest
дляoriginalXMLHttpRequest
. Установите в файле ввода:
if (__DEV__) {
GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest
}
Конечно, это может произвестиCORS
, Chrome
Запросы между источниками ограничены. В это время либо серверная часть сотрудничает, чтобы снять ограничение, либо используетAllow-Control-Allow-Origin: *плагин.
React Nature отправляет двоичные данные (двоичные данные)
из-заReact Native
серединаFetch
Нижний слой объекта используетXHR
реализация, которая ограничивает возможность отправки двоичных данных. КонечноReact Native
Предоставляет ряд способов решения этой проблемы, например: преобразование двоичных файлов в строки base64 или использование сторонних библиотек. react-native-fetch-blob.但是并没有从底层解决这个问题。
Преобразование двоичного кода в base64 для отправки
слишком далеко,React Native
Несериализованные данные не могут быть отправлены, поэтому для отправки двоичных данных хорошим выбором будет строка в кодировке Base64.
Например, вы загружаете изображение с сервера (примечание: не черезurl
полученный с сервера), запрос проходит через поток JavaScript, а затем черезReact Native
Предоставленный мост, наконец, отправляется на сервер через сетевой модуль собственной системы. Сервер возвращает изображение в кодировке Base64,JavaScript
После того, как поток получит возвращенную строку, он выделяет соответствующую память, а затемReact Native
Соответствующий нативный модуль будет вызываться для рендеринга соответствующего изображения. Но стоит отметить, что такой подход создает типичную проблему с производительностью — утечки памяти.
Передача двоичных файлов в кодировке Base64 вызовет ряд проблем с производительностью.эта статьяПеречислено большинство проблем производительности и предложены соответствующие решения.
В настоящее время существуют различные проблемы с отправкой двоичных файлов с использованием различных методов, и окончательное решение состоит в том, чтобы потребовать соответствующих стандартов для реализации двоичной передачи. В настоящее время,WebSocket
Двоичные передачи уже поддерживаются. в последней версииReact Native
Слои также уже поддерживаютсяWebSocket
протокол для передачи бинарных файлов, однако сетевой модуль соответствующей нативной платформы его пока не поддерживает.
Суммировать
React Native
Метод разработки — очень хороший опыт, но из-за ограничений различий и стандартов каждой платформы приходится решать некоторые проблемы. Вслед за соответствующей производительностью, вопросы эффективности. Кроме того, между нативными приложениями и нативными приложениями все еще существует определенный разрыв с точки зрения разработки, производительности и взаимодействия с пользователем. Но если его можно интегрировать в родное приложениеReact Native
, значительно повысит эффективность разработки.
Ссылаться на
Рекомендация: Самоотчет мастера переводческого проекта:
1. Галантерея|Каждый является мастером переводческих проектов
2. Обучение апплету WeChat от iKcamp состоит из 5 глав и 16 подразделов (включая видео).
3. Начать сериализацию бесплатно ~ 11 уроков iKcamp обновляются два раза в неделю | Создание практического проекта Node.js на основе Koa2 (включая видео) | Введение в план курса
В 2019 году оригинальная новая книга iKcamp «Практика разработки Koa и Node.js» была продана на JD.com, Tmall, Amazon и Dangdang!