Сравнительный анализ языков PHP и Python

Количество веб ресурсов на php по годам

Сравнительный анализ языков PHP и Python

Общую информацию по веб ресурсам на Python не удалось получить*

Список фреймворков на php

https://laravel.com/

https://symfony.com/

https://cakephp.org/

https://framework.zend.com/

https://phalcon.io/en-us

https://fuelphp.com/

https://www.yiiframework.com/

https://www.slimframework.com/

https://lumen.laravel.com/docs/9.x

phpixie.com

https://www.silverstripe.org/software/framework/

http://www.pradoframework.net/site/

https://www.phpopenbiz.org/

https://docs.contao.org/dev/

Список фреймворков на Python

Django

CherryPy

Flask

TurboGears

Pyramid

Web2Py

Bottle

Популярные сайты на php

Facebook

VK.com

Wikipedia

baidu

flickr

badoo

mail

avito

gosuslugi.ru

mgts.ru

msk.rt.ru

кинопоиск

2gis

dns

Популярные сайты на Python

Instagram

Google

Spotify

Netflix

Uber

Dropbox

Pinterest

Instacart

На многих проектах Python как и полагается играет лишь вспомогательную роль*

Самой главной особенностью языка PHP является его гибкость, это больше язык шаблонов, чем язык команд, он являясь императивным языком ближе к декларативным языкам, чем любой другой императивный язык. У него динамическая не строгая типизация, которая с выходом последних версий уже может быть строгой, конечно при большом количестве проверок в рантайме это будет замедлять работу программы, но в целом язык создан не для этого. Большинство интернет магазинов, сайтов услуг и т. д. написаны именно на нем, той скорости с которой сейчас работает чистый php код особенно с использованием Opcache более чем достаточно. Обычное время запроса к dns серверу от 0.2 до 0.5 секунд в среднем, при больших запросах к базе данных еще добавляем 0.2 секунды, сам же php код, при правильной организации архитектуры, а это роутинг, подключение основного класса и вызов метода для вывода данных на представление, отрабатывает менее 0.2 секунды. Этого более чем достаточно для работы обычных интернет магазинов и небольших ERP систем. Дополнительно для ускорения работы с данными сейчас можно использовать горизонтальный шардинг, например как партицирование в PgSQL через ORM, работа с графами также может вестись через orm запросы на обработку перед выводом данных.

Динамическая строгая типизация

Python хоть и является интерпретируемым, в отличии от PHP имеет строгую типизацию. И если бы типизация у Python была бы статическая, тогда было бы понятно, что логика работы такого машинного кода предусматривает абсолютную проверку на типы данных, которые явно заданы всегда, то есть не будет условия отсутствия заданного типа, в противном случае это сильно усложняет поддержку кода.

Область видимости

Python использует динамические ограничения видимости. То есть для оценки выражения компилятор сначала ищет текущий блок, а затем последовательно все вызывающие функции. То есть область видимости переменной может выходить за рамки определенного блока.

Проблема такого подхода в том, что каждое выражение должно быть протестировано в каждом возможном контексте. Это является одной из причин его медленной работы. Именно поэтому современные языки программирования используют в основном статическую область видимости.

Лямбда-функции

Несмотря на всю гибкость, использование лямбд в Python ограничено. Они могут быть только выражениями (expressions), но не инструкциями (statements). С другой стороны, объявления переменных и statements и есть инструкции. Проще говоря, добавление statements сделает лямбду многострочной, а синтаксис Python не позволяет так сделать.

Это различие между expressions и statements довольно произвольно, и не встречается в других языках.

Пробелы

Питон хорошо подходит начинающим разработчикам — там используются пробелы и отступы для обозначения разных уровней кода. Это делает его визуально привлекательным и интуитивно понятным.

В PHP больше полагаются на фигурные скобки и точки с запятой. И пусть это не так визуально комфортно для новичков, но на большом проекте такой подход очень помогает в понимании частей кода.

Работа с версткой

Для языка PHP уже создано очень много шаблонизаторов типа Smarty, Blade, Mustache, Twig, Volt и т.д., и в принципе сам php код без шаблонизатора очень легко встраивается в html код, и можно не ограничивать себя в отступах, писать так лаконично, насколько необходимо в соответствии с dom моделью, в отличии от Python, в котором отступ это часть языка конструкции синтаксического дерева, да и шаблонизаторов на Python не так уж и много, основной Jinja встроенный по умолчанию в Flask.

