Почему мой веб-сайт показывает элементы без стиля перед отображением стилизованной страницы? - PullRequest
0 голосов
/ 07 апреля 2019

Я разработал этот сайт.

Ссылка на сайт

Если вы нажмете на вкладки выше.Он показывает веб-сайт без стилей в течение микросекунды, а затем отображает.Я попробовал все и удалил все ошибки и предупреждения из консоли, но все же это происходит.Он не должен этого делать, потому что он очень негативно смотрится, если интернет работает медленно, тогда он может быть там какое-то время.код:

Обновление:

Новое упорядочение файлов JS, css, т. е. сначала я ставлю сейчас jquery, затем начальную загрузку, а затем другие плагины.Я помещаю Css в начало страницы и скрипты после рендеринга тела.Пожалуйста, проверьте.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Google Tag Manager -->
    <script>
        (function (w, d, s, l, i) {
            w[l] = w[l] || []; w[l].push({
                'gtm.start':
                    new Date().getTime(), event: 'gtm.js'
            }); var f = d.getElementsByTagName(s)[0],
                j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
                    'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
        })(window, document, 'script', 'dataLayer', 'GTM-W9FNBLV');</script>
    <!-- End Google Tag Manager -->
    <!--  -->
    <!--    Document Title-->
    <!-- =============================================-->
    <!--<title>Velosi | Asset Integrity Ltd.</title>-->
    <title>@ViewBag.Title</title>
    @RenderSection("head", false)
    <!--  -->
    <!--    JavaScripts-->
    <!--    =============================================-->

    @*<script src="~/Scripts/modernizr-2.8.3.js"></script>*@
    <script src="~/Scripts/jquery-3.3.1.min.js"></script>
    <link href="~/Content/Theme/lib/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600,700|Open+Sans:300,400,600,700,800" rel="stylesheet" />
    <link href="~/Content/Theme/lib/iconsmind/iconsmind.css" rel="stylesheet">
    <link href="~/Content/External/css/ionicons.min.css" rel="stylesheet" />

    <link rel="apple-touch-icon" sizes="180x180" href="~/Content/Theme/images/favicons/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="32x32" href="~/Content/Theme/images/favicons/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="~/Content/Theme/images/favicons/favicon-16x16.png">
    <link rel="shortcut icon" type="image/x-icon" href="~/Content/Theme/images/favicons/favicon.ico">
    @*<link rel="manifest" href="~/Content/Theme/images/favicons/manifest.json">*@
    <link rel="mask-icon" href="~/Content/Theme/images/favicons/safari-pinned-tab.svg" color="#5bbad5">
    <meta name="msapplication-TileImage" content="~/Content/Theme/images/favicons/mstile-150x150.png">
    <meta name="theme-color" content="#ffffff">
    <!--  -->
    <!--    Stylesheets-->
    <!--    =============================================-->
    <!-- Default stylesheets-->
    <!-- Template specific stylesheets-->
    <link href="~/Content/Theme/lib/loaders.css/loaders.min.css" rel="stylesheet" />
    <link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600,700|Open+Sans:300,400,600,700,800" rel="stylesheet">
    <link href="~/Content/Theme/lib/iconsmind/iconsmind.css" rel="stylesheet">
    <link href="~/Content/External/css/ionicons.min.css" rel="stylesheet" />
    <link href="~/Content/Theme/lib/hamburgers/dist/hamburgers.min.css" rel="stylesheet">
    <link href="~/Content/Theme/lib/font-awesome/css/font-awesome.min.css" rel="stylesheet">
    <link href="~/Content/Theme/lib/owl.carousel/dist/assets/owl.carousel.min.css" rel="stylesheet">
    <link href="~/Content/Theme/lib/owl.carousel/dist/assets/owl.theme.default.min.css" rel="stylesheet">
    <link href="~/Content/Theme/lib/remodal/dist/remodal.css" rel="stylesheet">
    <link href="~/Content/Theme/lib/remodal/dist/remodal-default-theme.css" rel="stylesheet">
    <link href="~/Content/Theme/lib/flexslider/flexslider.css" rel="stylesheet">
    <link href="~/Content/Theme/lib/lightbox2/dist/css/lightbox.css" rel="stylesheet">
    <link href="~/Content/Theme/Toaster/toastr.css" rel="stylesheet" />
    <!-- Main stylesheet and color file-->
    <link href="~/Content/Theme/css/style.css" rel="stylesheet">
    <link href="~/Content/Theme/css/custom.css" rel="stylesheet">
    <!-- DataTable -->
    <link href="~/Content/Theme/DataTables-1.10.18/css/dataTables.bootstrap.min.css" rel="stylesheet" />
    <link href="~/Content/Theme/FixedHeader-3.1.4/css/fixedHeader.bootstrap.min.css" rel="stylesheet" />
    <link href="~/Content/Theme/Responsive-2.2.2/css/responsive.bootstrap.min.css" rel="stylesheet" />
    <!-- Datepicker -->
    <link href="~/Content/Theme/select2/dist/css/select2.min.css" rel="stylesheet" />
    <link href="~/Content/Site.css" rel="stylesheet" />

    @RenderSection("scripts", required: false)

    <script src="~/Scripts/modernizr-2.8.3.js"></script>
    <script src="~/Scripts/popper.min.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
    <script src="~/Content/Theme/lib/imagesloaded/imagesloaded.pkgd.min.js"></script>
    <script src="~/Content/Theme/lib/gsap/src/minified/TweenMax.min.js"></script>
    <script src="~/Content/Theme/lib/gsap/src/minified/plugins/ScrollToPlugin.min.js"></script>
    <script src="~/Content/Theme/lib/CustomEase.min.js"></script>
    <script src="~/Content/Theme/js/config.js"></script>
    <script src="~/Content/Theme/js/zanimation.js"></script>
    <script src="~/Content/Theme/lib/owl.carousel/dist/owl.carousel.min.js"></script>
    <script src="~/Content/Theme/lib/remodal/dist/remodal.js"></script>
    <script src="~/Content/Theme/lib/lightbox2/dist/js/lightbox.js"></script>
    <script src="~/Content/Theme/lib/flexslider/jquery.flexslider-min.js"></script>
    <script src="~/Content/Theme/js/core.js"></script>
    <script src="~/Content/Theme/js/main.js"></script>
    <script src="~/Content/External/js/jquery.slidereveal.min.js"></script>
    <!-- DataTable -->
    <script src="~/Content/Theme/DataTables-1.10.18/js/jquery.dataTables.min.js"></script>
    <script src="~/Content/Theme/DataTables-1.10.18/js/dataTables.bootstrap.min.js"></script>
    <script src="~/Content/Theme/FixedHeader-3.1.4/js/dataTables.fixedHeader.min.js"></script>
    <script src="~/Content/Theme/Responsive-2.2.2/js/dataTables.responsive.min.js"></script>
    <script src="~/Content/Theme/Responsive-2.2.2/js/responsive.bootstrap.min.js"></script>
    <!-- Datepicker -->
    <script src="~/Content/Theme/select2/dist/js/select2.min.js"></script>
    <script src="~/Content/Theme/Toaster/toastr.js"></script>


    <!--    Favicons-->
    <!--    =============================================-->





