NodeJS vs Laravel with Mysql Database 哪一个在性能方面更好

NodeJS vs Laravel with Mysql Database which one better in term of performance

我正在开发一个带有 MYSQL 数据库的 REST 后端,现在我需要选择哪种服务器端语言在消耗更少的服务器资源(CPU 和 Ram)方面更好。

例如,我有一个 POST 端点(注册一个新用户帐户)和另一个 GET 端点(以 JSON 格式获取用户信息)。我预计我的网站会出现高流量,哪种编程语言会消耗更多的服务器资源?

我用谷歌搜索了 NodejS 和 Laravel 之间的比较,我发现一些网站显示基准测试有利于 laravel 和其他网站显示 NodeJS 更好。

对于基本的 get/set 数据库操作,无论您选择哪种语言,都不会花费大量时间。

根据非性能标准选择一种语言,并解决出现的特定性能问题。

由于您标记了负载平衡,因此我假设您的应用程序已经可以水平扩展。

我自己构建了 sql 脚本编写器,这对我的项目来说非常快,因为我以前的 PHP 后端太慢(在我的情况下)

const mysqlLib = require('mysql');
const ENV = require('../configs/env').ENV;
const database = ENV.database;
const mysql = mysqlLib.createPool(database);

function executeQuery(query) {
    return new Promise((resolve, reject) => {
        mysql.query(query, (err, result, fields) => {
            if (err) {
                console.log(query);
                return reject(err);
            }

            resolve(result);
        });
    });
}

function executeQueryGetFirst(query) {
    return new Promise((resolve, reject) => {
        mysql.query(query, (err, result, fields) => {
            if (err) {
                console.log(query);
                return reject(err);
            }

            result = JSON.parse(JSON.stringify(result));

            if (result.length == 0) {
                resolve(null);
            } else {
                resolve(result[0]);
            }
        });
    });
}

var Database = {
    getById(table, id) {
        var query = '';
        query += 'SELECT * FROM ' + table + ' ';
        query += 'WHERE Id = ' + id;
        query += ' LIMIT 1';

        return executeQueryGetFirst(query);
    },
    getAllById(table, id) {
        var query = '';
        query += 'SELECT * FROM ' + table + ' ';
        query += 'WHERE Id = ' + id;

        return executeQuery(query);
    },
    getByAttributes(table, attributes) {
        var query = 'SELECT * FROM ' + table;
        var whereQuery = '';

        for (prop in attributes) {
            if (whereQuery != '') {
                whereQuery += ' AND ';
            }

            if (attributes[prop] == null) {
                whereQuery += prop + ' IS NULL';
            } else {
                whereQuery += prop + ' = "' + attributes[prop] + '"';
            }
        }

        query += ' WHERE ' + whereQuery;
        query += ' LIMIT 1';

        return executeQueryGetFirst(query);
    },
    getAllByAttributes(table, attributes) {
        var query = 'SELECT * FROM ' + table;
        var whereQuery = '';

        for (prop in attributes) {
            if (whereQuery != '') {
                whereQuery += ' AND ';
            }

            if (attributes[prop] == null) {
                whereQuery += prop + ' IS NULL';
            } else {
                whereQuery += prop + ' = "' + attributes[prop] + '"';
            }
        }

        query += ' WHERE ' + whereQuery;

        return executeQuery(query);
    },
    getAll(table) {
        var query = 'SELECT * FROM ' + table;

        return executeQuery(query);
    },
    add(table, attributes) {
        var insertName = '(Id';
        var insertData = '(NULL';

        for (prop in attributes) {
            var value = attributes[prop];
            if (value != null) {
                value = '"' + value + '"';
            }

            insertName += ', ' + prop;
            insertData += ', ' + value;
        }

        insertName += ')';
        insertData += ')';

        var query = 'INSERT INTO ' + table + ' ' + insertName + ' VALUES ' + insertData;

        return executeQuery(query);
    },
    updateByID(table, id, attributes) {
        var query = 'UPDATE ' + table;
        var setQuery = '';

        for (prop in attributes) {
            if (setQuery != '') {
                setQuery += ', ';
            }

            setQuery += prop + ' = "' + attributes[prop] + '"';
        }

        query += ' SET ' + setQuery + ' WHERE Id = ' + id;

        return executeQuery(query);
    },
    updateByAttributes(table, findAttributes, attributes) {
        var query = 'UPDATE ' + table;
        var setQuery = '';
        var whereQuery = '';

        for (prop in attributes) {
            if (setQuery != '') {
                setQuery += ', ';
            }

            setQuery += prop + ' = "' + attributes[prop] + '"';
        }

        for (prop in findAttributes) {
            if (whereQuery != '') {
                whereQuery += ', ';
            }

            whereQuery += prop + ' = "' + findAttributes[prop] + '"';
        }

        query += ' SET ' + setQuery + ' WHERE ' + whereQuery;

        return executeQuery(query);
    },
    deleteById(table, id) {
        var query = 'DELETE FROM ' + table + ' WHERE Id = ' + id;

        return executeQuery(query);
    },
    deleteByAttributes(table, attributes) {
        var query = 'DELETE FROM ' + table;
        var whereQuery = '';

        for (prop in attributes) {
            if (whereQuery != '') {
                whereQuery += ' AND ';
            }

            whereQuery += prop + ' = "' + attributes[prop] + '"';
        }

        query += ' WHERE ' + whereQuery;

        return executeQuery(query);
    }
}

Database.executeQuery = executeQuery;
Database.executeQueryGetFirst = executeQueryGetFirst;

exports.Database = Database;

环境配置

var ENV = {
    isDev: true,
    database: {
        connectionLimit: 10,
        host: 'localhost',
        user: 'root',
        password: '',
        database: 'your_database'
    }
}

exports.ENV = ENV;
exports.ENV.port = ENV.isDev ? 15001 : 8887;