предисловие
Эта статья сериализуется и обновляется, чтобы зафиксировать мой процесс обучения и ямы, на которые я наступил, сравнитеNode
иPHP
Различия в различных сценариях, поделитесь некоторыми практическими кодами
По моей личной ситуации,Laravel
Пользователь является ядром толпы, и большинство кодов в этой серии находятся вNode
Спуститесь, чтобы реализовать функции традиционных серверных языков или фреймворков, таких какLaravel
маршрутов/контроллеров/промежуточного ПО/внедрения зависимостей и т. д. (см.Varal), и недавно подготовленныйLaravel
изCollection
иORM
Сначала позвольте мне заявить:
- PHP — лучший язык в мире
Это не шутка, просто когда яNode
настоящие чувства
1. Синхронный и асинхронный
Первое и самое важное отличие — это то, которое больше всего влияет на эффективность для программистов, привыкших к синхронной разработке.
в видеPHP
я только что встретилNode
, потому что я не понимаю "почемуNode
В коде везде колбэки» и «почему я не могу использовать глобальные функции» уже давно, и эти две проблемы станут понятны после понимания разницы между синхронным и асинхронным.
PHP
является синхронным (конечно, сейчас возможно и асинхронное программирование, напримерSwoole, а производительность не сравнима сNode
бедный), как правило, зависит отApache
илиNginx
в видеWeb Server
, каждый запрос происходитphp-fpm
независимо от руководстваPHP
В процессе загруженные ресурсы освобождаются после завершения запроса, поэтому, будь то глобальная переменная или глобальная функция, она будет действительна только для текущего запроса.
заNode
Например, он находится в памяти и самWeb Server
, поэтому определение глобальных переменных и функций естественным образом влияет на все запросы, особенно на одновременные.
Например:
существуетLaravel
, используйте глобальную функциюapp()
вы можете получить服务容器
, через который можно получить практически всю информацию о запросе. пока вexpress
середина,app
переменная должна пройтиПерезвонипараметр передается для получения
2. Структура данных JS
① Преобразование типов
Js
иPHP
Также нет необходимости объявлять типы переменных и поддерживать автоматическое преобразование, вPHP
, для конкатенации строк.
, для добавления значений+
, результат преобразования определяется по оператору, что понятно и понятно, ноJs
использовать только+
, что приводит к тому, что конечным результатом будет только строка, если в факторе есть строка.
Решение: ссылкаунарный положительный знак
+'123' // 123
1 + (+'123') // 124
② Массив
Js
Массивы в не поддерживаются键值对
, что приводит кPHP
Многие вещи, которые вы можете делать с массивами вJs
Только объекты могут быть использованы вES6
представилMap
Структура данных, но метод построения слишком античеловеческий, и способ доступа к значениям неудобный.Думаю, в большинстве случаев использовать не просто.Массив+объект
Также стоит отметить, что мы обычно используемtypeof
ключевое слово, чтобы получитьJs
тип данных, но数组
и对象
оба возвращаютсяobject
, поэтому для массивов обычно используйтеArray.isArray()
метод судить
3. Траверс
Объекты обычно используются для хранения键值对
данные, так что нам часто нужно использовать синтаксис обхода, применимый к объектам
foo...in
На каждой итерации разныеИмя свойстваприсваивается переменной. Его не следует использовать для итерации по массиву, потому что порядок итерации зависит от контекста выполнения, поэтому обход массива не обязательно обеспечивает доступ к элементам по порядку. Он перебирает прототип объекта, поэтому иногда необходимо использоватьhasOwnProperty()
для фильтрации свойств прототипа
for...of
В каждой итерации будут разныестоимость имуществаприсваивается переменной, но требует, чтобы объект реализовывал[Symbol.iterator]
метод см.for...of
Итак, для простого использования键值对
объект с помощьюfor...in
,заArray
,Map
Используется при ожидании встроенных объектовfor...of
это лучший выбор
4. Нативные вспомогательные методы
Возьмите массив в качестве примера,PHP
предоставляет около 80+ методов, связанных с манипулированием массивами, в то время какJS
Всего около 30+, в результате чегоPHP
Будучи избалованным, я часто вздыхаю: "WTF, неужели ты вообще должен сам писать эту функцию?" Конечно, в этом есть как минусы, так и плюсы. Если вы будете уделять большое внимание качеству кода, то обязательно сравните несколько реализаций этой функции и выбрать лучший, который, хотя и займет много времени, также тренирует ваш алгоритм и мыслительные способности
5. Классы и наследование
ES6
обеспечивает реализацию классов и наследования на уровне языка, но по сравнению сPHP
Классы имеют следующие отличия:
- Интерфейс не поддерживается
- Приватные методы не поддерживаются, решение:
Переместите частные методы из класса,
call
способ вызоваclass Foo { foo(baz) { bar.call(this, baz); } } function bar(baz) { return this.bar = baz; } let a = new Foo(); a.foo(1); console.log(a.bar); // 1
- Не поддерживает приватные свойства, есть предложения по поддержке приватных свойств и приватных методов
- Статические свойства не поддерживаются, решение:
class Foo { // } Foo.bar = 1; console.log(Foo.bar); // 1
Тем не менее, его все еще можно использовать, иES6
также обеспечиваетProxyиReflectОбъект, используемый для перехвата и определения поведения основных операций по умолчанию, что эквивалентно внесению изменений на уровне языка, аналогичноPHP
магический метод, но более мощный! Через них к родному языку можно добавить еще какие-то разумные фичи
6. Экологическая среда
PHP
имеютComposer
,Js
имеютnpm
, текущая тенденция, естественно, в том, что последний более популярен, позвольте мне рассказать вам о своих ощущениях:
- отличается от
Composer
Как называется имя владельца/пакета,npm
Уникально только имя пакета, естественно есть такие пакеты, которые "занимают яму без говна" - Качество кардинального числа, естественно, снижается, и требуется больше времени, чтобы найти надежную упаковку, что субъективно вызывает у меня очень грязное ощущение.
- Не могу до конца понять, что простая функция или даже функция может быть пакетом, а количество зависимостей так велико.
- не могу понять
express
После установки этого облегченного фреймворка папка зависимостей лучше, чемLaravel
все еще большой
Заключение и предварительный просмотр
В общем, переключать язык разработки точно будет немного неудобно, и сейчас я это делаю спокойно.Node
Я просто хочу записать свои настоящие чувства в то время, и слова немного враждебны. Пожалуйста, простите меня.
Следующая статья познакомит меня с использованиемNode
развиватьWeb Server
История статьи, спасибо за прочтение, прошу указать на ошибки в тексте, приветствую общение