</head>
<body data-spy="scroll" data-target=".inner-link" data-offset="60">
    <!-- Google Tag Manager (noscript) -->
    <noscript>
        <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-W9FNBLV"
                height="0" width="0" style="display:none;visibility:hidden"></iframe>
    </noscript>
    <!-- End Google Tag Manager (noscript) -->

    <main>
        <div class="loading" id="preloader">
            <div class="loader h-100 d-flex align-items-center justify-content-center">
                <div class="line-scale">
                    <div></div>
                    <div></div>
                    <div></div>
                    <div></div>
                    <div></div>
                </div>
            </div>
        </div>
        @Html.Partial("_Header")


        @*<button class="btn btn-md btn-round btnEmailUs RequestCallBackIcon" id="trigger"><i class="fa fa-phone fa-lg"></i></button>*@
        <div style="display: flex; justify-content: flex-end;" class="m-2">
            <button class="right btn btn-md btn-round btnEmailUs1 RequestCallBackIcon" id="trigger"><i class="fa fa-phone fa-lg"></i></button>
        </div>


        <div id='slider' class="card text-white bg-dark EnquiryLowerBody" style="max-width: 20rem; display:none;">
            <div class="card-header header-callback">Request Callback</div>
            @using (Html.BeginForm("EnquiryForm", "Home", null, FormMethod.Post, new { @class = "mt-3" }))
            {
                <div class="card-body CardBody">
                    <div class="form-group">
                        <div class="col-md-12">
                            <input type="text" id="name" name="name" oninput="this.value = this.value.replace(/[0-9]/, '');" class="form-control" placeholder="Your name" required>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-12">
                            <input type="text" oninput="this.value = this.value.replace(/[^0-9]/g, '');" id=" mobileno" name="mobileno" class="form-control" placeholder="00971 XX XXXXXXX" required>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-12">
                            <input type="email" id="email" name="email" class="form-control" placeholder="name@domain.com" required>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-12">
                            <select class="d-flex flex-wrap" name="MainServiceName" id="MainServices">
                                <option selected value="m-None">-Select-</option>
                                <option value="m-SS">Software Services</option>
                                <option value="m-AIMS">Asset Integrity Management Services</option>
                                <option value="m-HSE">HSE & Environmental Services</option>
                                <option value="m-ES">Engineering Services</option>
                                <option value="Other">Other</option>
                            </select>
                        </div>
                    </div>

                    <div id="divSubServices" class="form-group">
                        <div class="col-md-12">
                            <select class="d-flex flex-wrap" name="SubServiceName" id="SubServices">

                                <option class="" selected value="s-None">-Select-</option>
                                <option class="SoftwareServices" value="s-AIMS">VAIL-Plant (Asset Integrity Management System)</option>
                                <option class="SoftwareServices" value="s-PHA">VAIL-PHA (Process Hazard Analysis)</option>
                                <option class="SoftwareServices" value="s-PSRA">VAIL-PSRA (Petrol Station Risk Assessment)</option>
                                <option class="SoftwareServices" value="s-MTS">VAIL-MTS (Material Tracking System)</option>

                                <option class="AIMS" value="s-RBI">Risk Based Inspection (RBI)</option>
                                <option class="AIMS" value="s-RCM">Reliability Centered Maintenance(RCM)</option>
                                <option class="AIMS" value="s-SIL">Safety Integrity Level (SIL)</option>
                                <option class="AIMS" value="s-PIMS">Pipeline Inspection Management System (Onshore & Offshore)</option>

                                <option class="HSE" value="s-HSECES">Health, Safety & Environmental Critical Equipment Systems (HSECES)</option>
                                <option class="HSE" value="s-AM">Risk Assessment & Management</option>
                                <option class="HSE" value="s-OH">Occupational Health</option>
                                <option class="HSE" value="s-EMP">Emergency Management & Planning</option>
                                <option class="HSE" value="s-HS">HSEIA Studies</option>
                                <option class="HSE" value="s-ES">Environmental Services</option>

                                <option class="EngineeringServices" value="s-FFS">Fitness for Services(FFS)</option>
                                <option class="EngineeringServices" value="s-CDFDECS">Conceptual Design, FEED, Detailed Design and Engineering Consultancy Services</option>
                                <option class="EngineeringServices" value="s-OMP">Operating Manuals & Procedures</option>
                                <option class="EngineeringServices" value="s-DVA">Design Verification & Appraisal</option>
                                <option class="EngineeringServices" value="s-ABDS">As-Built Drafting Services</option>

                                <option value="Other">Other</option>
                            </select>
                        </div>
                    </div>

                    <div id="divDescription" class="form-group">
                        <div class="col-md-12">
                            <input type="text" id="Description" name="Description" class="form-control" placeholder="Description">
                        </div>
                    </div>
                    <div id="divDescription" class="form-group">
                        <div class="col-md-12">
                            <button id="btnSubmit" class="btn btn-primary BtnSubmitEnquiry">Submit</button>
                        </div>
                    </div>

                </div>
            }

        </div>

        @RenderBody()
        <div id="cookieConsent">
            <div id="closeCookieConsent">x</div>
            We use tools, such as cookies, to enable essential services and functionality on our site and to collect data on how visitors                   interact with our site, products and services. <a class="cookieConsentOK">Got it</a>
        </div>

        @Html.Partial("_Footer")

    </main>
    <!--  -->

