[email protected]버 전 구체 적 인 핫 업데이트 메커니즘
5370 단어 업데이트react-native
핫 업데이트 방법
열 업 데 이 트 는 또 전체 업데이트 와 증분 업데이트 로 나 뉜 다.
프로그램 을 시작 할 때 서버 에 업데이트 가 필요 하 냐 는 요청 을 보 냅 니 다.
URL: http://update.reactnative.cn/api/checkUpdate/${key}
가방 을 잡 든 소스 코드 를 보 든 결론 은 이 요청 을 사용 하여 json 의 key 값 을 업데이트 하여 app 에 맞 게 하 는 것 입 니 다.{
"upToDate": true,
"ok": 1
}
이것 은 서버 가 나 에 게 되 돌려 준 값 입 니 다. 이미 최신 버 전이 라면 upToDate 를 되 돌려 줍 니 다.
{
"expired": true,
"downloadUrl":'xxx',
"ok": 1
}
하 드 버 전 업데이트 가 필요 하 다 면 expired 의 인 자 를 되 돌려 주 고 downloadUrl (마음대로 쓴 것 일 수도 있 습 니 다. 구체 적 으로 는 이 이름 이 아 닐 수도 있 습 니 다. 게 으 르 면 버 전 을 지 워 보 겠 습 니 다) 의 인 자 를 주 십시오. 물론 이 인 자 는 제 가 그의 홈 페이지 에서 설정 한 것 입 니 다. 바로 제 새 버 전의 다운로드 주소 입 니 다.
이 럴 때 열 업데이트 가 필요 하 다 면 현재 버 전
[email protected]
의 대량의 데이터 시험 상황 을 보면 반환 형식 은 두 가지 가 있 습 니 다. 비록 소스 코드 에 세 번 째 가 있 지만.{
"update": true,
"hash": "FppJ-yU8-_bvYJe5Sg5_opUp_eFH",
"name": "0.2.1",
"description": "test",
"metaInfo": "0.2.1",
"updateUrl": "http://update-packages.reactnative.cn/FppJ-yU8-_bvYJe5Sg5_opUp_eFH?e=1483510148&token=made75kGFhOozkiRfa7LK_E1xG1pLOnhW8fhbnev:t2YXoxZZXQImvvyHH1hdrnNNRmQ=",
"pdiffUrl": "http://update-packages.reactnative.cn/lpKbEZnU6_T-mvwZGfzIQby489Bm-FppJ-yU8-_bvYJe5Sg5_opUp_eFH.pdiff?e=1483510148&token=made75kGFhOozkiRfa7LK_E1xG1pLOnhW8fhbnev:YBI4sdIEr30wa1DHV4xnMUlI1bU=",
"ok": 1
}
update 는 true 로 열 업데이트 가 필요 하 다 는 뜻 입 니 다. 그 중 에 updateUrl 이라는 인자 가 있 습 니 다. 이 매개 변수 가 제공 하 는 주 소 는 전체 업데이트 주소 입 니 다. 제 전체 bundle 을 다운로드 할 것 입 니 다.또 하나의 매개 변 수 는 pdiffUrl 입 니 다. 이것 이 바로 증분 업데이트 입 니 다. 저 는 pdiff 파일 을 다운로드 한 다음 에 검 측 한 결과 안 드 로 이 드 상황 에서 cpu 가 이미 뛰 기 시 작 했 고 백 스테이지 프로그램 데이터 가 올 랐 지만 데이터 가 움 직 이지 않 았 습 니 다. 내부 계산 을 했 기 때문에 테스트 해 보 니 서로 다른 핸드폰 에서 도 표현 이 다르다 는 것 을 알 게 되 었 습 니 다.쿠 파이 A8930: 120 SViVioX 7: 90S 샤 오미 5: 75S.아이 폰 전 계열 휴대 전화 1S - 5S 사이.(눈대중 은 한 사람 이 쓴 코드 가 아니 거나 안 드 로 이 드 가 읽 고 쓴 스 레 드 에 문제 가 생 겼 습 니 다. 단지 추측 일 뿐 입 니 다) 이상 의 시간 은 시간 만 계산 하 는 것 입 니 다. 다운로드 증 가 량 이 몇 십 K 를 업데이트 하 는 것 도 1S 에 불과 하기 때 문 입 니 다.
서버 가 pdiffUrl 로 돌아 갈 지 여부 에 대해 서 는 공식 원 리 를 계산 할 수 없습니다. 같은 가방 이 있 기 때문에 가끔 은 pdiffUrl 로 돌아 갈 때 도 있 고, 어떤 때 는 updateUrl 만 있 을 때 도 있 습 니 다. 그러나 어떤 상황 에서 도 updateUrl 이 있 기 때문에 우 리 는 이 점 을 이용 하여 불필요 한 기다 림 을 고 칠 수 있 습 니 다.예 를 들 어 저 는 데이터 가 많 습 니 다. 저 는 안 드 로 이 드 기 계 를 100 S 를 기다 리 게 하고 싶 지 않 습 니 다. 백 스테이지 에서 조용히 업데이트 하고 싶 지 않 습 니 다. 그러면 바로 소스 코드 를 바 꾸 겠 습 니 다. 다행히 소스 코드 를 빨리 찾 아서 수정 하 는 것 이 더욱 쉽 습 니 다.
export async function downloadUpdate(options) {
if (!options.update) {
return;
}
if (options.diffUrl) {
await HotUpdate.downloadPatchFromPpk({
updateUrl: options.diffUrl,
hashName: options.hash,
originHashName: currentVersion,
});
} else if (options.pdiffUrl) {
await HotUpdate.downloadPatchFromPackage({
updateUrl: options.pdiffUrl,
hashName: options.hash,
});
} else {
await HotUpdate.downloadUpdate({
updateUrl: options.updateUrl,
hashName: options.hash,
});
}
return options.hash;
}
이것 이 바로 증분 업데이트 여 부 를 판단 하 는 코드 입 니 다. 그 중에서 diffUrl 은 본 적 이 없어 서 논 리 를 움 직 이지 않 기 때문에 간단 합 니 다. 증분 과 전량 을 순 서 를 바 꾸 면 됩 니 다.
export async function downloadUpdate(options) {
if (!options.update) {
return;
}
if (options.diffUrl) {
await HotUpdate.downloadPatchFromPpk({
updateUrl: options.diffUrl,
hashName: options.hash,
originHashName: currentVersion,
});
} else if (options.updateUrl) {
await HotUpdate.downloadUpdate({
updateUrl: options.updateUrl,
hashName: options.hash,
});
} else {
await HotUpdate.downloadPatchFromPackage({
updateUrl: options.pdiffUrl,
hashName: options.hash,
});
}
return options.hash;
}
해결 해 보 니 안 드 로 이 드 는 서버 가 저 에 게 pdiffUrl 을 주 었 음 에 도 불구 하고 저 는 전체 업 데 이 트 를 선택 할 것 입 니 다. 네, 3M 트 래 픽 만 들 었 습 니 다. 하지만 모두 무선 네트워크 이기 때문에 20S 이내 에 이 핫 업 데 이 트 는 분명 좋 을 것 입 니 다. 그렇게 오래 기다 릴 필요 가 없습니다.
문제.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iPhone을 iOS13.3으로 업데이트하면 dyld_shared_cache_extract_dylibs failure와 오류가 발생하여 실제 기기에 앱을 설치할 수 없습니다.제목대로 ios13.3으로 업데이트하여 xcode로 앱을 빌드하려고 했는데, dyld_shared_cache_extract_dylibs failure라는 오류가 나와 곤란한 이야기. iOS 13.3 Xcode 11....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.