当前位置:  开发笔记 > 编程语言 > 正文

php:laravel慢速视图渲染时为渲染javascript for highcharts

如何解决《php:laravel慢速视图渲染时为渲染javascriptforhighcharts》经验,为你挑选了1个好方法。

我正在建立的网站中有一个奇怪的问题.在有问题的页面上我使用了一些highcharts.一切正常,但渲染时间太长(约5秒).

当我用chrome检查它时,我看到这样的东西:

在此输入图像描述

highcharts的8个脚本位于红色框中.很明显,问题出在那里.

为了渲染highcharts(javascript)的脚本,我创建了一个控制器和视图.我以这种方式在模板中使用它们:

{{ Html::script(url ('/highchart/gauge', [$humidityInside->sd_value , 'humidityInside', 'Luchtvochtigheid binnen','%',0,100,'#55BF3B','#DDDF0D','#DF5353'])) }}

在高图控制器中我只是将变量发送到视图:

 public function gauge($value,$divname,$chartTitle,$suffix,$minValue,$maxValue,$colorMin,$colorMed,$colorMax)
        {
            return view('highchart.gauge')->with(compact('value' , 'divname','chartTitle','suffix','minValue','maxValue','colorMin','colorMed','colorMax'));
        }

视图然后只是呈现javascript,将变量放在正确的位置:

$(function () {

    var gaugeOptions = {

        chart: {
            type: 'solidgauge'
        },

        title: null,

        pane: {
            center: ['50%', '85%'],
            size: '140%',
            startAngle: -90,
            endAngle: 90,
            background: {
                backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                innerRadius: '60%',
                outerRadius: '100%',
                shape: 'arc'
            }
        },

        tooltip: {
            enabled: false
        },

        // the value axis
        yAxis: {
            stops: [
                [0.1, '{{ $colorMin }}'], // green
                [0.8, '{{ $colorMed }}'], // yellow
                [0.9, '{{ $colorMax }}'] // red
            ],
            lineWidth: 0,
            minorTickInterval: null,
            tickPixelInterval: 400,
            tickWidth: 0,
            title: {
                y: -70
            },
            labels: {
                y: 16
            }
        },

        plotOptions: {
            solidgauge: {
                dataLabels: {
                    y: 5,
                    borderWidth: 0,
                    useHTML: true
                }
            }
        }
    };


    $('#{{$divname}}').highcharts(Highcharts.merge(gaugeOptions, {
        yAxis: {
            min: {{ $minValue }},
            max: {{ $maxValue }},
            title: {
                text: '{{ $chartTitle }} '
            }
        },

        credits: {
            enabled: false
        },

        series: [{
            name: '{{ $chartTitle }}',
            data: [{{ $value}} ],
            dataLabels: {
                format: '
{y}
' + '{{$suffix}}
' }, tooltip: { valueSuffix: ' {{$suffix}}' } }] })); });

正如您在图像中看到的那样,第一个脚本工作正常,但是每个后续脚本的渲染时间都会因一个或另一个原因而上升.如果我只是为其中一个图表渲染脚本,它工作正常.

什么在减慢我的速度?



1> Thomas Kim..:

这实际上不是Laravel问题.在进入慢加载时间之前,如果要返回脚本,则需要设置正确的标头.

这个:

return view('highchart.gauge')->with(compact('value' , 'divname','chartTitle','suffix','minValue','maxValue','colorMin','colorMed','colorMax'));

应该是这样的:

return response(view('highchart.gauge')->with(compact('value' , 'divname','chartTitle','suffix','minValue','maxValue','colorMin','colorMed','colorMax')), 200, ['Content-Type' => 'application/javascript']);

现在回答缓慢的加载时间,你正在加载... 12个脚本左右?为了最小化加载时间,您应该最小化往返次数/减少HTTP请求.每个浏览器每个服务器具有最大数量的同时HTTP连接,这是您的图像所示的内容.它同时加载2个(或左右?)脚本.

除此之外,您使用Laravel来解析脚本而不仅仅是提供javascript文件.这是很多开销.那么你需要做什么?

    最小化HTTP请求.

    如果可能,只需提供文件而不是让服务器解析脚本.

最小化HTTP请求的一种方法是一次发送所有变量,然后返回连接视图.为了连接视图,您可以像使用字符串一样使用句点:

return response(view(...) . view(...), 200, ['Content-Type' => 'application/javascript']);

我建议的另一种方法是将高图脚本移动到公共目录.然后,在您的刀片文件中,只需将变量存储在javascript数组中.然后,您的高图脚本可以遍历该脚本并初始化图表.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有