</body>
</html>

<script type="text/javascript">
    $(document).ready(function () {

        $("#divDescription").hide();
        $("#divSubServices").hide();

        if (!localStorage.getItem('firstVisit')) {

            localStorage.setItem('firstVisit', 'true');

            setTimeout(function () {
                $("#cookieConsent").fadeIn(200);
            }, 4000);
            $("#closeCookieConsent, .cookieConsentOK").click(function () {
                $("#cookieConsent").fadeOut(200);
            });
        }
    });

    window.addEventListener('mousewheel', function (e) {
        e.preventDefault();
    }, { passive: false });

    $("#trigger").click(
        function()
        {
            $("#slider").show();
        }
    );

    $("#slider").slideReveal({
        trigger: $("#trigger"),
        position: "right",
        push: false,
        overlay: true

    });



    $("#MainServices").change(function () {
        var OptionSelected = $(this).find("option:selected");
        var ValueSelected = OptionSelected.val();

        if (ValueSelected == "Other") {

            $("#SubServices").val("s-None");
            $('#divSubServices').hide();
            $('#divDescription').show();

        }
        else {
            $('#divSubServices').show();
            $('#divDescription').hide();
        }

        //Software Services

        if (ValueSelected == "m-None") {

            $("#SubServices").val("s-None");
            $('#divSubServices').hide();

            return;
        }

        if (ValueSelected == "s-None") {

            $('#divDescription').hide();

            return;
        }

        if (ValueSelected == "m-SS") {

            $("#SubServices").show();
            var drpSubServices = $('#SubServices');

            drpSubServices.children('option[class=SoftwareServices]').show();

            drpSubServices.children('option[class=HSE]').hide();

            drpSubServices.children('option[class=AIMS]').hide();

            drpSubServices.children('option[class=EngineeringServices]').hide();

            return;

        }

        //AIMS
        if (ValueSelected == "m-AIMS") {

            $("#SubServices").show();

            var drpSubServices = $('#SubServices');

            drpSubServices.children('option[class=SoftwareServices]').hide();

            drpSubServices.children('option[class=HSE]').hide();

            drpSubServices.children('option[class=AIMS]').show();

            drpSubServices.children('option[class=EngineeringServices]').hide();

            return;

        }

        //HSE
        if (ValueSelected == "m-HSE") {

            $("#SubServices").show();

            var drpSubServices = $('#SubServices');

            drpSubServices.children('option[class=SoftwareServices]').hide();

            drpSubServices.children('option[class=HSE]').show();

            drpSubServices.children('option[class=AIMS]').hide();

            drpSubServices.children('option[class=EngineeringServices]').hide();

            return;

        }

        //Engineering Services
        if (ValueSelected == "m-ES") {

            $("#SubServices").show();

            var drpSubServices = $('#SubServices');

            drpSubServices.children('option[class=SoftwareServices]').hide();

            drpSubServices.children('option[class=HSE]').hide();

            drpSubServices.children('option[class=AIMS]').hide();

            drpSubServices.children('option[class=EngineeringServices]').show();

            return;

        }
    });

    $("#SubServices").change(function () {
        var OptionSelected = $(this).find("option:selected");
        var ValueSelected = OptionSelected.val();
        if (ValueSelected == "Other") {

            $('#divDescription').show();

        }
        else {

            $('#divDescription').hide();
        }
    });

    $("#btnSubmit").click(function () {

        var name = $("#name").val();
        var email = $("#email").val();
        var mobileno = $("#mobileno").val();
        var MainServiceName = $("#MainServices").find(":selected").text();
        var SubServiceName = $("#SubServices").find(":selected").text();
        var Description = $("#Description").val();


        var EnquiryForm = {
            'name': name,
            'email': email,
            'mobileno': mobileno,
            'MainServiceName': MainServiceName,
            'SubServiceName': SubServiceName,
            'Description': Description
        }
        //alert(EnquiryFormViewModel.name);
        @*$.post("/Home/EnquiryForm", EnquiryForm, function(returnedData) {
            //alert(returnedData.data);

            window.location.href= '@Url.Action("Thankyou", "Others", new {message= "Thank you for contacting us. We'll get back to you soon." })';

        });*@

    });