Работа со сложными структурами данных

За 15 лет работы мне часто приходилось использовать Python для различного рода задач, для подключения поиска ElasticSearch, использования синтаксического анализа на NLTK и т.д., но это прикладные задачи, также как и парсинг сайтов на node.js, но когда необходимо распарсить большие многомерные массивы, работать с каскадными интерфейсами объектов, таких как xml, json, для создания сложных динамических областей и т.д., намного проще и быстрее использовать именно PHP. И сложность именно в том, что часто в веб разработке такие многомерные массивы данных имеют различную структуру и типизацию элементов, работать с которой стандартно нельзя из-за строгой типизации языка Python, в PHP эту роль берет на себя сам интерпретатор кода, программисту достаточно только выполнить проверку выходных данных. Такую способность языку PHP дает большое количество встроенных методов и сложный анализ синтаксического дерева.

Итоги

С таким подходом скорость языка Python все равно не дотягивает до компилируемых языков, а писать большое приложение на нем очень сложно, намного проще использовать микросервисную архитектуру, при этом конечно же необходимо использовать оркестрацию, а также учитывать, что каждый из микросервисов работает со своим количеством библиотек, которые нужно автоматически обновлять и поддерживать, а также модулей самого языка.

Получается, что язык подходит больше как компаньон в использовании каких-то сложных задач именно для веб сервисов. Таких языков множество, например GraphQL или TypeScript — это языки компаньоны, которые отлично справляются со своей задачей.

Из плюсов языка конечно же можно назвать простой синтаксис, хотя и на PHP ребенок сможет писать, но за последнее время появилось множество по настоящему современных языков программирования, в которых не нужно следить за выделением и очень редко за утечкой памяти.

За последние годы вышли такие всем известные языки как Go, LESS, Scala, Kotlin, Swift и даже такой как WebAssembly, и конечно же все зависит от целей, которые преследует разработчик или его работодатель.

Многие говорят, что Python отлично подходит для разработки мобильных приложений, но писать десктопное или андроид приложение на интерпретируемом языке — это как писать сайты на c++, конечно можно, но зачем компилировать все приложение ради того, чтобы подвинуть кнопку на 2px вправо?

Для разработки андроид приложений есть новые хорошо зарекомендовавшие себя компилируемые языки, например Kotlin, помимо того, что это язык написанный в России у него еще куча преимуществ. Очень много различных способов работы с данными, именно благодаря этому он так хорошо компилируется в Js, он поддерживает как статическую так и динамическую типизацию. При этом правилом хорошего тона является все таки использование статической типизации так как она здесь строгая.

Очень простое и продуманное ООП, очень многие функции написаны специально так, чтобы разработчик переключаясь с другого языка не начинал изучать все с нуля. Лишний сахар убрали. При этом скобки оставили, но при этом используются стрелочные функции, упрощенный синтаксис проверок и ветвлений, возможность переопределения переменных и методов, все это в совокупности с большим количеством методов и компилируемостью дает огромные возможности для разработки мобильных приложений. И именно этот язык Google официально использует как основной для написания мобильных приложений.

P.S.

Python был разработан в начале 90-го года, и изначально представлял собой язык немного расширяющий возможности таких языков как Lisp, на текущее время на Python разработали кучу библиотек таких как NumPy, SciPy, Pandas и т.д., но при подключении всех библиотек и использовании полного функционального аналога PHP программа будет работать не быстрее, а иногда и медленнее. И это никак не делает его универсальным, это язык для математического анализа данных, причем именно для анализа, потому что саму обработку и вывод иногда проще реализовать на другом языке.

3 комментария

Ну и бред... с каких это пор питон быстрее пхп

Ответить

1. Где здесь написано что питон быстрее пхп
2. Бенчмарки здесь https://habr.com/ru/post/596841/
3. Статья не об этом, а о том, что не может быть универсального языка программирования, и каждый подходит для своих задач

Ответить

Python как и другой язык может быть быстрее в зависимости от задач, написано более быстрый в сравнении с использованием своих задач, и многие пишут об этом, потому что если взять нечеткий поиск в php и phyton, то конечно последний справится с этим лучше и быстрее, потому что он для этого и предназначен и расстояние Левенштейна и алгоритм Оливера работать будут на разных языках по разному

Ответить