{"id":19747414,"url":"https://github.com/sisong/hsynz","last_synced_at":"2025-07-27T20:41:06.631Z","repository":{"id":150946507,"uuid":"574725903","full_name":"sisong/hsynz","owner":"sisong","description":"hsynz is a library for delta update using sync algorithm, like zsync. rsync over http(s); implement the sync algorithm on client side, and server side only need http(s) cdn. support compressor zstd \u0026 libdeflate \u0026 zlib, support large file \u0026 directory(folder), support muti-thread.","archived":false,"fork":false,"pushed_at":"2025-07-15T05:23:26.000Z","size":437,"stargazers_count":50,"open_issues_count":5,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-15T11:53:19.327Z","etag":null,"topics":["hdiffpatch","hsyni","hsynz","https","rsync","sync","zsync"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sisong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-12-06T00:02:40.000Z","updated_at":"2025-07-10T07:31:48.000Z","dependencies_parsed_at":"2023-12-26T08:29:45.904Z","dependency_job_id":"2fe54256-8f29-4656-b290-0c6afb18e114","html_url":"https://github.com/sisong/hsynz","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/sisong/hsynz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisong%2Fhsynz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisong%2Fhsynz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisong%2Fhsynz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisong%2Fhsynz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sisong","download_url":"https://codeload.github.com/sisong/hsynz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sisong%2Fhsynz/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267420257,"owners_count":24084340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hdiffpatch","hsyni","hsynz","https","rsync","sync","zsync"],"created_at":"2024-11-12T02:17:47.369Z","updated_at":"2025-07-27T20:41:06.622Z","avatar_url":"https://github.com/sisong.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [hsynz](https://github.com/sisong/hsynz)\n[![release](https://img.shields.io/badge/release-v1.2.0-blue.svg)](https://github.com/sisong/hsynz/releases) \n[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/sisong/hsynz/blob/main/LICENSE) \n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-blue.svg)](https://github.com/sisong/hsynz/pulls)\n[![+issue Welcome](https://img.shields.io/github/issues-raw/sisong/hsynz?color=green\u0026label=%2Bissue%20welcome)](https://github.com/sisong/hsynz/issues)   \n\n[![Build Status](https://github.com/sisong/hsynz/workflows/ci/badge.svg?branch=main)](https://github.com/sisong/hsynz/actions?query=workflow%3Aci+branch%3Amain)   \n\n english | [中文版](README_cn.md)   \n\nhsynz is a library for delta update using sync algorithm, like [zsync](http://zsync.moria.org.uk).   \nrsync over http(s); implement the sync algorithm on client side, and server side only need http(s) cdn. support compressor zstd \u0026 libdeflate \u0026 zlib, support large file \u0026 directory(folder), support multi-thread.   \n   \n\nRecommended scenarios: Very large number of older versions or where older versions are not available (not saved or modified, etc.) so that all deltas cannot be calculated in advance.   \n   \n\nThe server uses hsync_make to process the latest version of the data once, generating a summary info file(hsyni) of the new version of the data in chunks, and optionally compressing the new version of the data in chunks to get the release file(hsynz), which would be the hsynz equivalent if the new version of the original file were not compressed.   \n   \n\nThe client first downloads the hsyni file from the server or another user's share, calculates the updated blocks it needs to download based on its old version, and learns the location of these blocks in hsynz based on the information in hsyni, selects a communication method to download them on demand from the server's hsynz file, and merges the downloaded blocks with the existing data locally to get the latest version of the data.   \n   \n\nhsync_demo provides a test client demo for local file testing.   \nhsync_http provides a download client demo with http(s) support for sync update from a server that provides an http(s) file download service(e.g CDN, support HTTP/1.1 multi range Requests).   \nTip: You can also customise other communication methods for sync.   \n    \n---\n## Compare with [zsync](http://zsync.moria.org.uk)\n* In addition to supporting source and target as files, support is also provided for directories(folders).\n* In addition to supporting compressed release package by zlib; also supported libdeflate \u0026 zstd compressor, providing better compression ratio, i.e. smaller downloaded patch package.\n* The server-side make support multi-threaded parallel acceleration.\n* The client-side diff speed has been optimized, and also support multi-threaded parallel acceleration.\n\n---\n## Releases/Binaries\n[Download from latest release](https://github.com/sisong/hsynz/releases) : Command line app for Windows, Linux, MacOS; and .so lib for Android.   \n( release files build by projects in path `hsynz/builds` )   \n\n## Build it yourself\n### Linux or MacOS X ###\n```\n$ cd \u003cdir\u003e\n$ git clone --recursive https://github.com/sisong/hsynz.git\n$ cd hsynz\n$ make\n```\n\n### Windows ###\n```\n$ cd \u003cdir\u003e\n$ git clone --recursive https://github.com/sisong/hsynz.git\n```\nbuild `hsynz/builds/vc/hsynz.sln` with [`Visual Studio`](https://visualstudio.microsoft.com)   \n\n### libhsynz.so for Android ###   \n* install [Android NDK](https://developer.android.google.cn/ndk/downloads)\n* `$ cd \u003cdir\u003e/hsynz/builds/android_ndk_jni_mk`\n* `$ build_libs_static.sh`  (or `$ build_libs_static.bat` on windows, then got \\*.so files)\n* import file `com/github/sisong/hsynz.java` (from `hsynz/builds/android_ndk_jni_mk/java/`) \u0026 .so files, java code can call the sync patch function in libhsynz.so\n   \n\n---\n## **hsync_make** command line usage:  \n```\nhsync_make: [options] newDataPath out_hsyni_file [out_hsynz_file]\n  newDataPath can be file or directory(folder),\n  if newDataPath is a file \u0026 no -c-... option, out_hsynz_file can empty.\noptions:\n  -s-matchBlockSize\n      matchBlockSize\u003e=128, DEFAULT -s-2k, recommended 1024,4k,...\n  -b-safeBit\n      set allow patch fail hash clash probability: 1/2^safeBit;\n      safeBit\u003e=14, DEFAULT -b-24, recommended 20,32...\n  -p-parallelThreadNumber\n    DEFAULT -p-4;\n    if parallelThreadNumber\u003e1 then open multi-thread Parallel mode;\n  -c-compressType[-compressLevel]\n      set out_hsynz_file Compress type \u0026 level, DEFAULT uncompress;\n      support compress type \u0026 level:\n        -c-zlib[-{1..9}[-dictBits]]     DEFAULT level 9\n            dictBits can 9--15, DEFAULT 15.\n        -c-gzip[-{1..9}[-dictBits]]     DEFAULT level 9\n            dictBits can 9--15, DEFAULT 15.\n            compress by zlib, out_hsynz_file is .gz file format.\n        -c-ldef[-{1..12}]           DEFAULT level 12 (dictBits always 15).\n            compress by libdeflate, compatible with zlib's deflate encoding.\n        -c-lgzip[-{1..12}]          DEFAULT level 12 (dictBits always 15)\n            compress by libdeflate, out_hsynz_file is .gz file format.\n        -c-zstd[-{10..22}[-dictBits]]   DEFAULT level 21\n            dictBits can 15--30, DEFAULT 24.\n  -C-checksumType\n      set strong Checksum type for block data, DEFAULT -C-xxh128;\n      support checksum type:\n        -C-xxh128\n        -C-md5\n        -C-sha512\n        -C-sha256\n        -C-crc32\n            WARNING: crc32 is not strong \u0026 secure enough!\n  -n-maxOpenFileNumber\n      limit Number of open files at same time when newDataPath is directory;\n      maxOpenFileNumber\u003e=8, DEFAULT -n-48, the best limit value by different\n        operating system.\n  -g#ignorePath[#ignorePath#...]\n      set iGnore path list in newDataPath directory; ignore path list such as:\n        #.DS_Store#desktop.ini#*thumbs*.db#.git*#.svn/#cache_*/00*11/*.tmp\n      # means separator between names; (if char # in name, need write #: )\n      * means can match any chars in name; (if char * in name, need write *: );\n      / at the end of name means must match directory;\n  -f  Force overwrite, ignore write path already exists;\n      DEFAULT (no -f) not overwrite and then return error;\n      if used -f and write path is exist directory, will always return error.\n  --patch\n      swap to hsync_demo mode.\n  -v  output Version info.\n  -h or -?\n      output Help info (this usage).\n```\n\n## **hsync_http** command line usage:  \n```\ndownload   : [options] -dl#hsyni_file_url hsyni_file\nlocal  diff: [options] oldPath hsyni_file hsynz_file_url -diff#outDiffFile\nlocal patch: [options] oldPath hsyni_file -patch#diffFile outNewPath\nsync  infos: [options] oldPath hsyni_file [-diffi#cacheTempFile]\nsync  patch: [options] oldPath [-dl#hsyni_file_url] hsyni_file hsynz_file_url [-diffi#cacheTempFile] outNewPath\n  oldPath can be file or directory(folder),\n  if oldPath is empty input parameter \"\"\noptions:\n  -dl#hsyni_file_url\n    download hsyni_file from hsyni_file_url befor sync patch;\n  -diff#outDiffFile\n    create diffFile from ranges of hsynz_file_url befor local patch;\n  -diffi#cacheTempFile\n    saving diffInfo to cache file for optimize speed when continue sync patch;\n  -patch#diffFile\n    local patch(oldPath+diffFile) to outNewPath;\n  -cdl-{0|1}        or  -cdl-{off|on}\n    continue download data from breakpoint;\n    DEFAULT -cdl-1 opened, need set -cdl-0 or -cdl-off to close continue mode;\n  -rdl-retryDownloadNumber\n    number of auto retry connection, when network disconnected while downloading;\n    DEFAULT -rdl-0 retry closed; recommended 5,1k,1g,...\n  -r-stepRangeNumber\n    DEFAULT -r-32, recommended 16,20,...\n    limit the maximum number of .hsynz data ranges that can be downloaded\n    in a single request step;\n    if http(s) server not support multi-ranges request, must set -r-1\n  -p-parallelThreadNumber\n    DEFAULT -p-4;\n    if parallelThreadNumber\u003e1 then open multi-thread Parallel mode;\n    NOTE: now download data always used single-thread.\n  -n-maxOpenFileNumber\n      limit Number of open files at same time when oldPath is directory;\n      maxOpenFileNumber\u003e=8, DEFAULT -n-24, the best limit value by different\n        operating system.\n  -g#ignorePath[#ignorePath#...]\n      set iGnore path list in oldPath directory; ignore path list such as:\n        #.DS_Store#desktop.ini#*thumbs*.db#.git*#.svn/#cache_*/00*11/*.tmp\n      # means separator between names; (if char # in name, need write #: )\n      * means can match any chars in name; (if char * in name, need write *: );\n      / at the end of name means must match directory;\n  -f  Force overwrite, ignore write path already exists;\n      DEFAULT (no -f) not overwrite and then return error;\n      not support oldPath outNewPath same path!\n      if used -f and outNewPath is exist file:\n        if patch output file, will overwrite;\n        if patch output directory, will always return error;\n      if used -f and outNewPath is exist directory:\n        if patch output file, will always return error;\n        if patch output directory, will overwrite, but not delete\n          needless existing files in directory.\n  -v  output Version info.\n  -h or -?\n      output Help info (this usage).\n```\n\n## **hsync_demo** command line usage:  \nThis cmdline is used for local sync tests, replacing the actual URL remote file with local file, see the hsync_http usage.\n\n---\n## hsynz vs [zsync](http://zsync.moria.org.uk):\ncase list([download from OneDrive](https://1drv.ms/u/s!Aj8ygMPeifoQgUIZxYac5_uflNoN)):   \n| |newFile \u003c-- oldFile|newSize|oldSize|\n|----:|:----|----:|----:|\n|1|7-Zip_22.01.win.tar \u003c-- 7-Zip_21.07.win.tar|5908992|5748224|\n|2|Chrome_107.0.5304.122-x64-Stable.win.tar \u003c-- 106.0.5249.119|278658560|273026560|\n|3|cpu-z_2.03-en.win.tar \u003c-- cpu-z_2.02-en.win.tar|8718336|8643072|\n|4|curl_7.86.0.src.tar \u003c-- curl_7.85.0.src.tar|26275840|26030080|\n|5|douyin_1.5.1.mac.tar \u003c-- douyin_1.4.2.mac.tar|407940608|407642624|\n|6|Emacs_28.2-universal.mac.tar \u003c-- Emacs_27.2-3-universal.mac.tar|196380160|257496064|\n|7|FFmpeg-n_5.1.2.src.tar \u003c-- FFmpeg-n_4.4.3.src.tar|80527360|76154880|\n|8|gcc_12.2.0.src.tar \u003c-- gcc_11.3.0.src.tar|865884160|824309760|\n|9|git_2.33.0-intel-universal-mavericks.mac.tar \u003c-- 2.31.0|73302528|70990848|\n|10|go_1.19.3.linux-amd64.tar \u003c-- go_1.19.2.linux-amd64.tar|468835840|468796416|\n|11|jdk_x64_mac_openj9_16.0.1_9_openj9-0.26.0.tar \u003c-- 9_15.0.2_7-0.24.0|363765760|327188480|\n|12|jre_1.8.0_351-linux-x64.tar \u003c-- jre_1.8.0_311-linux-x64.tar|267796480|257996800|\n|13|linux_5.19.9.src.tar \u003c-- linux_5.15.80.src.tar|1269637120|1138933760|\n|14|Minecraft_175.win.tar \u003c-- Minecraft_172.win.tar|166643200|180084736|\n|15|OpenOffice_4.1.13.mac.tar \u003c-- OpenOffice_4.1.10.mac.tar|408364032|408336896|\n|16|postgresql_15.1.src.tar \u003c-- postgresql_14.6.src.tar|151787520|147660800|\n|17|QQ_9.6.9.win.tar \u003c-- QQ_9.6.8.win.tar|465045504|464837120|\n|18|tensorflow_2.10.1.src.tar \u003c-- tensorflow_2.8.4.src.tar|275548160|259246080|\n|19|VSCode-win32-x64_1.73.1.tar \u003c-- VSCode-win32-x64_1.69.2.tar|364025856|340256768|\n|20|WeChat_3.8.0.41.win.tar \u003c-- WeChat_3.8.0.33.win.tar|505876992|505018368|\n   \n\n**test PC**: Windows11, CPU R9-7945HX, SSD PCIe4.0x4 4T, DDR5 5200MHz 32Gx2   \n**Program version**: hsynz 1.1.1, zsync 0.6.2  (more programs's testing see [HDiffPatch](https://github.com/sisong/HDiffPatch))   \n**test Program**:   \n**zsync** run make with `zsyncmake -b 2048 -o {out_newi} {new}`,   \nclient sync diff\u0026patch by `zsync -i {old} -o {out_new} {newi}` (all files are local)   \n**zsync -z** run make with `zsyncmake -b 2048 -z -u {new.gz} -o {out_newi} {new}`   \n**hsynz** run make with `hsync_make -s-2k {new} {out_newi} [{-c-?} {out_newz}]`,    \nclient sync diff\u0026patch by `hsync_demo {old} {newi} {newz} {out_new}` (all files are local)   \n**hsynz p1** run make without compressor \u0026 out_newz , add `-p-1`   \n**hsynz p8** run make without compressor \u0026 out_newz , add `-p-8`   \n**hsynz p1 -zlib** run make with `-p-1 -c-zlib-9` (run `hsync_demo` with `-p-1`)   \n**hsynz p8 -zlib** run make with `-p-8 -c-zlib-9` (run `hsync_demo` with `-p-8`)   \n**hsynz p1 -gzip** run make with `-p-1 -c-gzip-9` (run `hsync_demo` with `-p-1`)   \n**hsynz p8 -gzip** run make with `-p-8 -c-gzip-9` (run `hsync_demo` with `-p-8`)   \n**hsynz p1 -ldef** run make with `-p-1 -c-ldef-12` (run `hsync_demo` with `-p-1`)   \n**hsynz p8 -ldef** run make with `-p-8 -c-ldef-12` (run `hsync_demo` with `-p-8`)   \n**hsynz p1 -lgzip** run make with `-p-1 -c-lgzip-12` (run `hsync_demo` with `-p-1`)   \n**hsynz p8 -lgzip** run make with `-p-8 -c-lgzip-12` (run `hsync_demo` with `-p-8`)   \n**hsynz p1 -zstd** run make with `-p-1 -c-zstd-21-24` (run `hsync_demo` with `-p-1`)   \n**hsynz p8 -zstd** run make with `-p-8 -c-zstd-21-24` (run `hsync_demo` with `-p-8`)   \n   \n**test result average**:\n|Program|compress|make mem|speed|sync mem|max mem|speed|\n|:----|----:|----:|----:|----:|----:|----:|\n|zsync|52.94%|1M|353.9MB/s|7M|23M|34MB/s|\n|zsync -z|20.67%|1M|14.8MB/s|12M|37M|28MB/s|\n|hsynz p1|51.05%|5M|2039.5MB/s|5M|19M|307MB/s|\n|hsynz p8|51.05%|21M|4311.9MB/s|12M|27M|533MB/s|\n|hsynz p1 zlib|20.05%|6M|17.3MB/s|6M|22M|273MB/s|\n|hsynz p8 zlib|20.05%|30M|115.1MB/s|13M|29M|435MB/s|\n|hsynz p1 gzip|20.12%|6M|17.3MB/s|6M|22M|268MB/s|\n|hsynz p8 gzip|20.12%|30M|115.0MB/s|13M|29M|427MB/s|\n|hsynz p1 ldef|19.57%|15M|7.8MB/s|6M|22M|272MB/s|\n|hsynz p8 ldef|19.57%|96M|57.0MB/s|13M|29M|431MB/s|\n|hsynz p1 lgzip|19.64%|15M|7.9MB/s|6M|22M|267MB/s|\n|hsynz p8 lgzip|19.64%|96M|56.9MB/s|13M|29M|419MB/s|\n|hsynz p1 zstd|14.96%|532M|1.9MB/s|24M|34M|264MB/s|\n|hsynz p8 zstd|14.95%|3349M|10.1MB/s|24M|34M|410MB/s|\n    \n\n## input Apk Files for test: \ncase list:\n| |app|newFile \u003c-- oldFile|newSize|oldSize|\n|----:|:---:|:----|----:|----:|\n|1|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/cn.wps.moffice_eng.png\" width=\"36\"\u003e|cn.wps.moffice_eng_13.30.0.apk \u003c-- 13.29.0|95904918|94914262|\n|2|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.achievo.vipshop.png\" width=\"36\"\u003e|com.achievo.vipshop_7.80.2.apk \u003c-- 7.79.9|127395632|120237937|\n|3|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.adobe.reader.png\" width=\"36\"\u003e|com.adobe.reader_22.9.0.24118.apk \u003c-- 22.8.1.23587|27351437|27087718|\n|4|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.alibaba.android.rimet.png\" width=\"36\"\u003e|com.alibaba.android.rimet_6.5.50.apk \u003c-- 6.5.45|195314449|193489159|\n|5|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.amazon.mShop.android.shopping.png\" width=\"36\"\u003e|com.amazon.mShop.android.shopping_24.18.2.apk \u003c-- 24.18.0|76328858|76287423|\n|6|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.baidu.BaiduMap.png\" width=\"36\"\u003e|com.baidu.BaiduMap_16.5.0.apk \u003c-- 16.4.5|131382821|132308374|\n|7|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.dragon.read.png\" width=\"36\"\u003e|com.dragon.read_5.5.3.33.apk \u003c-- 5.5.1.32|45112658|43518658|\n|8|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.ebay.mobile.png\" width=\"36\"\u003e|com.ebay.mobile_6.80.0.1.apk \u003c-- 6.79.0.1|61202587|61123285|\n|9|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.eg.android.AlipayGphone.png\" width=\"36\"\u003e|com.eg.android.AlipayGphone_10.3.0.apk \u003c-- 10.2.96|122073135|119046208|\n|10|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.google.android.apps.translate.png\" width=\"36\"\u003e|com.google.android.apps.translate_6.46.0.apk \u003c-- 6.45.0|48892967|48843378|\n|11|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.google.android.googlequicksearchbox.png\" width=\"36\"\u003e|com.google.android.googlequicksearchbox_13.38.11.apk \u003c-- 13.37.10|190539272|189493966|\n|12|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.jingdong.app.mall.png\" width=\"36\"\u003e|com.jingdong.app.mall_11.3.2.apk \u003c-- 11.3.0|101098430|100750191|\n|13|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.netease.cloudmusic.png\" width=\"36\"\u003e|com.netease.cloudmusic_8.8.45.apk \u003c-- 8.8.40|181914846|181909451|\n|14|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.reddit.frontpage.png\" width=\"36\"\u003e|com.reddit.frontpage_2022.36.0.apk \u003c-- 2022.34.0|50205119|47854461|\n|15|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.sankuai.meituan.takeoutnew.png\" width=\"36\"\u003e|com.sankuai.meituan.takeoutnew_7.94.3.apk \u003c-- 7.92.2|74965893|74833926|\n|16|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.sankuai.meituan.png\" width=\"36\"\u003e|com.sankuai.meituan_12.4.207.apk \u003c-- 12.4.205|93613732|93605911|\n|17|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.sina.weibo.png\" width=\"36\"\u003e|com.sina.weibo_12.10.0.apk \u003c-- 12.9.5|156881776|156617913|\n|18|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.smile.gifmaker.png\" width=\"36\"\u003e|com.smile.gifmaker_10.8.40.27845.apk \u003c-- 10.8.30.27728|102403847|101520138|\n|19|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.ss.android.article.news.png\" width=\"36\"\u003e|com.ss.android.article.news_9.0.7.apk \u003c-- 9.0.6|54444003|53947221|\n|20|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.ss.android.ugc.aweme.png\" width=\"36\"\u003e|com.ss.android.ugc.aweme_22.6.0.apk \u003c-- 22.5.0|171683897|171353597|\n|21|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.taobao.taobao.png\" width=\"36\"\u003e|com.taobao.taobao_10.18.10.apk \u003c-- 10.17.0|117218670|117111874|\n|22|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.tencent.mm.png\" width=\"36\"\u003e|com.tencent.mm_8.0.28.apk \u003c-- 8.0.27|266691829|276603782|\n|23|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.tencent.mobileqq.png\" width=\"36\"\u003e|com.tencent.mobileqq_8.9.15.apk \u003c-- 8.9.13|311322716|310529631|\n|24|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.tencent.mtt.png\" width=\"36\"\u003e|com.tencent.mtt_13.2.0.0103.apk \u003c-- 13.2.0.0045|97342747|97296757|\n|25|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.tripadvisor.tripadvisor.png\" width=\"36\"\u003e|com.tripadvisor.tripadvisor_49.5.apk \u003c-- 49.3|28744498|28695346|\n|26|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.twitter.android.png\" width=\"36\"\u003e|com.twitter.android_9.61.0.apk \u003c-- 9.58.2|36141840|35575484|\n|27|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.ubercab.png\" width=\"36\"\u003e|com.ubercab_4.442.10002.apk \u003c-- 4.439.10002|69923232|64284150|\n|28|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.ximalaya.ting.android.png\" width=\"36\"\u003e|com.ximalaya.ting.android_9.0.66.3.apk \u003c-- 9.0.62.3|115804845|113564876|\n|29|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.xunmeng.pinduoduo.png\" width=\"36\"\u003e|com.xunmeng.pinduoduo_6.30.0.apk \u003c-- 6.29.1|30896833|30951567|\n|30|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/com.youdao.dict.png\" width=\"36\"\u003e|com.youdao.dict_9.2.29.apk \u003c-- 9.2.28|110624682|110628778|\n|31|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/org.mozilla.firefox.png\" width=\"36\"\u003e|org.mozilla.firefox_105.2.0.apk \u003c-- 105.1.0|83078464|83086656|\n|32|\u003cimg src=\"https://github.com/sisong/sfpatcher/raw/master/img/tv.danmaku.bili.png\" width=\"36\"\u003e|tv.danmaku.bili_7.1.0.apk \u003c-- 7.0.0|104774723|104727005|\n   \n\n**changed test Program**:   \n**zsync ...** make `-b 2048` changed to `-b 1024`   \n**hsynz ...** make `-s-2k` changed to `-s-1k`   \n\n**test result average**:\n|Program|compress|make mem|speed|sync mem|max mem|speed|\n|:----|----:|----:|----:|----:|----:|----:|\n|zsync|62.80%|1M|329.8MB/s|6M|12M|76MB/s|\n|zsync -z|59.56%|1M|19.8MB/s|8M|19M|56MB/s|\n|hsynz p1|62.43%|4M|1533.5MB/s|4M|10M|236MB/s|\n|hsynz p8|62.43%|18M|2336.4MB/s|12M|18M|394MB/s|\n|hsynz p1 zlib|58.67%|5M|22.7MB/s|4M|11M|243MB/s|\n|hsynz p8 zlib|58.67%|29M|138.6MB/s|12M|19M|410MB/s|\n|hsynz p1 gzip|58.95%|5M|22.6MB/s|4M|11M|242MB/s|\n|hsynz p8 gzip|58.95%|29M|138.9MB/s|12M|19M|407MB/s|\n|hsynz p1 ldef|58.61%|14M|23.7MB/s|4M|11M|242MB/s|\n|hsynz p8 ldef|58.61%|96M|149.1MB/s|12M|19M|413MB/s|\n|hsynz p1 lgzip|58.90%|14M|23.6MB/s|4M|11M|240MB/s|\n|hsynz p8 lgzip|58.90%|96M|149.1MB/s|12M|19M|405MB/s|\n|hsynz p1 zstd|57.74%|534M|2.7MB/s|24M|28M|234MB/s|\n|hsynz p8 zstd|57.74%|3434M|13.4MB/s|24M|28M|390MB/s|\n   \n\n---\n## Contact\nhousisong@hotmail.com  ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsisong%2Fhsynz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsisong%2Fhsynz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsisong%2Fhsynz/lists"}