</script>

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Это проблема, когда вы создаете страницу с довольно большим набором добавленных элементов. Чаще всего это НЕ проблема, но ВСЕ, что необходимо проанализировать и обработать как часть загрузки вашей страницы. Начните с исправления «базовых» вещей, посмотрите, как это происходит, и перейдите к следующему набору «вещей», которые негативно влияют на производительность нагрузки.

Давайте начнем с некоторых конкретных проблем, продемонстрированных здесь, а затем перейдем к некоторым общим.

  1. НИКОГДА НИКОГДА не ставьте такие теги, как СКРИПТ или что-либо еще вне HTML-документа - вы заставляете браузеры вставлять / перемещать его внутри тела при этом. Большинство браузеров что-то делают с этим НЕВЕРНЫМ HTML, но почему бы не создать правильный HTML для начала.

  2. Поместить CSS ДО тегов сценария

  3. Сначала поместите CSS, упорядоченный «библиотекой» - вы включили библиотеку по причине, не важна каскадная последовательность - выполнение этого может даже сделать ваш СОБСТВЕННЫЙ CSS проще из-за этого «каскада» - воспринимайте это как склон вниз с вашими вещами у подножия холма. (jQuery, затем bootstrap, затем plugins, затем ваш и т. Д.)

  4. Поместите код библиотеки JavaScript перед ВАШИМ кодом - попробуйте поместить его ВСЕ в конец страницы, если это возможно, особенно ВАШ код.

