首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >动态创建和加载JS

动态创建和加载JS
EN

Stack Overflow用户
提问于 2014-02-16 04:11:10
回答 1查看 147关注 0票数 0

我正在处理一个PHP项目,它编写js文件并在页面加载时执行它们。

动态编写JS文件并将脚本标记附加到页面html并只执行每个页面请求是一种良好的做法吗?

下面是我创建和链接JS文件的工作:

代码语言:javascript
运行
AI代码解释
复制
<?php

if (!function_exists('setScript')) {
    function setScript($script = null)
    {
        static $_script = array();
        if ($script == null) {
            return $_script;
            $_script = array();
        } else {
            $_script[] = $script;
        }
    }
}

if (!function_exists('linkJs')) {
    function linkJs($controllerName, $actionName)
    {
        $jsFileName = randomString(40) . '.js';
        $folderName = PUBLIC_DIR . DS . 'generated';
        if (!is_dir($folderName)) {
            mkdir($folderName);
            chmod($folderName, 777);
        }
        $fileName = $folderName . DS . $jsFileName;
        $availableFiles = scandir($folderName);
        unset($availableFiles[0]);
        unset($availableFiles[1]);
        foreach ($availableFiles as $file) {
            $file = $folderName . DS . $file;
            if (is_file($file)) unlink($file);
        }
        $script = "$(document).ready(function() {\n" . implode("\n", setScript()) . "});";
        file_put_contents($fileName, $script);
        $url = loadClass('Url', 'helpers');
        return "<script type='text/javascript' src='" . $url->baseUrl() . 'public/generated/' . $jsFileName . "'></script>";
    }
}

if (!function_exists('alert')) {
    function alert($message, $returnScript = false)
    {
        if (isAjax()) {
            if ($returnScript) {
                return "\nalert('$message');\n";
            }
            echo "\nalert('$message');\n";
        } else {
            setScript("\nalert('$message');\n");
        }
    }
}

请建议这是否是一个良好的做法,这样做,或任何其他方式,我可以这样做。

大约30-40个用户将同时登录到该网站,每秒将有大约5-10个页面请求。(这些是预测。可能会上升)。

是编写js文件(到硬盘驱动器)并将其链接起来是一个很好的实践,或者仅仅将原始脚本添加到html主体是一种很好的做法,因为将js文件写入js文件可以使js是非侵入性的。

而且,生成的javascript将是动态的,可能是针对每个页面请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-16 04:32:26

如果除了每次动态生成(我的猜测是脚本的内容对于每个请求至少有80%的不同)之外,没有其他选择,那么将脚本直接写入html文件,因为链接将导致浏览器发出另一个请求来包含脚本。

通过动态生成文件,您已经降低了性能。

我能想到的最好的方法是实际创建一个php脚本,它自己生成js,然后创建一个.htaccess重写规则来将/script/generator/{HASH_FOR_REQUEST}.js重写到/path/to/php-script-generator.php,这样如果请求相同,就可以利用浏览器缓存。

但是,如果只是关于JS的具体细节发生了变化,而js函数的主体仍然非常相似(例如,您正在使用js向客户端报告信息),那么可以考虑在php文件中编写js,然后使用php内联标记来响应您需要更改的内容。

例如:

此脚本将向js发出警告,因此当加载查询字符串时,它将报告查询中的内容.

代码语言:javascript
运行
AI代码解释
复制
<?php
    // disable output buffering 

    /* the reason for this is that the browser will wait 
     * for the first byte returned before continuing with the page. 
     * If it has to wait for the whole file performance will be degarded.
     */

    while(ob_get_level() != 0) ob_end_clean();    

    header("Content-type:text/javascript");

    // it is wise to set some cache headers here


    if(isset($_GET['message']) {
        $message = urldecode($_GET['message']);
    } else {
        $message = "No message!";
    }
?>

// write the js...
alert("<?php echo $message; ?>");

通过请求/path/to/script.php?message=hello+world,脚本将返回alert("hello world");

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21810899

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文