【问题标题】:Transferring large amounts of data from PHP to Android using compressed JSON使用压缩 JSON 将大量数据从 PHP 传输到 Android
【发布时间】:2019-03-01 17:27:26
【问题描述】:

我必须将 9.7MB 的 JSON 数据从 PHP 服务器传输到 Android 设备。使用gzencode() 压缩数据并在设备上解压缩,然后存储在SQLite 数据库中。整个下载过程大约需要 55 秒或更长时间,具体取决于网络速度。

如何缩短下载时间/优化流程?

我尝试将文本缓存到文件,然后在每次请求时发送它,但速度并没有提高。既不将文件拆分成块。

即使下载速度为 40-50MB/s,也没有任何改进。

<?php
if (isset($_POST['confirmare'])) {
header('Content-Type: application/json');

require "../conexiune.php";
$cat = $_POST['confirmare'];
$sql    = "SELECT ID, Text, Răspuns1, Răspuns2, Răspuns3, Imagine, Categorie, ImagineBlob FROM Întrebări Where Categorie = '$cat'";
$result = $conn->query($sql);
ob_start('ob_gzhandler');

class întrebare
{
    public $ID;
    public $Text;
    public $Răspuns1;
    public $Răspuns2;
    public $Răspuns3;
    public $Imagine;
    public $Categorie;
    public $ImagineGen;
    public function __construct($IDp, $Textp, $Răspuns1p, $Răspuns2p, $Răspuns3p, $Imaginep, $Categoriep, $ImagineGenp)
    {
        $this->ID      = $IDp;
        $this->Text    = $Textp;
        $this->Răspuns1      = $Răspuns1p;
        $this->Răspuns2      = $Răspuns2p;
        $this->Răspuns3      = $Răspuns3p;
        $this->Imagine = $Imaginep;
        $this->Categorie = $Categoriep;
        $this->ImagineGen =base64_encode($ImagineGenp);
    }
}
if ($result->num_rows > 0) {
    $string = "[";
    while ($row = $result->fetch_assoc()) {
        $obiect = new întrebare($row["ID"], $row["Text"], $row["Răspuns1"], $row["Răspuns2"], $row["Răspuns3"], $row["Imagine"], $row['Categorie'], $row['ImagineBlob']);
        $string .= json_encode($obiect) . ",";
    }
    $string = rtrim($string, ",");
    $string .= "]";
    $gzdata = gzencode($string, 9);
    echo $gzdata;
} else {
    echo "fără rezultate";
}
$conn->close();
}

【问题讨论】:

    标签: php android json


    【解决方案1】:

    我正在回答这个问题,以防其他人偶然发现这个问题。问题是,无论您如何压缩和优化流程,都会有大量字节需要传输,尤其是在使用 base64 编码图像时。

    为了解决这个问题,我创建了一个新表来存储我的所有图像。当我将对象从服务器发送到 Android / iOS 设备时,我只将 id 发送到每个对象的图像。当设备需要显示图像时,它会使用图像 ID 向服务器创建一个异步请求。这样一次只下载一个图像。解决问题并减少下载时间。

    希望这会有所帮助,过去一年我在这个问题上遇到了很多问题。

    【讨论】:

    • 不幸的是,关于数据是否可以这样处理的问题并不清楚。该问题确实提到了将数据存储到本地数据库,但没有讨论数据需要多久更新一次,或者各个位的大小分布是什么。
    • 是的,因为那时必须批量下载所有图像。由于速度问题,现在根据需要下载它们。
    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多