Общие комментарии:

  • КАЖДЫЙ раз, когда вы делаете что-то вроде drpSubServices.children(someselector').hide();, когда вы нажимаете на DOM, это, вероятно, только ЧАСТЬ проблемы, но она определенно внесет свой вклад.
  • Как правило, библиотеки JavaScript имеют способы создания «консолидированных» комплектов для вещей, которые идут вместе - попробуйте включить их как один элемент вместо нескольких файлов .js
  • Удалите закомментированный код в JavaScript - вот для чего нужен контроль исходного кода, не заставляйте браузер анализировать мусор во время процесса рендеринга. Пустые строки для меня тоже попадают в эту категорию.
  • Рассмотрите возможность создания минимизированных версий кода JavaScript во время процесса сборки или ДО этого.
  • "Модульная форма" вашего кода - похоже, вы используете MVC, поэтому создавайте частичные представления вещей и включайте их только тогда, когда / если вам это нужно. Размещение ВСЕХ CSS и JavaScript на каждой странице добавляет негативное влияние на страницы, где они НЕ используются. (см. примечание .min в этом случае - даже БОЛЬШЕ важного для повторно используемого контента)
  • Форматируйте лучше - вам действительно нужны 6 пустых строк в HTML? NO. - вряд ли это огромная проблема, но ПОЧЕМУ? (браузер вынужден анализировать ненужные вещи)
  • ЕСЛИ это поможет ВАМ включить пустые строки, возможно, создать частичное представление? (модульный код?) (больше, чтобы помочь вам, а не браузер здесь)
    • не используйте комментарии, такие как <!-- -->, которые анализируются с учетом «не визуализированных» комментариев, например, если вы здесь используете MVC, вместо этого используйте эти комментарии MVC Как написать комментарий в представлении Razor?

КАК консолидировать попадания DOM: (может не быть специфичным для загрузки, но ЕСЛИ событие вызывает это)

Хит DOM один раз, не много раз:

Кэшируйте элемент: здесь вы ДЕЙСТВИТЕЛЬНО, но, если вы перевернете эти строки, НЕ дважды нажмите DOM:

$("#SubServices").show();
var drpSubServices = $('#SubServices');

новый:

var drpSubServices = $('#SubServices');
drpSubServices.show();

DO STUFF ONCE, не кратный

drpSubServices.children('option[class=HSE]').hide();
drpSubServices.children('option[class=AIMS]').hide();
drpSubServices.children('option[class=EngineeringServices]').hide();
... more code like that

Лучше: (не все, просто нажми ОДИН раз), пара способов сделать это

drpSubServices.children('option[class=HSE]').hide();// NOT a fast selector
drpSubServices.children('.HSE').hide();//faster selector but...still

Хит DOM ONE раз:

let options = drpSubServices.children('option');
options
  .filter('.HSE,.AIMS,.EngineeringServices,.TPIs,.IIS,.NDTCM')
  .hide();
options.filter('.SoftwareServices').show();

//OR better, just hide all and show the one
let options = drpSubServices.children('option');
options.hide();
options.filter('.SoftwareServices').show();

НЕ продолжайте воссоздание объекта:

if (ValueSelected == "m-SS") {
    $("#SubServices").show();
    var drpSubServices = $('#SubServices');

Сделай это один раз

    let drpSubServices = $('#SubServices');

    //NOW all the conditionals
    if (ValueSelected == "m-SS") {
        drpSubServices.show();

Разоблачение LAST

    let drpSubServices = $('#SubServices');
    if (ValueSelected == "m-SS") {
        let options = 
           //... (see above for that)
        // THEN show it
        drpSubServices.show();

Другой пример:

$("#divDescription")
  .add("#divSubServices")
  .hide();

ИЛИ рассмотрим класс типа ".hidden {display: none;} on an element initially Я не показываю`

Затем, когда вам это нужно, переключите этот класс

$("#divDescription").toggleClass('hidden',conditional);
//or
$("#divDescription").toggleClass('hidden',false);
//or
$("#divDescription").removeClass('hidden');
1 голос
/ 07 апреля 2019

Поместите все теги link, которые загружают таблицы стилей, перед тегом script, который загружает файл javascript.

На самом деле вы должны извлечь js-файл из head и поместить его рядом с закрывающим концом тега body

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...