动态添加使用Javascript和PHP查询XML源的新表和行

Dom*_*nik 5 javascript php xml ajax xmlhttprequest

我正在编写一个Web服务,用于查询不同数据库的价格.Web服务将新<Result>节点写入XML页面,该页面在http://service.com/xml.php?search=carpet从数据库获得结果时立即调用.不幸的是,发送到各种数据库的查询需要很长时间(总计最多30秒).显然,我不希望用户等待30秒,然后返回XML并使用这些数据构建一个表; 我希望它动态加载.

假设用户搜索"Carpet",数据库将返回多个产品,如"Red Carpet""Yellow Carpet"."Red Carpet"有两个分销商,它们被动态加载到"Red Carpet"表中."Yellow Carpet"只有一个经销商.

我需要一个价格比较表,如下图所示,如果给出新文章,则会动态添加新表,如果找到产品的新分销商,则会在表中添加新行.

你对如何做到这一点有什么建议吗?如何只收到xml.php中已更改的数据?

价格比较表结构

价格比较表结构

XML数据

<?xml version="1.0" encoding="UTF-8"?>
<Results>
<!--Given back within 5 seconds-->
<Result>
    <ArticleNumber>Red Carpet</ArticleNumber>
    <Manufacturer>Big Carpet Inc</Manufacturer>
    <Distributor>Amazonas</Distributor>
    <Prices>
        <Pricebreak>
            <Quantity>1</Quantity>
            <Price>$ 1.20</Price>
        </Pricebreak>
        <Pricebreak>
            <Quantity>10</Quantity>
            <Price>$ 1.00</Price>
        </Pricebreak>
        <Pricebreak>
            <Quantity>100</Quantity>
            <Price>$ 0.50</Price>
        </Pricebreak>
    </Prices>
</Result>
<!--Given back within another 10 seconds-->
<Result>
    <ArticleNumber>Red Carpet</ArticleNumber>
    <Manufacturer>Big Carpet Inc</Manufacturer>
    <Distributor>Veritas</Distributor>
    <Prices>
        <Pricebreak>
            <Quantity>1</Quantity>
            <Price>$ 0.90</Price>
        </Pricebreak>
        <Pricebreak>
            <Quantity>5</Quantity>
            <Price>$ 0.70</Price>
        </Pricebreak>
    </Prices>
</Result>
<!--Given back within another 5 seconds-->
<Result>
    <ArticleNumber>Yellow Carpet</ArticleNumber>
    <Manufacturer>Smallrug Corporation</Manufacturer>
    <Distributor>Veritas</Distributor>
    <Prices>
        <Pricebreak>
            <Quantity>1</Quantity>
            <Price>$ 3.90</Price>
        </Pricebreak>
        <Pricebreak>
            <Quantity>10</Quantity>
            <Price>$ 2.70</Price>
        </Pricebreak>
    </Prices>
</Result>
</Results>
Run Code Online (Sandbox Code Playgroud)

小智 5

...实际上查询不是sql数据源,而是查询从html网站获取信息的驱动程序...

如果是这种情况,那么我建议您在调用网页时不要这样做.而是将一些其他脚本作为cron任务或服务运行,根据数据的易变性定期轮询这些数据.每天每5分钟,每小时一次?并填充您的本地数据库,您可以更快的速度进行轮询.这将允许您在用户选择它时加载您希望的任何数据,而无需等待解析器.

有效地将缓存层添加到Web服务中,以便您可以快速运行应用程序,而不必依赖按需解析数据.

此外,如果自动进程不可用,当您知道数据已更新时,您可以手动进行"更新".


小智 2

假设您无法修改任何结构并升级数据检索的性能,我认为唯一的解决方案是缓存结果并尝试在本地数据库中制作数据库的副本。

异步模式我认为你处于最好的方式。

您可以开发一个脚本,将慢速查询复制到本地数据库中,前端应用程序可以最快地访问该脚本,并将此脚本应用于 Cron Job,如果您可以处理更新的记录,那么您就处于巅峰状态一波;)

我认为这会有所帮助